Draft: Fixed bug in Edit tool

This commit is contained in:
Yorik van Havre 2013-10-04 14:40:13 -03:00
parent 74fda05d77
commit 04230c4348

View File

@ -3035,6 +3035,8 @@ class Edit(Modifier):
def __init__(self): def __init__(self):
self.running = False self.running = False
self.trackers = []
self.obj = None
def GetResources(self): def GetResources(self):
return {'Pixmap' : 'Draft_Edit', return {'Pixmap' : 'Draft_Edit',
@ -3060,73 +3062,73 @@ class Edit(Modifier):
def proceed(self): def proceed(self):
if self.call: if self.call:
self.view.removeEventCallback("SoEvent",self.call) self.view.removeEventCallback("SoEvent",self.call)
self.ui.editUi() self.ui.editUi()
if self.doc: if self.doc:
self.obj = Draft.getSelection() self.obj = Draft.getSelection()
if self.obj: if self.obj:
self.obj = self.obj[0] self.obj = self.obj[0]
# store selectable state of the object # store selectable state of the object
if hasattr(self.obj.ViewObject,"Selectable"): if hasattr(self.obj.ViewObject,"Selectable"):
self.selectstate = self.obj.ViewObject.Selectable self.selectstate = self.obj.ViewObject.Selectable
self.obj.ViewObject.Selectable = False self.obj.ViewObject.Selectable = False
if Draft.getType(self.obj) in ["Wire","BSpline"]: if Draft.getType(self.obj) in ["Wire","BSpline"]:
self.ui.setEditButtons(True) self.ui.setEditButtons(True)
else:
self.ui.setEditButtons(False)
self.editing = None
self.editpoints = []
self.pl = None
if "Placement" in self.obj.PropertiesList:
self.pl = self.obj.Placement
self.invpl = self.pl.inverse()
if Draft.getType(self.obj) in ["Wire","BSpline"]:
for p in self.obj.Points:
if self.pl: p = self.pl.multVec(p)
self.editpoints.append(p)
elif Draft.getType(self.obj) == "Circle":
self.editpoints.append(self.obj.Placement.Base)
if self.obj.FirstAngle == self.obj.LastAngle:
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)
elif Draft.getType(self.obj) == "Rectangle":
self.editpoints.append(self.obj.Placement.Base)
self.editpoints.append(self.obj.Shape.Vertexes[2].Point)
v = self.obj.Shape.Vertexes
self.bx = v[1].Point.sub(v[0].Point)
if self.obj.Length < 0:
self.bx = self.bx.negative()
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.editpoints.append(self.obj.Placement.Base)
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)
elif Draft.getType(self.obj) == "Dimension":
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)
self.editpoints.append(Vector(p[0],p[1],p[2]))
self.trackers = []
if self.editpoints:
for ep in range(len(self.editpoints)):
self.trackers.append(editTracker(self.editpoints[ep],self.obj.Name,
ep,self.obj.ViewObject.LineColor))
self.call = self.view.addEventCallback("SoEvent",self.action)
self.running = True
plane.save()
if "Shape" in self.obj.PropertiesList:
plane.alignToFace(self.obj.Shape)
if self.planetrack:
self.planetrack.set(self.editpoints[0])
else:
msg(translate("draft", "This object type is not editable\n"),'warning')
self.finish()
else: else:
self.ui.setEditButtons(False)
self.editing = None
self.editpoints = []
self.pl = None
if "Placement" in self.obj.PropertiesList:
self.pl = self.obj.Placement
self.invpl = self.pl.inverse()
if Draft.getType(self.obj) in ["Wire","BSpline"]:
for p in self.obj.Points:
if self.pl: p = self.pl.multVec(p)
self.editpoints.append(p)
elif Draft.getType(self.obj) == "Circle":
self.editpoints.append(self.obj.Placement.Base)
if self.obj.FirstAngle == self.obj.LastAngle:
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)
elif Draft.getType(self.obj) == "Rectangle":
self.editpoints.append(self.obj.Placement.Base)
self.editpoints.append(self.obj.Shape.Vertexes[2].Point)
v = self.obj.Shape.Vertexes
self.bx = v[1].Point.sub(v[0].Point)
if self.obj.Length < 0:
self.bx = self.bx.negative()
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.editpoints.append(self.obj.Placement.Base)
self.editpoints.append(self.obj.Shape.Vertexes[0].Point)
elif Draft.getType(self.obj) == "Dimension":
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)
self.editpoints.append(Vector(p[0],p[1],p[2]))
self.trackers = []
if self.editpoints:
for ep in range(len(self.editpoints)):
self.trackers.append(editTracker(self.editpoints[ep],self.obj.Name,
ep,self.obj.ViewObject.LineColor))
self.call = self.view.addEventCallback("SoEvent",self.action)
self.running = True
plane.save()
if "Shape" in self.obj.PropertiesList:
plane.alignToFace(self.obj.Shape)
if self.planetrack:
self.planetrack.set(self.editpoints[0])
else:
msg(translate("draft", "This object type is not editable\n"),'warning')
self.finish() self.finish()
else:
self.finish()
def finish(self,closed=False): def finish(self,closed=False):
"terminates the operation" "terminates the operation"
if closed: if self.obj and closed:
if "Closed" in self.obj.PropertiesList: if "Closed" in self.obj.PropertiesList:
if not self.obj.Closed: if not self.obj.Closed:
self.obj.Closed = True self.obj.Closed = True
@ -3134,8 +3136,9 @@ class Edit(Modifier):
if self.trackers: if self.trackers:
for t in self.trackers: for t in self.trackers:
t.finalize() t.finalize()
if hasattr(self.obj.ViewObject,"Selectable"): if self.obj:
self.obj.ViewObject.Selectable = self.selectstate if hasattr(self.obj.ViewObject,"Selectable"):
self.obj.ViewObject.Selectable = self.selectstate
Modifier.finish(self) Modifier.finish(self)
plane.restore() plane.restore()
self.running = False self.running = False