From 78f34666b2c09d63521bb38759ff131d32775d3c Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 15 Sep 2014 17:05:44 -0300 Subject: [PATCH] Draft: Added a button to Dimension UI to select existing edges - fixes #1636 --- src/Mod/Draft/DraftGui.py | 12 ++++++++++++ src/Mod/Draft/DraftTools.py | 10 ++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index df9fe7e49..7bc4dba8b 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -421,6 +421,7 @@ class DraftToolBar: self.finishButton = self._pushbutton("finishButton", self.layout, icon='Draft_Finish') self.closeButton = self._pushbutton("closeButton", self.layout, icon='Draft_Lock') self.wipeButton = self._pushbutton("wipeButton", self.layout, icon='Draft_Wipe') + self.selectButton = self._pushbutton("selectButton", self.layout, icon='view-select') self.xyButton = self._pushbutton("xyButton", self.layout) self.xzButton = self._pushbutton("xzButton", self.layout) self.yzButton = self._pushbutton("yzButton", self.layout) @@ -469,6 +470,7 @@ class DraftToolBar: QtCore.QObject.connect(self.closeButton,QtCore.SIGNAL("pressed()"),self.closeLine) QtCore.QObject.connect(self.wipeButton,QtCore.SIGNAL("pressed()"),self.wipeLine) QtCore.QObject.connect(self.undoButton,QtCore.SIGNAL("pressed()"),self.undoSegment) + QtCore.QObject.connect(self.selectButton,QtCore.SIGNAL("pressed()"),self.selectEdge) QtCore.QObject.connect(self.xyButton,QtCore.SIGNAL("clicked()"),self.selectXY) QtCore.QObject.connect(self.xzButton,QtCore.SIGNAL("clicked()"),self.selectXZ) QtCore.QObject.connect(self.yzButton,QtCore.SIGNAL("clicked()"),self.selectYZ) @@ -590,6 +592,8 @@ class DraftToolBar: self.closeButton.setToolTip(translate("draft", "Finishes and closes the current line (C)")) self.wipeButton.setText(translate("draft", "&Wipe")) self.wipeButton.setToolTip(translate("draft", "Wipes the existing segments of this line and starts again from the last point (W)")) + self.selectButton.setText(translate("draft", "&Select edge")) + self.selectButton.setToolTip(translate("draft", "Selects an existing edge to be measured by this dimension (E)")) self.numFacesLabel.setText(translate("draft", "Sides")) self.numFaces.setToolTip(translate("draft", "Number of sides")) self.offsetLabel.setText(translate("draft", "Offset")) @@ -795,6 +799,7 @@ class DraftToolBar: self.undoButton.hide() self.closeButton.hide() self.wipeButton.hide() + self.selectButton.hide() self.xyButton.hide() self.xzButton.hide() self.yzButton.hide() @@ -1236,6 +1241,11 @@ class DraftToolBar: def wipeLine(self): "wipes existing segments of a line" self.sourceCmd.wipe() + + def selectEdge(self): + "allows the dimension command to select an edge" + if hasattr(self.sourceCmd,"selectEdge"): + self.sourceCmd.selectEdge() def selectXY(self): self.sourceCmd.selectHandler("XY") @@ -1278,6 +1288,8 @@ class DraftToolBar: self.toggleContinue() elif txt.endswith("w"): self.wipeLine() + elif txt.endswith("e"): + self.selectEdge() elif txt.endswith("s"): self.togglesnap() elif txt.endswith("["): diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 50a6f0b3c..0299878df 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -1661,6 +1661,7 @@ class Dimension(Creator): if self.ui: self.ui.pointUi(name) self.ui.continueCmd.show() + self.ui.selectButton.show() self.altdown = False self.call = self.view.addEventCallback("SoEvent",self.action) self.dimtrack = dimTracker() @@ -1675,6 +1676,7 @@ class Dimension(Creator): self.point2 = None self.force = None self.info = None + self.selectmode = False msg(translate("draft", "Pick first point:\n")) FreeCADGui.draftToolBar.show() @@ -1740,6 +1742,9 @@ class Dimension(Creator): self.dir = self.node[1].sub(self.node[0]) self.node = [self.node[1]] self.link = None + + def selectEdge(self): + self.selectmode = not(self.selectmode) def action(self,arg): "scene event handler" @@ -1752,7 +1757,7 @@ class Dimension(Creator): self.point,ctrlPoint,self.info = getPoint(self,arg,noTracker=(len(self.node)>0)) if self.arcmode or self.point2: setMod(arg,MODCONSTRAIN,False) - if hasMod(arg,MODALT) and (len(self.node)<3): + if (hasMod(arg,MODALT) or self.selectmode) and (len(self.node)<3): self.dimtrack.off() if not self.altdown: self.altdown = True @@ -1837,7 +1842,7 @@ class Dimension(Creator): self.ui.redraw() if (not self.node) and (not self.support): getSupport(arg) - if hasMod(arg,MODALT) and (len(self.node)<3): + if (hasMod(arg,MODALT) or self.selectmode) and (len(self.node)<3): #print "snapped: ",self.info if self.info: ob = self.doc.getObject(self.info['Object']) @@ -1888,6 +1893,7 @@ class Dimension(Creator): self.dimtrack.on() else: self.node.append(self.point) + self.selectmode = False #print "node",self.node self.dimtrack.update(self.node) if (len(self.node) == 2):