Added extracting the wire of an extension
This commit is contained in:
@@ -61,6 +61,40 @@ class Extension(object):
|
||||
self.length = length
|
||||
self.direction = direction
|
||||
|
||||
def extendEdge(self, e0, direction):
|
||||
e2 = e0.copy()
|
||||
off = self.length.Value * direction
|
||||
e2.translate(off)
|
||||
print("extendEdge(%.2f, %.2f, %.2f)" % (off.x, off.y, off.z))
|
||||
e2 = PathGeom.flipEdge(e2)
|
||||
e1 = Part.Edge(Part.LineSegment(e0.valueAt(e0.LastParameter), e2.valueAt(e2.FirstParameter)))
|
||||
e3 = Part.Edge(Part.LineSegment(e2.valueAt(e2.LastParameter), e0.valueAt(e0.FirstParameter)))
|
||||
wire = Part.Wire([e0, e1, e2, e3])
|
||||
self.wire = wire
|
||||
return wire
|
||||
|
||||
def getWire(self):
|
||||
if PathGeom.isRoughly(0, self.length.Value):
|
||||
return None
|
||||
|
||||
feature = self.obj.Shape.getElement(self.sub)
|
||||
if Part.Edge == type(feature):
|
||||
e0 = feature
|
||||
print("getEdgeCorners(%s)" % self.sub)
|
||||
midparam = e0.FirstParameter + 0.5 * (e0.LastParameter - e0.FirstParameter)
|
||||
tangent = e0.tangentAt(midparam)
|
||||
normal = tangent.cross(FreeCAD.Vector(0, 0, 1)).normalize()
|
||||
poffPlus = e0.valueAt(midparam) + 0.01 * normal
|
||||
poffMinus = e0.valueAt(midparam) - 0.01 * normal
|
||||
if not self.obj.Shape.isInside(poffPlus, 0.005, True):
|
||||
print('poffPlus')
|
||||
return self.extendEdge(e0, normal)
|
||||
if not self.obj.Shape.isInside(poffMinus, 0.005, True):
|
||||
print('poffMinus')
|
||||
return self.extendEdge(e0, normal.negative())
|
||||
else:
|
||||
print("getCorners(%s)" % self.sub)
|
||||
|
||||
|
||||
class ObjectPocket(PathPocketBase.ObjectPocket):
|
||||
'''Proxy object for Pocket operation.'''
|
||||
@@ -188,13 +222,15 @@ class ObjectPocket(PathPocketBase.ObjectPocket):
|
||||
obj.OpStartDepth = bb.ZMax
|
||||
obj.ExtensionLengthDefault = obj.OpToolDiameter / 2
|
||||
|
||||
def createExtension(self, obj, extObj, extSub):
|
||||
return Extension(extObj, extSub, obj.ExtensionLengthDefault, Extension.DirectionNormal)
|
||||
|
||||
def getExtensions(self, obj):
|
||||
extensions = []
|
||||
i = 0
|
||||
for extObj,features in obj.ExtensionFeature:
|
||||
for extSub in features:
|
||||
ext = Extension(extObj, extSub, obj.ExtensionLengthDefault, Extension.DirectionNormal)
|
||||
extensions.append(ext)
|
||||
extensions.append(self.createExtension(obj, extObj, extSub))
|
||||
i = i + 1
|
||||
return extensions
|
||||
|
||||
@@ -205,7 +241,6 @@ class ObjectPocket(PathPocketBase.ObjectPocket):
|
||||
subs.append(ext.sub)
|
||||
features[ext.obj] = subs
|
||||
PathLog.track('setExtension', obj.Label)
|
||||
#obj.ExtensionFeature = [(obj, sub) for obj, sub in PathUtil.keyValueIter(features)]
|
||||
obj.ExtensionFeature = [(ext.obj, ext.sub) for ext in extensions]
|
||||
|
||||
def SetupProperties():
|
||||
|
||||
@@ -49,6 +49,8 @@ else:
|
||||
PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule())
|
||||
|
||||
|
||||
Wires = []
|
||||
|
||||
class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
|
||||
DataObject = QtCore.Qt.ItemDataRole.UserRole
|
||||
Direction = {
|
||||
@@ -116,13 +118,12 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
|
||||
self.form.extensions.blockSignals(False)
|
||||
|
||||
def updateSelection(self, obj, sel):
|
||||
PathLog.track(sel)
|
||||
if sel and sel[0].SubElementNames:
|
||||
self.form.buttonAdd.setEnabled(True)
|
||||
else:
|
||||
self.form.buttonAdd.setEnabled(False)
|
||||
|
||||
def currentItemChanged(self, now, prev):
|
||||
def itemSelectionChanged(self):
|
||||
if 0 == self.form.extensions.rowCount():
|
||||
self.form.buttonClear.setEnabled(False)
|
||||
self.form.buttonRemove.setEnabled(False)
|
||||
@@ -137,8 +138,7 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
|
||||
for sel in FreeCADGui.Selection.getSelectionEx():
|
||||
for subname in sel.SubElementNames:
|
||||
row = self.form.extensions.rowCount()
|
||||
ext = PathPocketShape.Extension(sel.Object, subname, 0.0, 0)
|
||||
self.extensions.append(ext)
|
||||
self.extensions.append(self.obj.Proxy.createExtension(self.obj, sel.Object, subname))
|
||||
self.setFields(self.obj)
|
||||
self.setDirty()
|
||||
|
||||
@@ -147,16 +147,27 @@ class TaskPanelExtensionPage(PathOpGui.TaskPanelPage):
|
||||
self.form.extensions.setRowCount(0)
|
||||
|
||||
def extensionsRemove(self):
|
||||
pass
|
||||
global Wires
|
||||
Wires = []
|
||||
processed = []
|
||||
for item in self.form.extensions.selectedItems():
|
||||
ext = item.data(self.DataObject)
|
||||
if not ext in processed:
|
||||
Wires.append(ext)
|
||||
wire = ext.getWire()
|
||||
if wire:
|
||||
import Part
|
||||
Part.show(wire)
|
||||
processed.append(ext)
|
||||
|
||||
def pageRegisterSignalHandlers(self):
|
||||
self.form.extensions.currentItemChanged.connect(self.currentItemChanged)
|
||||
self.form.extensions.itemSelectionChanged.connect(self.itemSelectionChanged)
|
||||
self.form.buttonAdd.clicked.connect(self.extensionsAdd)
|
||||
self.form.buttonClear.clicked.connect(self.extensionsClear)
|
||||
self.form.buttonRemove.clicked.connect(self.extensionsRemove)
|
||||
|
||||
self.updateSelection(self.obj, FreeCADGui.Selection.getSelectionEx())
|
||||
self.currentItemChanged(-1, -1)
|
||||
self.itemSelectionChanged()
|
||||
|
||||
class TaskPanelOpPage(PathPocketBaseGui.TaskPanelOpPage):
|
||||
'''Page controller class for Pocket operation'''
|
||||
|
||||
Reference in New Issue
Block a user