Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unfolder DXF/SVG Exporter and improvements.. #268

Merged
merged 3 commits into from
Mar 24, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
89 changes: 81 additions & 8 deletions SheetMetalUnfolder.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ def main():
genObjTransparency = 70
manKFactor = None
kFactorStandard = None
exportType = None

# TODO: Error Codes
# - Put error numbers into the text
Expand Down Expand Up @@ -1050,14 +1051,31 @@ def make_new_face_node(self, face_idx, P_node, P_edge, wires_e_lists):
counter_found = False

if counter_found:
distance = self.__Shape.Faces[i].distToShape(self.__Shape.Faces[face_idx])[0]

if math.isclose(distance, self.__thickness):
FreeCAD.Console.PrintLog( "found counter-face"+ str(i + 1) + "\n")
counterFaceList.append([i, distance])
gotCFace = True
if FreeCADGui.Selection.getSelection()[0].Refine is True:
distance = self.__Shape.Faces[i].distToShape(self.__Shape.Faces[face_idx])[0]
if math.isclose(distance, self.__thickness):
FreeCAD.Console.PrintLog( "found counter-face"+ str(i + 1) + "\n")
counterFaceList.append([i, distance])
gotCFace = True
else:
counter_found = False
else:
counter_found = False
# need a mean point of the face to avoid false counter faces
counterMiddle = Base.Vector(0.0,0.0,0.0) # calculating a mean vector
for Vvec in self.__Shape.Faces[i].OuterWire.Vertexes:
counterMiddle = counterMiddle.add(Vvec.Point)
counterMiddle = counterMiddle.multiply(1.0/len(self.__Shape.Faces[i].OuterWire.Vertexes))

distVector = counterMiddle.sub(faceMiddle)
counterDistance = distVector.Length

if counterDistance < 2*self.__thickness: # FIXME: small stripes are a risk!
FreeCAD.Console.PrintLog( "found counter-face"+ str(i + 1) + "\n")
counterFaceList.append([i, counterDistance])
gotCFace = True
else:
counter_found = False
FreeCAD.Console.PrintLog("faceMiddle: " + str(faceMiddle) + " counterMiddle: "+ str(counterMiddle) + "\n")

if gotCFace:
newNode.c_face_idx = counterFaceList[0][0]
Expand Down Expand Up @@ -1347,7 +1365,10 @@ def Bend_analysis(self, face_idx, parent_node = None, parent_edge = None):
edge = child_info[1]

if not self.handle_hole(parent_node, face_idx, edge, child_face, child_index):
if not self.handle_chamfer(face_idx, edge, child_face, child_face_idx):
if FreeCADGui.Selection.getSelection()[0].Refine is True:
if not self.handle_chamfer(face_idx, edge, child_face, child_face_idx):
self.Bend_analysis(child_face_idx, parent_node, edge)
else:
self.Bend_analysis(child_face_idx, parent_node, edge)
else:
FreeCAD.Console.PrintLog("remove child from List: " + str(child_info[0]) + "\n")
Expand Down Expand Up @@ -2893,6 +2914,23 @@ def __init__(self):
self.genColor.setMaximumHeight(self.checkSketch.height() * 2 / 3)
self.genColor.setColor(genSketchColor)
self.horizontalLayout_1.addWidget(self.genColor)

# DXF/SVG selection
self.exportLabel = QtGui.QLabel(self.form)
self.exportLabel.setObjectName(_fromUtf8("exportLabel"))
self.horizontalLayout_1.addWidget(self.exportLabel)
export_group = QtGui.QButtonGroup(SMUnfoldTaskPanel)
self.dxfExport = QtGui.QRadioButton("exportDXF")
self.dxfExport.setText("DXF")
self.dxfExport.setObjectName(_fromUtf8("dxfExport"))
export_group.addButton(self.dxfExport)
self.svgExport = QtGui.QRadioButton("exportSVG")
self.svgExport.setText("SVG")
self.svgExport.setObjectName(_fromUtf8("svgExport"))
export_group.addButton(self.svgExport)
self.horizontalLayout_1.addWidget(self.dxfExport)
self.horizontalLayout_1.addWidget(self.svgExport)

self.verticalLayout.addLayout(self.horizontalLayout_1)

self.checkSeparate = QtGui.QCheckBox(self.form)
Expand Down Expand Up @@ -3016,6 +3054,7 @@ def __init__(self):
self.transSpin.setProperty("value", genObjTransparency)

self.updateKfactorStandard()
self.updatetypeExport()
self.checkKfactChange()
self.checkSketchChange()
self.populateMdsList()
Expand Down Expand Up @@ -3115,17 +3154,27 @@ def updateKfactorStandard(self, transient_std=None):
self.kfactorAnsi.setChecked(kFactorStandard == 'ansi')
self.kfactorDin.setChecked(kFactorStandard == 'din')

def updatetypeExport(self):
global exportType
self.dxfExport.setChecked(exportType == 'dxf')
self.svgExport.setChecked(exportType == 'svg')

def getManualKFactorString(self, k_factor, standard):
return "material_%.2f%s" % (k_factor, standard)

def accept(self):
global genSketchChecked, bendSketchChecked, genObjTransparency, manKFactor
global genSketchColor, bendSketchColor
global kFactorStandard
global exportType
mds_help_url = "https://github.com/shaise/FreeCAD_SheetMetal#material-definition-sheet"

genSketchChecked = self.checkSketch.isChecked()
genSketchColor = self.genColor.color()
if self.dxfExport.isChecked():
exportType = 'dxf'
if self.svgExport.isChecked():
exportType = 'svg'
bendSketchChecked = self.checkSeparate.isChecked()
bendSketchColor = self.bendColor.color()
intSketchColor = self.internalColor.color()
Expand Down Expand Up @@ -3392,6 +3441,21 @@ def accept(self):
doc.commitTransaction()
docG = FreeCADGui.ActiveDocument
docG.getObject(a.Name).Transparency = genObjTransparency
doc.recompute()
if exportType == "dxf":
__objs__=[]
__objs__.append(FreeCAD.getDocument(doc.Name).getObject(sku.Name))
import importDXF
dxfFilename = FreeCAD.ActiveDocument.FileName[0:-6] + "-" + sku.Name + ".dxf"
importDXF.export(__objs__,dxfFilename)
del __objs__
if exportType == "svg":
__objs__=[]
__objs__.append(FreeCAD.getDocument(doc.Name).getObject(sku.Name))
import importSVG
svgFilename = FreeCAD.ActiveDocument.FileName[0:-6] + "-" + sku.Name + ".svg"
importSVG.export(__objs__,svgFilename)
del __objs__
doc.recompute()
FreeCAD.ActiveDocument.recompute()
return True
Expand Down Expand Up @@ -3433,12 +3497,21 @@ def checkUseMdsChange(self):

def checkSketchChange(self):
self.checkSeparate.setEnabled(self.checkSketch.isChecked())
if self.checkSketch.isChecked():
self.exportLabel.show()
self.dxfExport.show()
self.svgExport.show()
else:
self.exportLabel.hide()
self.dxfExport.hide()
self.svgExport.hide()
#self.genColor.setEnabled(self.checkSketch.isChecked())
#self.bendColor.setEnabled(self.checkSketch.isChecked() and self.checkSeparate.isChecked())

def retranslateUi(self):
self.form.setWindowTitle(_translate("SheetMetal", "Unfold sheet metal object", None))
self.checkSketch.setText(_translate("SheetMetal", "Generate projection sketch", None))
self.exportLabel.setText(_translate("SheetMetal", "Export Sketch", None))
self.checkSeparate.setText(_translate("SheetMetal", "Separate projection layers", None))
self.checkKfact.setText(_translate("SheetMetal", "Manual K-factor", None))
self.label.setText(_translate("SheetMetal", "Unfold object transparency", None))
Expand Down