PathSurface now uses base object from job.
This means Surface won't work on Meshes directly. They should be converted so FreeCAD solids first. Surface still needs lots of work.
This commit is contained in:
committed by
Yorik van Havre
parent
327044ff2a
commit
892f9f784d
@@ -248,7 +248,10 @@ class ObjectContour:
|
||||
|
||||
edgelist = contourwire.Edges
|
||||
edgelist = Part.__sortEdges__(edgelist)
|
||||
output += self._buildPathLibarea(obj, edgelist)
|
||||
try:
|
||||
output += self._buildPathLibarea(obj, edgelist)
|
||||
except:
|
||||
FreeCAD.Console.PrintError("Something unexpected happened. Unable to generate a contour path. Check project and tool config.")
|
||||
if obj.Active:
|
||||
path = Path.Path(output)
|
||||
obj.Path = path
|
||||
@@ -408,22 +411,24 @@ class CommandPathContour:
|
||||
|
||||
class TaskPanel:
|
||||
def __init__(self):
|
||||
#self.form = FreeCADGui.PySideUic.loadUi(":/panels/ContourEdit.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/ContourEdit.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/panels/ContourEdit.ui")
|
||||
#self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/ContourEdit.ui")
|
||||
self.updating = False
|
||||
|
||||
def accept(self):
|
||||
print "removed"
|
||||
self.getFields()
|
||||
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCADGui.Selection.removeObserver(self.s)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def reject(self):
|
||||
print "removed1"
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCADGui.Selection.removeObserver(self.s)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def getFields(self):
|
||||
if self.obj:
|
||||
|
||||
@@ -226,8 +226,8 @@ tl.ToolNumber = 1
|
||||
|
||||
class TaskPanel:
|
||||
def __init__(self):
|
||||
#self.form = FreeCADGui.PySideUic.loadUi(":/panels/JobEdit.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/JobEdit.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/panels/JobEdit.ui")
|
||||
#self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/JobEdit.ui")
|
||||
path = FreeCAD.getHomePath() + ("Mod/Path/PathScripts/")
|
||||
posts = glob.glob(path + '/*_post.py')
|
||||
allposts = [ str(os.path.split(os.path.splitext(p)[0])[1][:-5]) for p in posts]
|
||||
@@ -259,6 +259,7 @@ class TaskPanel:
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
|
||||
def getFields(self):
|
||||
'''sets properties in the object to match the form'''
|
||||
if self.obj:
|
||||
if hasattr(self.obj, "PostProcessor"):
|
||||
self.obj.PostProcessor = str(self.form.cboPostProcessor.currentText())
|
||||
@@ -283,26 +284,31 @@ class TaskPanel:
|
||||
selObj = Draft.clone(selObj)
|
||||
self.obj.Base = selObj
|
||||
|
||||
|
||||
self.obj.Proxy.execute(self.obj)
|
||||
|
||||
def setFields(self):
|
||||
'''sets fields in the form to match the object'''
|
||||
|
||||
self.form.leLabel.setText(self.obj.Label)
|
||||
self.form.leOutputFile.setText(self.obj.OutputFile)
|
||||
|
||||
index = self.form.cboPostProcessor.findText(
|
||||
postindex = self.form.cboPostProcessor.findText(
|
||||
self.obj.PostProcessor, QtCore.Qt.MatchFixedString)
|
||||
if index >= 0:
|
||||
self.form.cboPostProcessor.setCurrentIndex(index)
|
||||
if postindex >= 0:
|
||||
self.form.cboPostProcessor.blockSignals(True)
|
||||
self.form.cboPostProcessor.setCurrentIndex(postindex)
|
||||
self.form.cboPostProcessor.blockSignals(False)
|
||||
|
||||
for child in self.obj.Group:
|
||||
self.form.PathsList.addItem(child.Name)
|
||||
|
||||
if self.obj.Base is not None:
|
||||
index = self.form.cboBaseObject.findText(self.obj.Base.Name, QtCore.Qt.MatchFixedString)
|
||||
if index >= 0:
|
||||
self.form.cboBaseObject.setCurrentIndex(index)
|
||||
baseindex = self.form.cboBaseObject.findText(self.obj.Base.Name, QtCore.Qt.MatchFixedString)
|
||||
print baseindex
|
||||
if baseindex >= 0:
|
||||
self.form.cboBaseObject.blockSignals(True)
|
||||
self.form.cboBaseObject.setCurrentIndex(baseindex)
|
||||
self.form.cboBaseObject.blockSignals(False)
|
||||
|
||||
|
||||
def open(self):
|
||||
|
||||
@@ -453,8 +453,8 @@ class CommandPathProfileEdges:
|
||||
|
||||
class TaskPanel:
|
||||
def __init__(self):
|
||||
#self.form = FreeCADGui.PySideUic.loadUi(":/panels/ProfileEdgesEdit.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/ProfileEdgesEdit.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/panels/ProfileEdgesEdit.ui")
|
||||
#self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/ProfileEdgesEdit.ui")
|
||||
|
||||
self.updating = False
|
||||
|
||||
|
||||
@@ -287,38 +287,48 @@ class ObjectSurface:
|
||||
output += "(" + obj.Label + ")"
|
||||
output += "(Compensated Tool Path. Diameter: " + str(self.radius * 2) + ")"
|
||||
|
||||
if obj.Base:
|
||||
for b in obj.Base:
|
||||
# if obj.Base:
|
||||
# for b in obj.Base:
|
||||
|
||||
if obj.Algorithm in ['OCL Dropcutter', 'OCL Waterline']:
|
||||
try:
|
||||
import ocl
|
||||
except:
|
||||
FreeCAD.Console.PrintError(translate(
|
||||
"PathSurface", "This operation requires OpenCamLib to be installed.\n"))
|
||||
return
|
||||
parentJob = PathUtils.findParentJob(obj)
|
||||
if parentJob is None:
|
||||
return
|
||||
mesh = parentJob.Base
|
||||
if mesh is None:
|
||||
return
|
||||
print "base object: " + mesh.Name
|
||||
|
||||
mesh = b[0]
|
||||
if mesh.TypeId.startswith('Mesh'):
|
||||
mesh = mesh.Mesh
|
||||
bb = mesh.BoundBox
|
||||
else:
|
||||
bb = mesh.Shape.BoundBox
|
||||
mesh = MeshPart.meshFromShape(mesh.Shape, MaxLength=2)
|
||||
|
||||
s = ocl.STLSurf()
|
||||
for f in mesh.Facets:
|
||||
p = f.Points[0]
|
||||
q = f.Points[1]
|
||||
r = f.Points[2]
|
||||
t = ocl.Triangle(ocl.Point(p[0], p[1], p[2]), ocl.Point(
|
||||
q[0], q[1], q[2]), ocl.Point(r[0], r[1], r[2]))
|
||||
s.addTriangle(t)
|
||||
|
||||
if obj.Algorithm == 'OCL Dropcutter':
|
||||
output = self._dropcutter(obj, s, bb)
|
||||
elif obj.Algorithm == 'OCL Waterline':
|
||||
output = self._waterline(obj, s, bb)
|
||||
if obj.Algorithm in ['OCL Dropcutter', 'OCL Waterline']:
|
||||
try:
|
||||
import ocl
|
||||
except:
|
||||
FreeCAD.Console.PrintError(translate(
|
||||
"PathSurface", "This operation requires OpenCamLib to be installed.\n"))
|
||||
return
|
||||
|
||||
#mesh = b[0]
|
||||
if mesh.TypeId.startswith('Mesh'):
|
||||
mesh = mesh.Mesh
|
||||
bb = mesh.BoundBox
|
||||
else:
|
||||
bb = mesh.Shape.BoundBox
|
||||
mesh = MeshPart.meshFromShape(mesh.Shape, MaxLength=2)
|
||||
|
||||
s = ocl.STLSurf()
|
||||
for f in mesh.Facets:
|
||||
p = f.Points[0]
|
||||
q = f.Points[1]
|
||||
r = f.Points[2]
|
||||
t = ocl.Triangle(ocl.Point(p[0], p[1], p[2]), ocl.Point(
|
||||
q[0], q[1], q[2]), ocl.Point(r[0], r[1], r[2]))
|
||||
s.addTriangle(t)
|
||||
|
||||
if obj.Algorithm == 'OCL Dropcutter':
|
||||
output = self._dropcutter(obj, s, bb)
|
||||
elif obj.Algorithm == 'OCL Waterline':
|
||||
output = self._waterline(obj, s, bb)
|
||||
|
||||
if obj.Active:
|
||||
path = Path.Path(output)
|
||||
|
||||
@@ -248,6 +248,7 @@ class ToolLibraryManager():
|
||||
|
||||
def addnew(self, listname, tool, position = None):
|
||||
"adds a new tool at the end of the table"
|
||||
print listname, tool, position
|
||||
tt = self._findList(listname)
|
||||
if position is None:
|
||||
tt.addTools(tool)
|
||||
@@ -326,7 +327,6 @@ class ToolLibraryManager():
|
||||
pass
|
||||
|
||||
class EditorPanel():
|
||||
|
||||
def __init__(self):
|
||||
#self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/ToolLibraryEditor.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(":/panels/ToolLibraryEditor.ui")
|
||||
@@ -441,14 +441,17 @@ class EditorPanel():
|
||||
|
||||
def delete(self):
|
||||
'''deletes a tool'''
|
||||
item = self.form.ToolsList.selectedIndexes()[1].data()
|
||||
if item:
|
||||
number = int(item)
|
||||
listname = self.form.listView.selectedIndexes()[0].data()
|
||||
if self.TLM.delete(number, listname) is True:
|
||||
self.loadTable(self.form.listView.selectedIndexes()[0])
|
||||
listname = self.form.listView.selectedIndexes()[0].data()
|
||||
model = self.form.ToolsList.model()
|
||||
for i in range(model.rowCount()):
|
||||
item = model.item(i, 0)
|
||||
if item.checkState():
|
||||
t = model.index(i, 1)
|
||||
self.TLM.delete(int(t.data()) ,listname)
|
||||
self.loadTable(self.form.listView.selectedIndexes()[0])
|
||||
|
||||
def editTool(self, currItem):
|
||||
|
||||
row = currItem.row()
|
||||
value = currItem.sibling(row, 1).data()
|
||||
listname = self.form.listView.selectedIndexes()[0].data()
|
||||
|
||||
Reference in New Issue
Block a user