Update DraftTools.py

Modified arc editing:
- middle editpoint control radius
- end editpoint control first and last angle;
This commit is contained in:
carlopav
2019-02-08 23:06:35 +01:00
committed by GitHub
parent 74f89d71d8
commit f232054404

View File

@@ -4121,9 +4121,14 @@ class Edit(Modifier):
self.editpoints.append(self.obj.Placement.Base)
if self.obj.FirstAngle == self.obj.LastAngle:
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)
else:
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)
self.editpoints.append(self.obj.Shape.Vertexes[1].Point)
else:#self.obj is an arc
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)#First endpoint
self.editpoints.append(self.obj.Shape.Vertexes[1].Point)#Second endpoint
midAngle=math.radians(self.obj.FirstAngle+(self.obj.LastAngle-self.obj.FirstAngle)/2)
midRadX=self.obj.Radius*math.cos(midAngle)
midRadY=self.obj.Radius*math.sin(midAngle)
deltaMid=FreeCAD.Vector(midRadX,midRadY,0)
self.editpoints.append(self.obj.Placement.Base+deltaMid)#Midpoint
elif Draft.getType(self.obj) == "Rectangle":
self.editpoints.append(self.obj.Placement.Base)
self.editpoints.append(self.obj.Shape.Vertexes[2].Point)
@@ -4175,7 +4180,8 @@ class Edit(Modifier):
if self.obj.Base.GeometryCount == 1:
self.editpoints.append(self.obj.Base.getPoint(0,1))
self.editpoints.append(self.obj.Base.getPoint(0,2))
#if self.obj.Base.GeometryCount > 1: add dialog box that asks if the user wants to enter sketch edit mode
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:
@@ -4377,20 +4383,26 @@ class Edit(Modifier):
self.trackers[0].set(self.obj.Placement.Base)
if not self.obj.FirstAngle == self.obj.LastAngle:
self.trackers[2].set(self.obj.Shape.Vertexes[1].Point)
self.trackers[3].set(self.getArcMid())#self.obj is an arc
elif self.editing == 1:
if self.obj.FirstAngle == self.obj.LastAngle:
if self.obj.FirstAngle == self.obj.LastAngle:#self.obj is a circle
self.obj.Radius = delta.Length
self.obj.recompute()
else:
self.obj.Radius = delta.Length
else:#self.obj is an arc
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.Radius = delta.Length
self.obj.LastAngle=dangle
self.obj.recompute()
self.trackers[2].set(self.obj.Shape.Vertexes[1].Point)
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 Draft.getType(self.obj) == "Rectangle":
delta = v.sub(self.obj.Placement.Base)
@@ -4411,6 +4423,7 @@ class Edit(Modifier):
ay = -ay
self.obj.Length = ax
self.obj.Height = ay
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":
@@ -4427,6 +4440,7 @@ class Edit(Modifier):
halfangle = ((math.pi*2)/self.obj.FacesNumber)/2
rad = math.cos(halfangle)*delta.Length
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:
@@ -4466,6 +4480,24 @@ class Edit(Modifier):
except AttributeError as err:
pass
def getArcMid(self):#Returns object midpoint
if Draft.getType(self.obj) == "Circle":
#self.obj.recompute()
if self.obj.LastAngle>self.obj.FirstAngle:
midAngle=math.radians(self.obj.FirstAngle+(self.obj.LastAngle-self.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)
deltaMid=FreeCAD.Vector(midRadX,midRadY,0)
midPoint=(self.obj.Placement.Base+deltaMid)
return(midPoint)
elif Draft.getType(self.obj) == "Wall":
if self.obj.Base.GeometryCount == 1:
msg("wall edit mode: get midpoint")
else:
msg("Failed to get object midpoint during Editing")
def numericInput(self,v,numy=None,numz=None):
'''this function gets called by the toolbar
when valid x, y, and z have been entered there'''