Update DraftTools.py
Update draf edit to: - improve arc editing - insert Undo marks - insert initial window editing support
This commit is contained in:
@@ -3334,7 +3334,6 @@ class Downgrade(Modifier):
|
||||
'FreeCAD.ActiveDocument.recompute()'])
|
||||
self.finish()
|
||||
|
||||
|
||||
class Trimex(Modifier):
|
||||
''' The Draft_Trimex FreeCAD command definition.
|
||||
This tool trims or extends lines, wires and arcs,
|
||||
@@ -4026,33 +4025,28 @@ class Edit(Modifier):
|
||||
def Activated(self):
|
||||
if self.running:
|
||||
self.finish()
|
||||
else:
|
||||
Modifier.Activated(self,"Edit")
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
self.selection = FreeCADGui.Selection.getSelection()
|
||||
if len(self.selection) == 1:
|
||||
if "Proxy" in self.selection[0].PropertiesList:
|
||||
if hasattr(self.selection[0].Proxy,"Type"):
|
||||
if not Draft.getType(self.selection[0]) in ["BezCurve","Wire","BSpline","Circle","Rectangle",
|
||||
"Polygon","Dimension","Space","Structure","PanelCut",
|
||||
"PanelSheet","Wall"]:
|
||||
msg(translate("draft", "This object type is not editable")+"\n",'warning')
|
||||
self.finish()
|
||||
return
|
||||
|
||||
Modifier.Activated(self,"Edit")
|
||||
|
||||
if FreeCADGui.Selection.getSelection():
|
||||
self.selection = FreeCADGui.Selection.getSelection()
|
||||
if len(self.selection) == 1:
|
||||
if "Proxy" in self.selection[0].PropertiesList:
|
||||
if hasattr(self.selection[0].Proxy,"Type"):
|
||||
if Draft.getType(self.selection[0]) in ["BezCurve","Wire","BSpline","Circle","Rectangle",
|
||||
"Polygon","Dimension","Space","Structure","PanelCut",
|
||||
"PanelSheet","Wall", "Window"]:
|
||||
self.proceed()
|
||||
return
|
||||
else:
|
||||
msg(translate("draft", "This object type is not editable")+"\n",'warning')
|
||||
self.finish()
|
||||
return
|
||||
else:
|
||||
msg(translate("draft", "This object type is not editable")+"\n",'warning')
|
||||
self.finish()
|
||||
return
|
||||
else:
|
||||
msg(translate("draft", "Please select only one object")+"\n",'warning')
|
||||
self.finish()
|
||||
return
|
||||
#ELSE:
|
||||
msg(translate("draft", "This object type is not editable")+"\n",'warning')
|
||||
self.finish()
|
||||
return
|
||||
else:
|
||||
msg(translate("draft", "Please select only one object")+"\n",'warning')
|
||||
self.finish()
|
||||
return
|
||||
else:
|
||||
self.ghost = None
|
||||
self.ui.selectUi()
|
||||
msg(translate("draft", "Select a Draft object to edit")+"\n")
|
||||
@@ -4068,38 +4062,45 @@ class Edit(Modifier):
|
||||
self.obj = FreeCADGui.Selection.getSelection()
|
||||
if self.obj:
|
||||
self.obj = self.obj[0]
|
||||
# we could skip next passage putting an "else" at the end of the proceed function
|
||||
|
||||
if not Draft.getType(self.obj) in ["BezCurve","Wire","BSpline","Circle","Rectangle",
|
||||
"Polygon","Dimension","Space","Structure","PanelCut",
|
||||
"PanelSheet","Wall"]:
|
||||
"PanelSheet","Wall", "Window"]:
|
||||
msg(translate("draft", "This object type is not editable")+"\n",'warning')
|
||||
self.finish()
|
||||
return
|
||||
|
||||
# store selectable state of the object
|
||||
if hasattr(self.obj.ViewObject,"Selectable"):
|
||||
self.selectstate = self.obj.ViewObject.Selectable
|
||||
self.obj.ViewObject.Selectable = False
|
||||
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
self.editing = None
|
||||
self.editpoints = []
|
||||
self.pl = None
|
||||
self.arc3Pt = False
|
||||
FreeCADGui.Snapper.setSelectMode(True)
|
||||
|
||||
# Edit Gui setup is moved inside each kind of object
|
||||
|
||||
# overwrite self.obj to match the right editing target
|
||||
if Draft.getType(self.obj) == "Wall":
|
||||
if Draft.getType(self.obj.Base) in ["Wire","Circle","Rectangle",
|
||||
"Polygon"]:
|
||||
self.obj=self.obj.Base
|
||||
|
||||
if "Placement" in self.obj.PropertiesList:
|
||||
self.pl = self.obj.Placement
|
||||
self.invpl = self.pl.inverse()
|
||||
# setup of different object type (set editUi, set editTrackers)
|
||||
|
||||
if Draft.getType(self.obj) in ["Wire","BSpline"]:
|
||||
self.ui.editUi("Wire")
|
||||
for p in self.obj.Points:
|
||||
if self.pl: p = self.pl.multVec(p)
|
||||
self.editpoints.append(p)
|
||||
|
||||
elif Draft.getType(self.obj) == "BezCurve":
|
||||
self.ui.editUi("BezCurve")
|
||||
self.resetTrackersBezier()
|
||||
@@ -4110,16 +4111,10 @@ class Edit(Modifier):
|
||||
plane.alignToFace(self.obj.Shape)
|
||||
if self.planetrack:
|
||||
self.planetrack.set(self.editpoints[0])
|
||||
|
||||
elif Draft.getType(self.obj) == "Circle":
|
||||
self.editpoints.append(self.obj.Placement.Base)
|
||||
if self.obj.FirstAngle == self.obj.LastAngle:#self.obj is a circle
|
||||
self.ui.editUi("Circle")
|
||||
self.editpoints.append(self.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.setCirclePts()
|
||||
|
||||
elif Draft.getType(self.obj) == "Rectangle":
|
||||
self.ui.editUi()
|
||||
self.editpoints.append(self.obj.Placement.Base)
|
||||
@@ -4131,10 +4126,12 @@ class Edit(Modifier):
|
||||
self.by = v[2].Point.sub(v[1].Point)
|
||||
if self.obj.Height < 0:
|
||||
self.by = self.by.negative()
|
||||
|
||||
elif Draft.getType(self.obj) == "Polygon":
|
||||
self.ui.editUi()
|
||||
self.editpoints.append(self.obj.Placement.Base)
|
||||
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)
|
||||
|
||||
elif Draft.getType(self.obj) == "Dimension":
|
||||
self.ui.editUi()
|
||||
p = self.obj.ViewObject.Proxy.textpos.translation.getValue()
|
||||
@@ -4142,12 +4139,37 @@ class Edit(Modifier):
|
||||
self.editpoints.append(self.obj.End)
|
||||
self.editpoints.append(self.obj.Dimline)
|
||||
self.editpoints.append(Vector(p[0],p[1],p[2]))
|
||||
|
||||
elif Draft.getType(self.obj) == "Wall":
|
||||
self.ui.editUi()
|
||||
if Draft.getType(self.obj.Base) == "Sketch":
|
||||
if self.obj.Base.GeometryCount == 1:
|
||||
self.editpoints.append(self.obj.Base.getPoint(0,1))
|
||||
self.editpoints.append(self.obj.Base.getPoint(0,2))
|
||||
else:
|
||||
msg(translate("draft","Wall base sketch is too complex to edit: it's suggested to edit directly the sketch")+"\n",'warning')
|
||||
|
||||
elif Draft.getType(self.obj) == "Window":
|
||||
msg("Window was found \n")
|
||||
self.ui.editUi()
|
||||
import DraftGeomUtils
|
||||
pos=self.obj.Base.Placement.Base
|
||||
h=float(self.obj.Height)+pos.z
|
||||
normal=self.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),
|
||||
pos.z))
|
||||
self.editpoints.append(FreeCAD.Vector(pos.x,pos.y,h))
|
||||
|
||||
elif Draft.getType(self.obj) == "Space":
|
||||
self.ui.editUi()
|
||||
try:
|
||||
self.editpoints.append(self.obj.ViewObject.Proxy.getTextPosition(self.obj.ViewObject))
|
||||
except:
|
||||
pass
|
||||
|
||||
elif Draft.getType(self.obj) == "Structure":
|
||||
self.ui.editUi()
|
||||
if self.obj.Nodes:
|
||||
@@ -4161,6 +4183,7 @@ class Edit(Modifier):
|
||||
if self.pl:
|
||||
p = self.pl.multVec(p)
|
||||
self.editpoints.append(p)
|
||||
|
||||
elif Draft.getType(self.obj) == "PanelCut":
|
||||
self.ui.editUi()
|
||||
if self.obj.TagPosition.Length == 0:
|
||||
@@ -4168,19 +4191,13 @@ class Edit(Modifier):
|
||||
else:
|
||||
pos = self.pl.multVec(self.obj.TagPosition)
|
||||
self.editpoints.append(pos)
|
||||
|
||||
elif Draft.getType(self.obj) == "PanelSheet":
|
||||
self.ui.editUi()
|
||||
self.editpoints.append(self.pl.multVec(self.obj.TagPosition))
|
||||
for o in self.obj.Group:
|
||||
self.editpoints.append(self.pl.multVec(o.Placement.Base))
|
||||
elif Draft.getType(self.obj) == "Wall":
|
||||
self.ui.editUi()
|
||||
if Draft.getType(self.obj.Base) == "Sketch":
|
||||
if self.obj.Base.GeometryCount == 1:
|
||||
self.editpoints.append(self.obj.Base.getPoint(0,1))
|
||||
self.editpoints.append(self.obj.Base.getPoint(0,2))
|
||||
else:
|
||||
msg("Wall base sketch is too complex to edit: it's suggested to edit directly the sketch")
|
||||
|
||||
if Draft.getType(self.obj) != "BezCurve":
|
||||
self.trackers = []
|
||||
if self.editpoints:
|
||||
@@ -4197,6 +4214,7 @@ class Edit(Modifier):
|
||||
else:
|
||||
msg(translate("draft", "This object type is not editable")+"\n",'warning')
|
||||
self.finish()
|
||||
|
||||
else:
|
||||
self.finish()
|
||||
|
||||
@@ -4235,6 +4253,7 @@ class Edit(Modifier):
|
||||
|
||||
def action(self,arg):
|
||||
"scene event handler"
|
||||
|
||||
if arg["Type"] == "SoKeyboardEvent":
|
||||
if arg["Key"] == "ESCAPE":
|
||||
self.finish()
|
||||
@@ -4245,6 +4264,7 @@ class Edit(Modifier):
|
||||
elif arg["Key"] == "i":
|
||||
if (arg["State"] == "DOWN") and Draft.getType(self.obj) == "Circle":
|
||||
self.arcInvert()
|
||||
|
||||
elif arg["Type"] == "SoLocation2Event": #mouse movement detection
|
||||
self.point,ctrlPoint,info = getPoint(self,arg)
|
||||
if self.editing != None:
|
||||
@@ -4258,13 +4278,31 @@ class Edit(Modifier):
|
||||
else:
|
||||
self.obj.ViewObject.Selectable = False
|
||||
redraw3DView()
|
||||
|
||||
elif arg["Type"] == "SoMouseButtonEvent":
|
||||
|
||||
if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
|
||||
self.ui.redraw()
|
||||
|
||||
if self.editing == None:
|
||||
p = FreeCADGui.ActiveDocument.ActiveView.getCursorPos()
|
||||
info = FreeCADGui.ActiveDocument.ActiveView.getObjectInfo(p)
|
||||
info = FreeCADGui.ActiveDocument.ActiveView.getObjectInfo(p)
|
||||
msg(info)
|
||||
msg("\n")
|
||||
selObjs = FreeCADGui.ActiveDocument.ActiveView.getObjectsInfo(p)
|
||||
msg(selObjs)
|
||||
if info:
|
||||
# for selObj in selObjs:
|
||||
# msg(print(selObj))
|
||||
# if 'EditNode' in selObj["Component"]:
|
||||
# info = selObj
|
||||
# #msg("edit node")
|
||||
# #msg(info)
|
||||
# break
|
||||
# else:
|
||||
# info=selObjs[0]
|
||||
# #msg("/n oggetto")
|
||||
# #msg(info)
|
||||
if info["Object"] != self.obj.Name:
|
||||
return
|
||||
if self.ui.addButton.isChecked() \
|
||||
@@ -4315,6 +4353,7 @@ class Edit(Modifier):
|
||||
self.numericInput(self.trackers[self.editing].get())
|
||||
|
||||
def update(self,v):
|
||||
self.doc.openTransaction("Edit")
|
||||
if Draft.getType(self.obj) in ["Wire","BSpline","BezCurve"]:
|
||||
pts = self.obj.Points
|
||||
editPnt = self.invpl.multVec(v)
|
||||
@@ -4377,82 +4416,9 @@ class Edit(Modifier):
|
||||
pts[self.editing] = editPnt
|
||||
self.obj.Points = pts
|
||||
self.trackers[self.editing].set(v)
|
||||
|
||||
elif Draft.getType(self.obj) == "Circle":
|
||||
delta = v.sub(self.obj.Placement.Base)
|
||||
if self.obj.FirstAngle == self.obj.LastAngle:# object is a circle
|
||||
if self.editing == 0:
|
||||
p = self.obj.Placement
|
||||
p.move(delta)
|
||||
self.obj.Placement = p
|
||||
self.trackers[0].set(self.obj.Placement.Base)
|
||||
if self.editing == 1:
|
||||
self.obj.Radius = delta.Length
|
||||
self.obj.recompute()
|
||||
self.trackers[1].set(self.obj.Shape.Vertexes[0].Point)
|
||||
else:#self.obj is an arc
|
||||
if self.arc3Pt == True:#edit by center radius FirstAngle LastAngle
|
||||
deltaX = v[0]-self.obj.Placement.Base[0]
|
||||
deltaY = v[1]-self.obj.Placement.Base[1]
|
||||
dangle = math.degrees(math.atan2(deltaY,deltaX))
|
||||
if self.editing == 0:
|
||||
p = self.obj.Placement
|
||||
p.move(delta)
|
||||
self.obj.Placement = p
|
||||
self.trackers[0].set(self.obj.Placement.Base)
|
||||
self.trackers[2].set(self.obj.Shape.Vertexes[1].Point)
|
||||
self.trackers[3].set(self.getArcMid())
|
||||
elif self.editing == 1:
|
||||
self.obj.FirstAngle=dangle
|
||||
self.obj.recompute()
|
||||
self.trackers[2].set(self.obj.Shape.Vertexes[1].Point)
|
||||
self.trackers[3].set(self.getArcMid())
|
||||
elif self.editing == 2:
|
||||
self.obj.LastAngle=dangle
|
||||
self.obj.recompute()
|
||||
self.trackers[2].set(self.obj.Shape.Vertexes[1].Point)
|
||||
self.trackers[3].set(self.getArcMid())
|
||||
elif self.editing == 3:
|
||||
self.obj.Radius = delta.Length
|
||||
self.obj.recompute()
|
||||
self.trackers[2].set(self.obj.Shape.Vertexes[1].Point)
|
||||
self.trackers[3].set(self.getArcMid())
|
||||
self.trackers[1].set(self.obj.Shape.Vertexes[0].Point)
|
||||
elif self.arc3Pt == False:
|
||||
if self.editing == 0:#keep everithing as it is for the moment
|
||||
p1=self.obj.Shape.Vertexes[0].Point
|
||||
p2=self.getArcMid()
|
||||
p3=self.obj.Shape.Vertexes[1].Point
|
||||
arc=Part.ArcOfCircle(p1,p2,p3)#object is a support, do i have to delete it someway after?
|
||||
if self.editing == 1:
|
||||
p1=v
|
||||
p2=self.getArcMid()
|
||||
p3=self.obj.Shape.Vertexes[1].Point
|
||||
arc=Part.ArcOfCircle(p1,p2,p3)#object is a support, do i have to delete it someway after?
|
||||
elif self.editing == 3:
|
||||
p1=self.obj.Shape.Vertexes[0].Point
|
||||
p2=v
|
||||
p3=self.obj.Shape.Vertexes[1].Point
|
||||
arc=Part.ArcOfCircle(p1,p2,p3)#object is a support, do i have to delete it someway after?
|
||||
elif self.editing == 2:
|
||||
p1=self.obj.Shape.Vertexes[0].Point
|
||||
p2=self.getArcMid()
|
||||
p3=v
|
||||
arc=Part.ArcOfCircle(p1,p2,p3)#object is a support, do i have to delete it someway after?
|
||||
self.obj.Placement.Base=arc.Center
|
||||
self.obj.Radius = arc.Radius
|
||||
deltaX = p1[0]-self.obj.Placement.Base[0]
|
||||
deltaY = p1[1]-self.obj.Placement.Base[1]
|
||||
dangleF = math.degrees(math.atan2(deltaY,deltaX))
|
||||
deltaX = p3[0]-self.obj.Placement.Base[0]
|
||||
deltaY = p3[1]-self.obj.Placement.Base[1]
|
||||
dangleL = math.degrees(math.atan2(deltaY,deltaX))
|
||||
self.obj.FirstAngle = dangleF
|
||||
self.obj.LastAngle = dangleL
|
||||
self.obj.recompute()
|
||||
self.trackers[0].set(self.obj.Placement.Base)
|
||||
self.trackers[1].set(self.obj.Shape.Vertexes[0].Point)
|
||||
self.trackers[2].set(self.obj.Shape.Vertexes[1].Point)
|
||||
self.trackers[3].set(self.getArcMid())
|
||||
self.updateCircle(v)
|
||||
|
||||
elif Draft.getType(self.obj) == "Rectangle":
|
||||
delta = v.sub(self.obj.Placement.Base)
|
||||
@@ -4476,6 +4442,7 @@ class Edit(Modifier):
|
||||
self.obj.recompute()
|
||||
self.trackers[0].set(self.obj.Placement.Base)
|
||||
self.trackers[1].set(self.obj.Shape.Vertexes[2].Point)
|
||||
|
||||
elif Draft.getType(self.obj) == "Polygon":
|
||||
delta = v.sub(self.obj.Placement.Base)
|
||||
if self.editing == 0:
|
||||
@@ -4492,6 +4459,7 @@ class Edit(Modifier):
|
||||
self.obj.Radius = rad
|
||||
self.obj.recompute()
|
||||
self.trackers[1].set(self.obj.Shape.Vertexes[0].Point)
|
||||
|
||||
elif Draft.getType(self.obj) == "Dimension":
|
||||
if self.editing == 0:
|
||||
self.obj.Start = v
|
||||
@@ -4501,35 +4469,155 @@ class Edit(Modifier):
|
||||
self.obj.Dimline = v
|
||||
elif self.editing == 3:
|
||||
self.obj.ViewObject.TextPosition = v
|
||||
|
||||
elif Draft.getType(self.obj) == "Wall":
|
||||
if self.editing == 0:
|
||||
self.obj.Base.movePoint(0,1,v)
|
||||
self.obj.Base.recompute()
|
||||
if self.editing == 1:
|
||||
self.obj.Base.movePoint(0,2,v)
|
||||
self.obj.Base.recompute()
|
||||
self.obj.recompute()
|
||||
|
||||
elif Draft.getType(self.obj) == "Window":
|
||||
pos=self.obj.Base.Placement.Base
|
||||
if self.editing == 0:
|
||||
self.obj.Base.Placement.Base=v
|
||||
self.obj.Base.recompute()
|
||||
if self.editing == 1:
|
||||
self.obj.Width = pos.sub(v).Length
|
||||
self.obj.Base.recompute()
|
||||
if self.editing == 2:
|
||||
self.obj.Height = pos.sub(v).Length
|
||||
self.obj.Base.recompute()
|
||||
for obj in self.obj.Hosts:
|
||||
obj.recompute()
|
||||
self.obj.recompute()
|
||||
|
||||
elif Draft.getType(self.obj) == "Space":
|
||||
if self.editing == 0:
|
||||
self.obj.ViewObject.TextPosition = v
|
||||
|
||||
elif Draft.getType(self.obj) == "Structure":
|
||||
nodes = self.obj.Nodes
|
||||
nodes[self.editing] = self.invpl.multVec(v)
|
||||
self.obj.Nodes = nodes
|
||||
|
||||
elif Draft.getType(self.obj) == "PanelCut":
|
||||
if self.editing == 0:
|
||||
self.obj.TagPosition = self.invpl.multVec(v)
|
||||
|
||||
elif Draft.getType(self.obj) == "PanelSheet":
|
||||
if self.editing == 0:
|
||||
self.obj.TagPosition = self.invpl.multVec(v)
|
||||
else:
|
||||
self.obj.Group[self.editing-1].Placement.Base = self.invpl.multVec(v)
|
||||
elif Draft.getType(self.obj) == "Wall":
|
||||
if self.editing == 0:
|
||||
self.obj.Base.movePoint(0,1,v)
|
||||
self.obj.Base.recompute()
|
||||
self.obj.recompute()
|
||||
if self.editing == 1:
|
||||
self.obj.Base.movePoint(0,2,v)
|
||||
self.obj.Base.recompute()
|
||||
self.obj.recompute()
|
||||
|
||||
self.doc.commitTransaction()
|
||||
try:
|
||||
FreeCADGui.ActiveDocument.ActiveView.redraw()
|
||||
except AttributeError as err:
|
||||
pass
|
||||
|
||||
def setCirclePts(self):
|
||||
self.editpoints.clear()
|
||||
self.editpoints.append(self.obj.Placement.Base)
|
||||
if self.obj.FirstAngle == self.obj.LastAngle:#self.obj is a circle
|
||||
self.ui.editUi("Circle")
|
||||
self.editpoints.append(self.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
|
||||
|
||||
def updateCirclePts(self,ep1=1,ep2=1,ep3=1,ep4=1):
|
||||
self.obj.recompute()
|
||||
if ep1 == 1:
|
||||
self.trackers[0].set(self.obj.Placement.Base)
|
||||
if ep2 == 1:
|
||||
self.trackers[1].set(self.obj.Shape.Vertexes[0].Point)
|
||||
if ep3 == 1:
|
||||
self.trackers[2].set(self.obj.Shape.Vertexes[1].Point)
|
||||
if ep4 == 1:
|
||||
self.trackers[3].set(self.getArcMid())
|
||||
|
||||
|
||||
def updateCircle(self,v):
|
||||
delta = v.sub(self.obj.Placement.Base)
|
||||
if self.obj.FirstAngle == self.obj.LastAngle:# object is a circle
|
||||
if self.editing == 0:
|
||||
p = self.obj.Placement
|
||||
p.move(delta)
|
||||
self.obj.Placement = p
|
||||
self.updateCirclePts(0,1,0,0)
|
||||
if self.editing == 1:
|
||||
self.obj.Radius = delta.Length
|
||||
self.updateCirclePts(0,0,0,0)
|
||||
|
||||
else:#self.obj is an arc
|
||||
|
||||
if self.arc3Pt == True:#edit by center radius FirstAngle LastAngle
|
||||
deltaX = v[0]-self.obj.Placement.Base[0]
|
||||
deltaY = v[1]-self.obj.Placement.Base[1]
|
||||
dangle = math.degrees(math.atan2(deltaY,deltaX))
|
||||
if self.editing == 0:
|
||||
p = self.obj.Placement
|
||||
p.move(delta)
|
||||
self.obj.Placement = p
|
||||
self.updateCirclePts(0,1,1,1)
|
||||
elif self.editing == 1:
|
||||
self.obj.FirstAngle=dangle
|
||||
self.obj.recompute()
|
||||
self.updateCirclePts(0,1,0,1)
|
||||
elif self.editing == 2:
|
||||
self.obj.LastAngle=dangle
|
||||
self.obj.recompute()
|
||||
self.updateCirclePts(0,0,1,1)
|
||||
elif self.editing == 3:
|
||||
self.obj.Radius = delta.Length
|
||||
self.obj.recompute()
|
||||
self.updateCirclePts(0,1,1,1)
|
||||
|
||||
elif self.arc3Pt == False:
|
||||
if self.editing == 0:#center point
|
||||
import DraftVecUtils
|
||||
p1 = self.obj.Shape.Vertexes[0].Point
|
||||
p2 = self.obj.Shape.Vertexes[1].Point
|
||||
p0 = DraftVecUtils.project(delta,self.getArcMid().sub(self.obj.Placement.Base))
|
||||
p0 = p0.add(self.obj.Placement.Base)
|
||||
self.obj.Placement.Base = p0
|
||||
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)))
|
||||
self.updateCirclePts(1,0,0,1)
|
||||
return
|
||||
else:
|
||||
if self.editing == 1:#first point
|
||||
p1=v
|
||||
p2=self.getArcMid()
|
||||
p3=self.obj.Shape.Vertexes[1].Point
|
||||
elif self.editing == 3:#midpoint
|
||||
p1=self.obj.Shape.Vertexes[0].Point
|
||||
p2=v
|
||||
p3=self.obj.Shape.Vertexes[1].Point
|
||||
elif self.editing == 2:#second point
|
||||
p1=self.obj.Shape.Vertexes[0].Point
|
||||
p2=self.getArcMid()
|
||||
p3=v
|
||||
arc=Part.ArcOfCircle(p1,p2,p3)#object is a support, do i have to delete it someway after?
|
||||
self.obj.Placement.Base=arc.Center
|
||||
self.obj.Radius = arc.Radius
|
||||
deltaX = p1[0]-self.obj.Placement.Base[0]
|
||||
deltaY = p1[1]-self.obj.Placement.Base[1]
|
||||
dangleF = math.degrees(math.atan2(deltaY,deltaX))
|
||||
deltaX = p3[0]-self.obj.Placement.Base[0]
|
||||
deltaY = p3[1]-self.obj.Placement.Base[1]
|
||||
dangleL = math.degrees(math.atan2(deltaY,deltaX))
|
||||
self.obj.FirstAngle = dangleF
|
||||
self.obj.LastAngle = dangleL
|
||||
self.updateCirclePts()
|
||||
|
||||
def getArcMid(self):#Returns object midpoint
|
||||
if Draft.getType(self.obj) == "Circle":
|
||||
if self.obj.LastAngle>self.obj.FirstAngle:
|
||||
@@ -4761,7 +4849,7 @@ class Edit(Modifier):
|
||||
objPoints = self.obj.Points[ep]
|
||||
if self.pl: objPoints = self.pl.multVec(objPoints)
|
||||
self.trackers.append(editTracker(objPoints,self.obj.Name,ep,self.obj.ViewObject.LineColor))
|
||||
|
||||
|
||||
class AddToGroup():
|
||||
"The AddToGroup FreeCAD command definition"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user