From 7e560942c97733a280c0af363a92f7d9f800bb5f Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 24 Apr 2012 21:53:27 -0300 Subject: [PATCH] Fixed #0000681 - Bugs in Draft BSplines --- src/Mod/Draft/Draft.py | 63 +++++++++++++++++++------------------ src/Mod/Draft/DraftGui.py | 17 ++++++---- src/Mod/Draft/DraftTools.py | 10 +++--- 3 files changed, 48 insertions(+), 42 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 853385fc8..8ccca3b12 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1774,6 +1774,7 @@ class _ViewProviderDimension: obj.Proxy = self obj.FontSize=getParam("textheight") obj.FontName=getParam("textfont") + obj.DisplayModes = ["2D","3D"] obj.ExtLines=0.3 obj.Override = '' @@ -1827,6 +1828,7 @@ class _ViewProviderDimension: return p1,p2,p3,p4,tbase,norm,rot def attach(self, obj): + obj.DisplayMode = ["2D","3D"] self.Object = obj.Object p1,p2,p3,p4,tbase,norm,rot = self.calcGeom(obj.Object) self.color = coin.SoBaseColor() @@ -1922,29 +1924,30 @@ class _ViewProviderDimension: text = text.replace("dim",dtext) else: text = dtext - self.text.string = self.text3d.string = text - self.textpos.rotation = coin.SbRotation(rot[0],rot[1],rot[2],rot[3]) - self.textpos.translation.setValue([tbase.x,tbase.y,tbase.z]) - if obj.ViewObject.DisplayMode == "2D": - self.coords.point.setValues([[p1.x,p1.y,p1.z], - [p2.x,p2.y,p2.z], - [p3.x,p3.y,p3.z], - [p4.x,p4.y,p4.z]]) - self.line.numVertices.setValues([4]) - else: - ts = (len(text)*obj.ViewObject.FontSize)/4 - rm = ((p3.sub(p2)).Length/2)-ts - p2a = p2.add(fcvec.scaleTo(p3.sub(p2),rm)) - p2b = p3.add(fcvec.scaleTo(p2.sub(p3),rm)) - self.coords.point.setValues([[p1.x,p1.y,p1.z], - [p2.x,p2.y,p2.z], - [p2a.x,p2a.y,p2a.z], - [p2b.x,p2b.y,p2b.z], - [p3.x,p3.y,p3.z], - [p4.x,p4.y,p4.z]]) - self.line.numVertices.setValues([3,3]) - self.coord1.point.setValue((p2.x,p2.y,p2.z)) - self.coord2.point.setValue((p3.x,p3.y,p3.z)) + if hasattr(self,"text"): + self.text.string = self.text3d.string = text + self.textpos.rotation = coin.SbRotation(rot[0],rot[1],rot[2],rot[3]) + self.textpos.translation.setValue([tbase.x,tbase.y,tbase.z]) + if obj.ViewObject.DisplayMode == "2D": + self.coords.point.setValues([[p1.x,p1.y,p1.z], + [p2.x,p2.y,p2.z], + [p3.x,p3.y,p3.z], + [p4.x,p4.y,p4.z]]) + self.line.numVertices.setValues([4]) + else: + ts = (len(text)*obj.ViewObject.FontSize)/4 + rm = ((p3.sub(p2)).Length/2)-ts + p2a = p2.add(fcvec.scaleTo(p3.sub(p2),rm)) + p2b = p3.add(fcvec.scaleTo(p2.sub(p3),rm)) + self.coords.point.setValues([[p1.x,p1.y,p1.z], + [p2.x,p2.y,p2.z], + [p2a.x,p2a.y,p2a.z], + [p2b.x,p2b.y,p2b.z], + [p3.x,p3.y,p3.z], + [p4.x,p4.y,p4.z]]) + self.line.numVertices.setValues([3,3]) + self.coord1.point.setValue((p2.x,p2.y,p2.z)) + self.coord2.point.setValue((p3.x,p3.y,p3.z)) def onChanged(self, vp, prop): if prop == "FontSize": @@ -1961,9 +1964,7 @@ class _ViewProviderDimension: self.updateData(vp.Object, None) def getDisplayModes(self,obj): - modes=[] - modes.extend(["2D","3D"]) - return modes + return ["2D","3D"] def getDefaultDisplayMode(self): return "2D" @@ -2279,13 +2280,14 @@ class _Rectangle: class _ViewProviderRectangle(_ViewProviderDraft): "A View Provider for the Rectangle object" - def __init__(self, obj): - _ViewProviderDraft.__init__(self,obj) + def __init__(self, vobj): + _ViewProviderDraft.__init__(self,vobj) obj.addProperty("App::PropertyFile","TextureImage", "Base","Uses an image as a texture map") - def attach(self,obj): + def attach(self,vobj): self.texture = None + self.Object = vobj.Object def onChanged(self, vp, prop): if prop == "TextureImage": @@ -2613,7 +2615,8 @@ class _ViewProviderBSpline(_ViewProviderDraft): if prop == "Points": if obj.Points: p = obj.Points[-1] - self.coords.point.setValue((p.x,p.y,p.z)) + if hasattr(self,"coords"): + self.coords.point.setValue((p.x,p.y,p.z)) return def onChanged(self, vp, prop): diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 1d54e1c75..65ced3ee6 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -309,7 +309,7 @@ class DraftToolBar: self.radiusValue.setText("0.00") self.isRelative = self._checkbox("isRelative",self.layout,checked=True) self.hasFill = self._checkbox("hasFill",self.layout,checked=self.fillmode) - self.continueCmd = self._checkbox("continueCmd",self.layout,checked=False) + self.continueCmd = self._checkbox("continueCmd",self.layout,checked=self.continueMode) self.occOffset = self._checkbox("occOffset",self.layout,checked=False) self.undoButton = self._pushbutton("undoButton", self.layout, icon='Draft_Rotate') self.finishButton = self._pushbutton("finishButton", self.layout, icon='Draft_Finish') @@ -341,7 +341,7 @@ class DraftToolBar: QtCore.QObject.connect(self.radiusValue,QtCore.SIGNAL("returnPressed()"),self.validatePoint) QtCore.QObject.connect(self.textValue,QtCore.SIGNAL("textChanged(QString)"),self.storeCurrentText) QtCore.QObject.connect(self.textValue,QtCore.SIGNAL("returnPressed()"),self.sendText) - QtCore.QObject.connect(self.textValue,QtCore.SIGNAL("escaped()"),self.finish) + QtCore.QObject.connect(self.textValue,QtCore.SIGNAL("escaped()"),self.escape) QtCore.QObject.connect(self.textValue,QtCore.SIGNAL("down()"),self.sendText) QtCore.QObject.connect(self.textValue,QtCore.SIGNAL("up()"),self.lineUp) QtCore.QObject.connect(self.zValue,QtCore.SIGNAL("returnPressed()"),self.xValue.setFocus) @@ -361,13 +361,13 @@ class DraftToolBar: QtCore.QObject.connect(self.hasFill,QtCore.SIGNAL("stateChanged(int)"),self.setFill) QtCore.QObject.connect(self.currentViewButton,QtCore.SIGNAL("clicked()"),self.selectCurrentView) QtCore.QObject.connect(self.resetPlaneButton,QtCore.SIGNAL("clicked()"),self.selectResetPlane) - QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("escaped()"),self.finish) + QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("escaped()"),self.escape) QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("undo()"),self.undoSegment) - QtCore.QObject.connect(self.yValue,QtCore.SIGNAL("escaped()"),self.finish) + QtCore.QObject.connect(self.yValue,QtCore.SIGNAL("escaped()"),self.escape) QtCore.QObject.connect(self.yValue,QtCore.SIGNAL("undo()"),self.undoSegment) - QtCore.QObject.connect(self.zValue,QtCore.SIGNAL("escaped()"),self.finish) + QtCore.QObject.connect(self.zValue,QtCore.SIGNAL("escaped()"),self.escape) QtCore.QObject.connect(self.zValue,QtCore.SIGNAL("undo()"),self.undoSegment) - QtCore.QObject.connect(self.radiusValue,QtCore.SIGNAL("escaped()"),self.finish) + QtCore.QObject.connect(self.radiusValue,QtCore.SIGNAL("escaped()"),self.escape) QtCore.QObject.connect(self.baseWidget,QtCore.SIGNAL("resized()"),self.relocate) QtCore.QObject.connect(self.baseWidget,QtCore.SIGNAL("retranslate()"),self.retranslateUi) @@ -860,6 +860,11 @@ class DraftToolBar: self.cancel() self.cancel = None + def escape(self): + "escapes the current command" + self.continueMode = False + self.finish() + def closeLine(self): "close button action" self.sourceCmd.finish(True) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 7b7c100a2..748530281 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -422,7 +422,7 @@ class Line(Creator): self.linetrack.finalize() self.constraintrack.finalize() Creator.finish(self) - if cont and self.ui: + if self.ui: if self.ui.continueMode: self.Activated() @@ -618,7 +618,7 @@ class BSpline(Line): self.bsplinetrack.finalize() self.constraintrack.finalize() Creator.finish(self) - if cont and self.ui: + if self.ui: if self.ui.continueMode: self.Activated() @@ -706,7 +706,7 @@ class Rectangle(Creator): if self.ui: self.rect.off() self.rect.finalize() - if cont and self.ui: + if self.ui: if self.ui.continueMode: self.Activated() @@ -807,7 +807,7 @@ class Arc(Creator): self.constraintrack.finalize() self.arctrack.finalize() self.doc.recompute() - if cont and self.ui: + if self.ui: if self.ui.continueMode: self.Activated() @@ -1121,7 +1121,6 @@ class Polygon(Creator): self.constraintrack.finalize() self.arctrack.finalize() self.doc.recompute() - if cont and self.ui: if self.ui.continueMode: self.Activated() @@ -1301,7 +1300,6 @@ class Text(Creator): Creator.finish(self) if self.ui: del self.dialog - if cont and self.ui: if self.ui.continueMode: self.Activated()