[Draft] Edit: Allow multi object editing

Modified to accept multiple object (max 5). The tool set EditTrackers for every selected object. Then edited object is identified using clicked EditTracker.
This commit is contained in:
carlopav
2019-08-25 18:44:10 +02:00
committed by Yorik van Havre
parent 76bac3099e
commit 0dbd1201f5

View File

@@ -62,12 +62,13 @@ class Edit():
self.originalPoints = None
self.originalNodes = None
# settings
self.maxObjects = 5
self.pick_radius = 30 # TODO: set pick radius according to user preferences
# preview
self.ghost = None
# soraypick action things
self.pick_radius = 30 # TODO: set pick radius according to user preferences
#list of supported Draft and Arch objects
self.supportedObjs = ["BezCurve","Wire","BSpline","Circle","Rectangle",
"Polygon","Dimension","Space","Structure","PanelCut",
@@ -104,14 +105,14 @@ class Edit():
def proceed(self):
"this method defines editpoints and set the editTrackers"
self.unregister_selection_callback()
self.obj = self.getObjFromSelection()
if not self.obj: return self.finish()
self.objs = self.getObjsFromSelection()
if not self.objs: return self.finish()
# Save selectstate and turn selectable false.
# Object can remain selectable commenting following lines,
# but snap only process the first edge of self.obj TODO: fix it
self.saveSelectState(self.obj)
self.setSelectState(self.obj, False)
#self.saveSelectState(self.obj)
#self.setSelectState(self.obj, False)
# start object editing
FreeCADGui.Selection.clearSelection()
@@ -123,11 +124,13 @@ class Edit():
self.arc3Pt = True # TODO: Find a more elegant way
self.ui.editUi()
self.setEditPoints(self.obj)
for obj in self.objs:
self.setEditPoints(obj)
self.register_editing_callbacks()#register action callback
# set plane tracker to match edited object
FreeCAD.DraftWorkingPlane.save()
self.alignWorkingPlane()
#FreeCAD.DraftWorkingPlane.save()
#self.alignWorkingPlane()
def finish(self,closed=False):
@@ -242,12 +245,18 @@ class Edit():
self.addPoint(event)
return
if self.ui.delButton.isChecked():
self.delPoint(self.obj, event)
self.delPoint(event)
return
if Draft.getType(self.obj) == "BezCurve":
if Draft.getType(self.obj) == "BezCurve" and (self.ui.sharpButton.isChecked()
or self.ui.tangentButton.isChecked() or
self.ui.symmetricButton.isChecked()):
pos = event.getPosition()
node = self.getEditNode(pos)
ep = self.getEditNodeIndex(node)
if ep == None: return
doc = FreeCAD.getDocument(str(node.documentName.getValue()))
self.obj = doc.getObject(str(node.objectName.getValue()))
if self.obj == None: return
if self.ui.sharpButton.isChecked():
return self.smoothBezPoint(ep, 'Sharp')
elif self.ui.tangentButton.isChecked():
@@ -274,11 +283,13 @@ class Edit():
node = self.getEditNode(pos)
ep = self.getEditNodeIndex(node)
if ep == None: return
FreeCAD.Console.PrintMessage(str("Editing node: n° ")+str(ep)+"\n")
doc = FreeCAD.getDocument(str(node.documentName.getValue()))
self.obj = doc.getObject(str(node.objectName.getValue()))
if self.obj == None: return
self.setPlacement(self.obj)
FreeCAD.Console.PrintMessage(str(self.obj.Name)+str(": editing node: n° ")+str(ep)+"\n")
self.ui.lineUi()
self.ui.isRelative.show()
@@ -313,23 +324,29 @@ class Edit():
# UTILS
#---------------------------------------------------------------------------
def getObjFromSelection(self):
def getObjsFromSelection(self):
"evaluate selection and returns a valid object to edit"
selection = FreeCADGui.Selection.getSelection()
if len(selection) != 1:
FreeCAD.Console.PrintMessage(translate("draft", "Please select exactly one object")+"\n")
self.objs = []
if len(selection) > self.maxObjects:
FreeCAD.Console.PrintMessage(translate("draft",
"Too many objects selected, max number set to: "+
str(self.maxObjects)+"\n"))
return None
if "Proxy" in selection[0].PropertiesList and hasattr(selection[0].Proxy,"Type"):
if Draft.getType(selection[0]) in self.supportedObjs:
return selection[0]
else:
try:
if Draft.getType(selection[0]) in self.supportedPartObjs and selection[0].TypeId in self.supportedPartObjs:
return selection[0]
except:
pass
FreeCAD.Console.PrintWarning(translate("draft", "This object is not editable")+"\n")
return None
for obj in selection:
if "Proxy" in selection[0].PropertiesList and hasattr(selection[0].Proxy,"Type"):
if Draft.getType(obj) in self.supportedObjs:
self.objs.append(obj)
continue
else:
try:
if Draft.getType(obj) in self.supportedPartObjs and obj.TypeId in self.supportedPartObjs:
self.objs.append(obj)
continue
except:
pass
FreeCAD.Console.PrintWarning(translate("draft", str(obj.Name)+": this object is not editable")+"\n")
return self.objs
def numericInput(self,v,numy=None,numz=None):
'''this function gets called by the toolbar
@@ -414,7 +431,7 @@ class Edit():
"set Edit Trackers for editpoints collected from self.obj"
self.trackers[obj.Name] = []
if Draft.getType(obj) == "BezCurve":
self.resetTrackersBezier()
self.resetTrackersBezier(obj)
else:
if obj.Name in self.trackers:
self.removeTrackers(obj)
@@ -510,7 +527,7 @@ class Edit():
import DraftVecUtils
p1 = self.invpl.multVec(self.obj.Shape.Vertexes[0].Point)
p2 = self.invpl.multVec(self.obj.Shape.Vertexes[1].Point)
p0 = DraftVecUtils.project(self.invpl.multVec(pt),self.invpl.multVec(self.getArcMid()))
p0 = DraftVecUtils.project(self.invpl.multVec(pt),self.invpl.multVec(self.getArcMid(self.obj)))
self.ghost.autoinvert=False
self.ghost.setRadius(p1.sub(p0).Length)
self.ghost.setStartPoint(self.obj.Shape.Vertexes[1].Point)
@@ -519,7 +536,7 @@ class Edit():
return
else:
p1=self.obj.Shape.Vertexes[0].Point
p2=self.getArcMid()
p2=self.getArcMid(self.obj)
p3=self.obj.Shape.Vertexes[1].Point
if self.editing == 1: p1=pt
elif self.editing == 3: p2=pt
@@ -548,14 +565,16 @@ class Edit():
def addPoint(self,event):
"called by action, add point to obj and reset trackers"
if not (Draft.getType(self.obj) in ["Wire","BSpline","BezCurve"]): return
pos = event.getPosition()
self.setSelectState(self.obj, True)
#self.setSelectState(self.obj, True)
selobjs = FreeCADGui.ActiveDocument.ActiveView.getObjectsInfo((pos[0],pos[1]))
if not selobjs: return
for info in selobjs:
if not info: return
if self.obj.Name != info["Object"]: continue
for o in self.objs:
if o.Name != info["Object"]: continue
self.obj = o
break
if Draft.getType(self.obj) == "Wire" and 'Edge' in info["Component"]:
pt = FreeCAD.Vector(info["x"],info["y"],info["z"])
self.addPointToWire(pt, int(info["Component"][4:]))
@@ -569,7 +588,7 @@ class Edit():
self.editpoints = []
self.removeTrackers(self.obj)
self.setEditPoints(self.obj)
self.setSelectState(self.obj, False)
#self.setSelectState(self.obj, False)
return
@@ -636,21 +655,27 @@ class Edit():
pts.append(self.invpl.multVec(point))
self.obj.Points = pts
def delPoint(self,obj,event):
if not (Draft.getType(obj) in ["Wire","BSpline","BezCurve"]): return
if len(obj.Points) <= 2: return FreeCAD.Console.PrintWarning(
translate("draft", "Active object must have more than two points/nodes")+"\n")
def delPoint(self,event):
pos = event.getPosition()
node = self.getEditNode(pos)
ep = self.getEditNodeIndex(node)
if ep == None: return FreeCAD.Console.PrintWarning(
translate("draft", "Node not found\n"))
pts = obj.Points
doc = FreeCAD.getDocument(str(node.documentName.getValue()))
self.obj = doc.getObject(str(node.objectName.getValue()))
if self.obj == None: return
if not (Draft.getType(self.obj) in ["Wire","BSpline","BezCurve"]): return
if len(self.obj.Points) <= 2: return FreeCAD.Console.PrintWarning(
translate("draft", "Active object must have more than two points/nodes")+"\n")
pts = self.obj.Points
pts.pop(ep)
self.obj.Points = pts
if Draft.getType(obj) =="BezCurve":
self.obj.Proxy.resetcontinuity(obj)
obj.recompute()
if Draft.getType(self.obj) =="BezCurve":
self.obj.Proxy.resetcontinuity(self.obj)
self.obj.recompute()
# don't do tan/sym on DWire/BSpline!
self.editpoints = []
@@ -662,7 +687,7 @@ class Edit():
#---------------------------------------------------------------------------
def setEditPoints(self,obj):
"calculate edit point position from given object and append to self.edipoints"
"append given object's editpoints to self.edipoints and set EditTrackers"
self.setPlacement(obj)
@@ -673,38 +698,40 @@ class Edit():
self.setWirePts(obj)
elif objectType == "BezCurve":
self.ui.editUi("BezCurve")
self.setWirePts(obj)
self.resetTrackersBezier(obj)
self.editpoints = []
return
#self.setWirePts(obj)
elif objectType == "Circle":
self.setCirclePts()
self.setCirclePts(obj)
elif objectType == "Rectangle":
self.setRectanglePts()
self.setRectanglePts(obj)
elif objectType == "Polygon":
self.setPolygonPts()
self.setPolygonPts(obj)
elif objectType == "Dimension":
self.setDimensionPts()
self.setDimensionPts(obj)
elif objectType == "Wall":
self.setWallPts(obj)
elif objectType == "Window":
self.setWindowPts()
self.setWindowPts(obj)
elif objectType == "Space":
self.setSpacePts()
self.setSpacePts(obj)
elif objectType == "Structure":
self.setStructurePts()
self.setStructurePts(obj)
elif objectType == "PanelCut":
self.setPanelCutPts()
self.setPanelCutPts(obj)
elif objectType == "PanelSheet":
self.setPanelSheetPts()
self.setPanelSheetPts(obj)
elif objectType == "Part" and obj.TypeId == "Part::Box":
self.setPartBoxPts()
self.setPartBoxPts(obj)
elif objectType == "Part::Line" and obj.TypeId == "Part::Line":
self.setPartLinePts()
self.setPartLinePts(obj)
elif objectType == "Sketch":
self.setSketchPts(obj)
if self.editpoints: # set trackers and align plane
self.setTrackers(obj)
self.editpoints = []
self.register_editing_callbacks()#register action callback
else:
FreeCAD.Console.PrintWarning(translate("draft", "No edit point found for selected object")+"\n")
# do not finish if some trackers are still present
@@ -832,30 +859,30 @@ class Edit():
return pts #returns the list of new points, taking into account knot continuity
def resetTrackersBezier(self):
def resetTrackersBezier(self, obj):
#in future move tracker definition to DraftTrackers
from pivy import coin
knotmarkers = (coin.SoMarkerSet.DIAMOND_FILLED_9_9,#sharp
coin.SoMarkerSet.SQUARE_FILLED_9_9, #tangent
coin.SoMarkerSet.HOURGLASS_FILLED_9_9) #symmetric
polemarker = coin.SoMarkerSet.CIRCLE_FILLED_9_9 #pole
self.trackers[self.obj.Name]=[]
cont=self.obj.Continuity
firstknotcont = cont[-1] if (self.obj.Closed and cont) else 0
pointswithmarkers=[(self.obj.Shape.Edges[0].Curve.\
self.trackers[obj.Name]=[]
cont=obj.Continuity
firstknotcont = cont[-1] if (obj.Closed and cont) else 0
pointswithmarkers=[(obj.Shape.Edges[0].Curve.\
getPole(1),knotmarkers[firstknotcont])]
for edgeindex, edge in enumerate(self.obj.Shape.Edges):
for edgeindex, edge in enumerate(obj.Shape.Edges):
poles=edge.Curve.getPoles()
pointswithmarkers.extend([(point,polemarker) for \
point in poles[1:-1]])
if not self.obj.Closed or len(self.obj.Shape.Edges) > edgeindex +1:
if not obj.Closed or len(obj.Shape.Edges) > edgeindex +1:
knotmarkeri=cont[edgeindex] if len(cont) > edgeindex else 0
pointswithmarkers.append((poles[-1],knotmarkers[knotmarkeri]))
for index,pwm in enumerate(pointswithmarkers):
p,marker=pwm
#if self.pl: p = self.pl.multVec(p)
self.trackers[self.obj.Name].append(editTracker(p,self.obj.Name,\
index,self.obj.ViewObject.LineColor,\
self.trackers[obj.Name].append(editTracker(p,obj.Name,\
index,obj.ViewObject.LineColor,\
marker=marker))
def smoothBezPoint(self, point, style='Symmetric'):
@@ -942,15 +969,15 @@ class Edit():
# EDIT OBJECT TOOLS : Rectangle
#---------------------------------------------------------------------------
def setRectanglePts(self):
self.editpoints.append(self.obj.Placement.Base)
self.editpoints.append(self.obj.Shape.Vertexes[2].Point)
v = self.obj.Shape.Vertexes
def setRectanglePts(self, obj):
self.editpoints.append(obj.Placement.Base)
self.editpoints.append(obj.Shape.Vertexes[2].Point)
v = obj.Shape.Vertexes
self.bx = v[1].Point.sub(v[0].Point)
if self.obj.Length < 0:
if obj.Length < 0:
self.bx = self.bx.negative()
self.by = v[2].Point.sub(v[1].Point)
if self.obj.Height < 0:
if obj.Height < 0:
self.by = self.by.negative()
def updateRectangle(self,v):
@@ -991,16 +1018,16 @@ class Edit():
# EDIT OBJECT TOOLS : Circle/Arc
#---------------------------------------------------------------------------
def setCirclePts(self):
self.editpoints.append(self.obj.Placement.Base)
if self.obj.FirstAngle == self.obj.LastAngle:#self.obj is a circle
def setCirclePts(self, obj):
self.editpoints.append(obj.Placement.Base)
if obj.FirstAngle == obj.LastAngle:#self.obj is a circle
self.ui.editUi("Circle")
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)
self.editpoints.append(obj.Shape.Vertexes[0].Point)
else:#self.obj is an arc
self.ui.editUi("Arc")
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)#First endpoint
self.editpoints.append(self.obj.Shape.Vertexes[1].Point)#Second endpoint
self.editpoints.append(self.getArcMid())#Midpoint
self.editpoints.append(obj.Shape.Vertexes[0].Point)#First endpoint
self.editpoints.append(obj.Shape.Vertexes[1].Point)#Second endpoint
self.editpoints.append(self.getArcMid(obj))#Midpoint
return
def updateCirclePts(self,ep1=1,ep2=1,ep3=1,ep4=1):
@@ -1012,7 +1039,7 @@ class Edit():
if ep3 == 1:
self.trackers[self.obj.Name][2].set(self.obj.Shape.Vertexes[1].Point)
if ep4 == 1:
self.trackers[self.obj.Name][3].set(self.getArcMid())
self.trackers[self.obj.Name][3].set(self.getArcMid(self.obj))
def updateCircle(self,v):
delta = self.invpl.multVec(v)
@@ -1058,7 +1085,7 @@ class Edit():
import DraftVecUtils
p1 = self.invpl.multVec(self.obj.Shape.Vertexes[0].Point)
p2 = self.invpl.multVec(self.obj.Shape.Vertexes[1].Point)
p0 = DraftVecUtils.project(delta,self.invpl.multVec(self.getArcMid()))
p0 = DraftVecUtils.project(delta,self.invpl.multVec(self.getArcMid(self.obj)))
self.obj.Radius = p1.sub(p0).Length
self.obj.FirstAngle = -math.degrees(DraftVecUtils.angle(p1.sub(p0)))
self.obj.LastAngle = -math.degrees(DraftVecUtils.angle(p2.sub(p0)))
@@ -1069,7 +1096,7 @@ class Edit():
else:
if self.editing == 1:#first point
p1=v
p2=self.getArcMid()
p2=self.getArcMid(self.obj)
p3=self.obj.Shape.Vertexes[1].Point
elif self.editing == 3:#midpoint
p1=self.obj.Shape.Vertexes[0].Point
@@ -1077,7 +1104,7 @@ class Edit():
p3=self.obj.Shape.Vertexes[1].Point
elif self.editing == 2:#second point
p1=self.obj.Shape.Vertexes[0].Point
p2=self.getArcMid()
p2=self.getArcMid(self.obj)
p3=v
arc=Part.ArcOfCircle(p1,p2,p3)
e = arc.toShape()
@@ -1090,17 +1117,17 @@ class Edit():
dangleL = math.degrees(math.atan2(delta[1],delta[0]))
self.obj.FirstAngle = dangleF
self.obj.LastAngle = dangleL
FreeCAD.Console.PrintMessage("Press I to invert the circle")
FreeCAD.Console.PrintMessage("Press I to invert the circle\n")
self.updateCirclePts()
def getArcMid(self):#Returns object midpoint
if Draft.getType(self.obj) == "Circle":
if self.obj.LastAngle>self.obj.FirstAngle:
midAngle=math.radians(self.obj.FirstAngle+(self.obj.LastAngle-self.obj.FirstAngle)/2)
def getArcMid(self, obj):#Returns object midpoint
if Draft.getType(obj) == "Circle":
if obj.LastAngle>obj.FirstAngle:
midAngle=math.radians(obj.FirstAngle+(obj.LastAngle-obj.FirstAngle)/2)
else:
midAngle=math.radians(self.obj.FirstAngle+(self.obj.LastAngle-self.obj.FirstAngle)/2)+math.pi
midRadX=self.obj.Radius*math.cos(midAngle)
midRadY=self.obj.Radius*math.sin(midAngle)
midAngle=math.radians(obj.FirstAngle+(obj.LastAngle-obj.FirstAngle)/2)+math.pi
midRadX=obj.Radius*math.cos(midAngle)
midRadY=obj.Radius*math.sin(midAngle)
deltaMid=FreeCAD.Vector(midRadX,midRadY,0.0)
midPoint=self.pl.multVec(deltaMid) # check this line
return(midPoint)
@@ -1110,15 +1137,15 @@ class Edit():
self.obj.recompute()
self.trackers[self.obj.Name][1].set(self.obj.Shape.Vertexes[0].Point)
self.trackers[self.obj.Name][2].set(self.obj.Shape.Vertexes[1].Point)
self.trackers[self.obj.Name][3].set(self.getArcMid())
self.trackers[self.obj.Name][3].set(self.getArcMid(self.obj))
#---------------------------------------------------------------------------
# EDIT OBJECT TOOLS : Polygon (maybe could also rotate the polygon)
#---------------------------------------------------------------------------
def setPolygonPts(self):
self.editpoints.append(self.obj.Placement.Base)
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)
def setPolygonPts(self, obj):
self.editpoints.append(obj.Placement.Base)
self.editpoints.append(obj.Shape.Vertexes[0].Point)
def updatePolygon(self,v):
delta = v.sub(self.obj.Placement.Base)
@@ -1141,11 +1168,11 @@ class Edit():
# EDIT OBJECT TOOLS : Dimension (point on dimension line is not clickable)
#---------------------------------------------------------------------------
def setDimensionPts(self):
p = self.obj.ViewObject.Proxy.textpos.translation.getValue()
self.editpoints.append(self.obj.Start)
self.editpoints.append(self.obj.End)
self.editpoints.append(self.obj.Dimline)
def setDimensionPts(self, obj):
p = obj.ViewObject.Proxy.textpos.translation.getValue()
self.editpoints.append(obj.Start)
self.editpoints.append(obj.End)
self.editpoints.append(obj.Dimline)
self.editpoints.append(Vector(p[0],p[1],p[2]))
def updateDimension(self,v):
@@ -1188,7 +1215,7 @@ class Edit():
if Draft.getType(obj.Base) in ["Wire","Circle","Rectangle",
"Polygon", "Sketch"]:
self.setEditPoints(obj.Base)
pl=self.obj.Base.Placement.multiply(self.obj.Placement)
pl=obj.Base.Placement.multiply(obj.Placement)
self.editpoints.append(pl.multVec(FreeCAD.Vector(0,0,obj.Height)))
def updateWall(self,v):
@@ -1207,15 +1234,15 @@ class Edit():
#WINDOW---------------------------------------------------------------------
def setWindowPts(self):
def setWindowPts(self, obj):
import DraftGeomUtils
pos=self.obj.Base.Placement.Base
h=float(self.obj.Height)+pos.z
normal=self.obj.Normal
pos=obj.Base.Placement.Base
h=float(obj.Height)+pos.z
normal=obj.Normal
angle=normal.getAngle(FreeCAD.Vector(1,0,0))
self.editpoints.append(pos)
self.editpoints.append(FreeCAD.Vector(pos.x+float(self.obj.Width)*math.cos(angle-math.pi/2),
pos.y+float(self.obj.Width)*math.sin(angle-math.pi/2),
self.editpoints.append(FreeCAD.Vector(pos.x+float(obj.Width)*math.cos(angle-math.pi/2),
pos.y+float(obj.Width)*math.sin(angle-math.pi/2),
pos.z))
self.editpoints.append(FreeCAD.Vector(pos.x,pos.y,h))
@@ -1236,15 +1263,15 @@ class Edit():
#STRUCTURE-------------------------------------------------------------------
def setStructurePts(self):
if self.obj.Nodes:
self.originalDisplayMode = self.obj.ViewObject.DisplayMode
self.originalPoints = self.obj.ViewObject.NodeSize
self.originalNodes = self.obj.ViewObject.ShowNodes
def setStructurePts(self, obj):
if obj.Nodes:
self.originalDisplayMode = obj.ViewObject.DisplayMode
self.originalPoints = obj.ViewObject.NodeSize
self.originalNodes = obj.ViewObject.ShowNodes
self.obj.ViewObject.DisplayMode = "Wireframe"
self.obj.ViewObject.NodeSize = 1
self.obj.ViewObject.ShowNodes = True
for p in self.obj.Nodes:
# self.obj.ViewObject.ShowNodes = True
for p in obj.Nodes:
if self.pl:
p = self.pl.multVec(p)
self.editpoints.append(p)
@@ -1257,9 +1284,9 @@ class Edit():
#SPACE----------------------------------------------------------------------
def setSpacePts(self):
def setSpacePts(self, obj):
try:
self.editpoints.append(self.obj.ViewObject.Proxy.getTextPosition(self.obj.ViewObject))
self.editpoints.append(obj.ViewObject.Proxy.getTextPosition(obj.ViewObject))
except:
pass
@@ -1269,20 +1296,20 @@ class Edit():
#PANELS---------------------------------------------------------------------
def setPanelCutPts(self):
def setPanelCutPts(self, obj):
if self.obj.TagPosition.Length == 0:
pos = self.obj.Shape.BoundBox.Center
pos = obj.Shape.BoundBox.Center
else:
pos = self.pl.multVec(self.obj.TagPosition)
pos = self.pl.multVec(obj.TagPosition)
self.editpoints.append(pos)
def updatePanelCut(self,v):
if self.editing == 0:
self.obj.TagPosition = self.invpl.multVec(v)
def setPanelSheetPts(self):
self.editpoints.append(self.pl.multVec(self.obj.TagPosition))
for o in self.obj.Group:
def setPanelSheetPts(self, obj):
self.editpoints.append(self.pl.multVec(obj.TagPosition))
for o in obj.Group:
self.editpoints.append(self.pl.multVec(o.Placement.Base))
def updatePanelSheet(self,v):
@@ -1293,9 +1320,9 @@ class Edit():
# PART::LINE----------------------------------------------------------------
def setPartLinePts(self):
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(self.obj.X1,self.obj.Y1,self.obj.Z1)))
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(self.obj.X2,self.obj.Y2,self.obj.Z2)))
def setPartLinePts(self, obj):
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(obj.X1,obj.Y1,obj.Z1)))
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(obj.X2,obj.Y2,obj.Z2)))
def updatePartLine(self,v):
pt=self.invpl.multVec(v)
@@ -1310,11 +1337,11 @@ class Edit():
# PART::BOX-----------------------------------------------------------------
def setPartBoxPts(self):
self.editpoints.append(self.obj.Placement.Base)
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(self.obj.Length,0,0)))
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(0,self.obj.Width,0)))
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(0,0,self.obj.Height)))
def setPartBoxPts(self, obj):
self.editpoints.append(obj.Placement.Base)
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(obj.Length,0,0)))
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(0,obj.Width,0)))
self.editpoints.append(self.pl.multVec(FreeCAD.Vector(0,0,obj.Height)))
def updatePartBox(self,v):
import DraftVecUtils