Initial commit - DesignerCEP Project with Caddy deployment
This commit is contained in:
324
tempdemo/psmark/test2.py
Normal file
324
tempdemo/psmark/test2.py
Normal file
@@ -0,0 +1,324 @@
|
||||
import myskin_styles, myskin_windows
|
||||
from PyQt5.QtWidgets import *
|
||||
from PyQt5.QtGui import *
|
||||
import sys, os
|
||||
import piece_decorative
|
||||
import ezdxf
|
||||
import ezdxf.tools
|
||||
import ezdxf.bbox
|
||||
import ezdxf.units
|
||||
import ezdxf.math
|
||||
import qdarktheme
|
||||
|
||||
import re
|
||||
def extract_number_from_block_name(block_name):
|
||||
# 使用正则表达式提取块名称中的数字部分
|
||||
match = re.search(r'P(\d+)', block_name)
|
||||
if match:
|
||||
return int(match.group(1))
|
||||
return 0 # 如果没有找到数字,默认返回0
|
||||
|
||||
|
||||
|
||||
|
||||
def 获取dxf中心坐标和角度列表(doc):
|
||||
msp = doc.modelspace()
|
||||
mspBox = ezdxf.bbox.extents(msp)
|
||||
result = []
|
||||
for entity in msp.query():
|
||||
if entity.dxftype() == "INSERT":
|
||||
result.append({"块名称": entity.dxf.name, "center": None, "rotation": None})
|
||||
|
||||
temp = []
|
||||
rotation = None
|
||||
block = doc.blocks[entity.dxf.name]
|
||||
for e in block:
|
||||
if e.dxftype() != "TEXT":
|
||||
temp.append(e)
|
||||
else:
|
||||
rotation = e.dxf.all_existing_dxf_attribs()["rotation"]
|
||||
# 只有 0 90 -90 -180 出现其他的就以近似值代替
|
||||
if rotation < 0:
|
||||
rotation += 360
|
||||
if rotation < 45 or rotation > 315:
|
||||
rotation = 0
|
||||
elif rotation < 135:
|
||||
rotation = 90
|
||||
elif rotation < 225:
|
||||
rotation = -180
|
||||
else:
|
||||
rotation = -90
|
||||
|
||||
result[-1]["rotation"] = rotation
|
||||
|
||||
center = ezdxf.bbox.extents(temp).center
|
||||
# center y 改成从上往下计算
|
||||
center = (center.x, mspBox.size[1] + mspBox.extmin[1] - center.y)
|
||||
# 旋转
|
||||
center = (mspBox.size[1] - center[1], center[0])
|
||||
|
||||
result[-1]["center"] = center
|
||||
|
||||
# 打印处理前的数据
|
||||
print("处理前的数据:", result)
|
||||
|
||||
# 按块名称进行排序
|
||||
result.sort(key=lambda x: extract_number_from_block_name(x["块名称"]))
|
||||
|
||||
# 打印处理后的数据
|
||||
print("处理后的数据:", result)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
|
||||
class DXFWinUi(object):
|
||||
|
||||
def setupUi(self, MainWindow):
|
||||
# MainWindow.resize(800, 600)
|
||||
|
||||
self.centralwidget = QWidget(MainWindow)
|
||||
|
||||
mainLayout = QHBoxLayout(self.centralwidget)
|
||||
|
||||
groupBox = QGroupBox('多码混排')
|
||||
|
||||
leftLayout = QVBoxLayout(groupBox)
|
||||
|
||||
label1 = QLabel('大货裁片路径')
|
||||
# self.label2 = QLabel('暂未选择文件夹。')
|
||||
self.pushButton1 = QPushButton("选择文件夹")
|
||||
self.pushButton1.setFixedSize(100,30)
|
||||
leftLayout.addWidget(label1)
|
||||
# leftLayout.addWidget(self.label2)
|
||||
leftLayout.addWidget(self.pushButton1)
|
||||
leftLayout.addStretch()
|
||||
|
||||
label6 = QLabel('DXF文件路径')
|
||||
# self.label7 = QLabel('暂未选择文件。')
|
||||
self.pushButton2 = QPushButton("选择文件")
|
||||
self.pushButton2.setFixedSize(100, 30)
|
||||
leftLayout.addWidget(label6)
|
||||
# leftLayout.addWidget(self.label7)
|
||||
leftLayout.addWidget(self.pushButton2)
|
||||
leftLayout.addStretch()
|
||||
|
||||
|
||||
label3 = QLabel('分辨率大小')
|
||||
self.lineEdit1 = QLineEdit()
|
||||
self.lineEdit1.setValidator(QIntValidator())
|
||||
self.lineEdit1.setFixedSize(150,30)
|
||||
leftLayout.addWidget(label3)
|
||||
leftLayout.addWidget(self.lineEdit1)
|
||||
leftLayout.addStretch()
|
||||
|
||||
label4 = QLabel('文档名称')
|
||||
self.lineEdit2 = QLineEdit()
|
||||
self.lineEdit2.setFixedSize(150,30)
|
||||
leftLayout.addWidget(label4)
|
||||
leftLayout.addWidget(self.lineEdit2)
|
||||
leftLayout.addStretch()
|
||||
|
||||
label5 = QLabel('单码片数')
|
||||
self.lineEdit3 = QLineEdit()
|
||||
self.lineEdit3.setFixedSize(150,30)
|
||||
self.lineEdit3.setValidator(QIntValidator())
|
||||
leftLayout.addWidget(label5)
|
||||
leftLayout.addWidget(self.lineEdit3)
|
||||
leftLayout.addStretch()
|
||||
|
||||
|
||||
|
||||
# 滚动区域
|
||||
scrollArea = QScrollArea()
|
||||
scrollArea.setFixedSize(200,210)
|
||||
scrollWidget = QWidget(scrollArea)
|
||||
self.scrollWidgetLayout = QVBoxLayout(scrollWidget)
|
||||
self.scrollWidgetLayout.setContentsMargins(5,5,5,5)
|
||||
self.scrollWidgetLayout.setSpacing(5)
|
||||
scrollArea.setWidget(scrollWidget)
|
||||
scrollArea.setWidgetResizable(True)
|
||||
leftLayout.addWidget(scrollArea)
|
||||
leftLayout.addStretch()
|
||||
|
||||
rightWidget = QWidget()
|
||||
|
||||
# rightLayout = QVBoxLayout(rightWidget)
|
||||
# self.okPushButton = QPushButton("OK")
|
||||
# self.cancelPushButton = QPushButton("Cancel")
|
||||
# rightLayout.addWidget(self.okPushButton)
|
||||
# rightLayout.addWidget(self.cancelPushButton)
|
||||
# rightLayout.addStretch()
|
||||
|
||||
# rightWidget.setLayout(rightLayout)
|
||||
self.runButton = QPushButton("运行")
|
||||
leftLayout.addWidget(self.runButton)
|
||||
|
||||
rightWidget = QWidget()
|
||||
|
||||
mainLayout.addWidget(groupBox, 1)
|
||||
# mainLayout.addWidget(rightWidget, 1)
|
||||
|
||||
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
|
||||
|
||||
class DXFWin(QMainWindow, DXFWinUi):
|
||||
|
||||
def __init__(self):
|
||||
QMainWindow.__init__(self)
|
||||
self.ui = DXFWinUi()
|
||||
self.ui.setupUi(self)
|
||||
self.setWindowTitle("水平布局管理例子")
|
||||
|
||||
desktop = QApplication.desktop()
|
||||
self.move((desktop.width() - self.width()) / 2, (desktop.height() - self.height()) /2)
|
||||
|
||||
self.ui.pushButton1.clicked.connect(self.chooseDir)
|
||||
# self.ui.cancelPushButton.clicked.connect(self.close)
|
||||
self.ui.pushButton2.clicked.connect(self.chooseDxf)
|
||||
# self.ui.okPushButton.clicked.connect(self.ok)
|
||||
self.ui.runButton.clicked.connect(self.run)
|
||||
|
||||
self.dir = None
|
||||
self.dxfPath = None
|
||||
self.dxfLineEdits = {}
|
||||
|
||||
def run(self):
|
||||
print("按钮被点击")
|
||||
|
||||
pass
|
||||
|
||||
|
||||
|
||||
def chooseDir(self):
|
||||
rst = QFileDialog.getExistingDirectory()
|
||||
|
||||
if rst != '':
|
||||
self.ui.label2.setText(rst)
|
||||
self.dir = rst
|
||||
|
||||
def chooseDxf(self):
|
||||
rst = QFileDialog.getOpenFileName(filter='dxf file(*.dxf)')
|
||||
rst = rst[0]
|
||||
|
||||
if rst == '':
|
||||
return
|
||||
|
||||
|
||||
|
||||
# 解析文件路径
|
||||
# self.ui.label7.setText(rst)
|
||||
self.dxfPath = rst
|
||||
|
||||
sizes = []
|
||||
temp = ''
|
||||
for c in os.path.basename(rst).split('.')[0]:
|
||||
import string
|
||||
if c in string.punctuation:
|
||||
if temp != '':
|
||||
sizes.append(temp)
|
||||
temp = ''
|
||||
continue
|
||||
temp += c
|
||||
if temp != '':
|
||||
sizes.append(temp)
|
||||
|
||||
#清空self.ui.scrollWidgetLayout
|
||||
for i in range(self.ui.scrollWidgetLayout.count()):
|
||||
item = self.ui.scrollWidgetLayout.itemAt(0)
|
||||
self.ui.scrollWidgetLayout.removeItem(item)
|
||||
if item.widget():
|
||||
item.widget().deleteLater()
|
||||
self.dxfLineEdits = {}
|
||||
|
||||
# 添加label和button
|
||||
for size in sizes:
|
||||
layout = QHBoxLayout()
|
||||
layout.addWidget(QLabel(size))
|
||||
layout.setContentsMargins(0,0,00,0)
|
||||
lineEdit = QLineEdit()
|
||||
lineEdit.setValidator(QIntValidator())
|
||||
lineEdit.setFixedSize(100, 30)
|
||||
self.dxfLineEdits[size] = lineEdit
|
||||
layout.addWidget(lineEdit)
|
||||
self.ui.scrollWidgetLayout.addLayout(layout)
|
||||
|
||||
def ok(self):
|
||||
# 检查参数
|
||||
if self.dxfPath == None:
|
||||
QMessageBox.critical(self, "错误", "未选择dxf文件!")
|
||||
return
|
||||
if self.dir == None:
|
||||
QMessageBox.critical(self, "错误", "未选择大货裁片文件夹!")
|
||||
return
|
||||
|
||||
# 禁用窗口
|
||||
self.setDisabled(True)
|
||||
|
||||
# 解析dxf数据
|
||||
doc = ezdxf.readfile(self.dxfPath)
|
||||
msp = doc.modelspace()
|
||||
mspBox = ezdxf.bbox.extents(msp)
|
||||
|
||||
画布高 = mspBox.size[0]
|
||||
画布宽 = mspBox.size[1]
|
||||
|
||||
分辨率 = self.ui.lineEdit1.text()
|
||||
文档名称 = self.ui.lineEdit2.text()
|
||||
|
||||
piece_decorative.PS_DXF21_jscode_fun(f'创建裁片排版文档({画布宽},{画布高},{分辨率},"{文档名称}");')
|
||||
单码片数 = int(self.ui.lineEdit3.text())
|
||||
DXFnames = []
|
||||
for size, lineEdit in self.dxfLineEdits.items():
|
||||
for i in range(单码片数):
|
||||
for j in range(int(lineEdit.text())):
|
||||
DXFname = f"P{i + 1}-{size}"
|
||||
DXFnames.append(DXFname)
|
||||
print(DXFnames)
|
||||
|
||||
中心坐标和角度列表 = 获取dxf中心坐标和角度列表(doc)
|
||||
|
||||
|
||||
|
||||
# 保存新的文件
|
||||
# doc.saveas(self.dxfPath + ".out.dxf")
|
||||
|
||||
for i in range(len(DXFnames)):
|
||||
DXFname = DXFnames[i]
|
||||
中心x_mm = 中心坐标和角度列表[i]["center"][0]
|
||||
中心y_mm = 中心坐标和角度列表[i]["center"][1]
|
||||
角度 = 中心坐标和角度列表[i]["rotation"]
|
||||
|
||||
piece_decorative.PS_DXF21_jscode_fun(f'置入链接的智能对象("{self.dir}","{DXFname}");')
|
||||
piece_decorative.PS_DXF21_jscode_fun(f'裁片排版_lay({中心x_mm},{中心y_mm});')
|
||||
piece_decorative.PS_DXF21_jscode_fun(f'裁片角度({角度});')
|
||||
|
||||
|
||||
self.setDisabled(False)
|
||||
|
||||
def main():
|
||||
try:
|
||||
app = QApplication(sys.argv)
|
||||
# myskin_styles.dark(app)
|
||||
win = DXFWin()
|
||||
qdarktheme.setup_theme(
|
||||
custom_colors={
|
||||
"[dark]": {
|
||||
"background": "#4d4d4d",
|
||||
"foreground": "#ffffff",
|
||||
"primary": "#ffffff",
|
||||
"border": "#717070",
|
||||
}
|
||||
}
|
||||
)
|
||||
# mw = myskin_windows.ModernWindow(win)
|
||||
# win.setWindowIcon(QIcon('./ui/app.ico'))
|
||||
win.show()
|
||||
# win.show()
|
||||
sys.exit(app.exec_())
|
||||
except Exception as e:
|
||||
print(f"An error occurred: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user