Draft: Added a button to Dimension UI to select existing edges - fixes #1636

This commit is contained in:
Yorik van Havre 2014-09-15 17:05:44 -03:00
parent 4b59ef1586
commit 78f34666b2
2 changed files with 20 additions and 2 deletions

View File

@ -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()
@ -1237,6 +1242,11 @@ class DraftToolBar:
"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("["):

View File

@ -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()
@ -1741,6 +1743,9 @@ class Dimension(Creator):
self.node = [self.node[1]]
self.link = None
def selectEdge(self):
self.selectmode = not(self.selectmode)
def action(self,arg):
"scene event handler"
if arg["Type"] == "SoKeyboardEvent":
@ -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):