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.finishButton = self._pushbutton("finishButton", self.layout, icon='Draft_Finish')
self.closeButton = self._pushbutton("closeButton", self.layout, icon='Draft_Lock') self.closeButton = self._pushbutton("closeButton", self.layout, icon='Draft_Lock')
self.wipeButton = self._pushbutton("wipeButton", self.layout, icon='Draft_Wipe') 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.xyButton = self._pushbutton("xyButton", self.layout)
self.xzButton = self._pushbutton("xzButton", self.layout) self.xzButton = self._pushbutton("xzButton", self.layout)
self.yzButton = self._pushbutton("yzButton", 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.closeButton,QtCore.SIGNAL("pressed()"),self.closeLine)
QtCore.QObject.connect(self.wipeButton,QtCore.SIGNAL("pressed()"),self.wipeLine) QtCore.QObject.connect(self.wipeButton,QtCore.SIGNAL("pressed()"),self.wipeLine)
QtCore.QObject.connect(self.undoButton,QtCore.SIGNAL("pressed()"),self.undoSegment) 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.xyButton,QtCore.SIGNAL("clicked()"),self.selectXY)
QtCore.QObject.connect(self.xzButton,QtCore.SIGNAL("clicked()"),self.selectXZ) QtCore.QObject.connect(self.xzButton,QtCore.SIGNAL("clicked()"),self.selectXZ)
QtCore.QObject.connect(self.yzButton,QtCore.SIGNAL("clicked()"),self.selectYZ) 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.closeButton.setToolTip(translate("draft", "Finishes and closes the current line (C)"))
self.wipeButton.setText(translate("draft", "&Wipe")) 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.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.numFacesLabel.setText(translate("draft", "Sides"))
self.numFaces.setToolTip(translate("draft", "Number of sides")) self.numFaces.setToolTip(translate("draft", "Number of sides"))
self.offsetLabel.setText(translate("draft", "Offset")) self.offsetLabel.setText(translate("draft", "Offset"))
@ -795,6 +799,7 @@ class DraftToolBar:
self.undoButton.hide() self.undoButton.hide()
self.closeButton.hide() self.closeButton.hide()
self.wipeButton.hide() self.wipeButton.hide()
self.selectButton.hide()
self.xyButton.hide() self.xyButton.hide()
self.xzButton.hide() self.xzButton.hide()
self.yzButton.hide() self.yzButton.hide()
@ -1237,6 +1242,11 @@ class DraftToolBar:
"wipes existing segments of a line" "wipes existing segments of a line"
self.sourceCmd.wipe() 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): def selectXY(self):
self.sourceCmd.selectHandler("XY") self.sourceCmd.selectHandler("XY")
@ -1278,6 +1288,8 @@ class DraftToolBar:
self.toggleContinue() self.toggleContinue()
elif txt.endswith("w"): elif txt.endswith("w"):
self.wipeLine() self.wipeLine()
elif txt.endswith("e"):
self.selectEdge()
elif txt.endswith("s"): elif txt.endswith("s"):
self.togglesnap() self.togglesnap()
elif txt.endswith("["): elif txt.endswith("["):

View File

@ -1661,6 +1661,7 @@ class Dimension(Creator):
if self.ui: if self.ui:
self.ui.pointUi(name) self.ui.pointUi(name)
self.ui.continueCmd.show() self.ui.continueCmd.show()
self.ui.selectButton.show()
self.altdown = False self.altdown = False
self.call = self.view.addEventCallback("SoEvent",self.action) self.call = self.view.addEventCallback("SoEvent",self.action)
self.dimtrack = dimTracker() self.dimtrack = dimTracker()
@ -1675,6 +1676,7 @@ class Dimension(Creator):
self.point2 = None self.point2 = None
self.force = None self.force = None
self.info = None self.info = None
self.selectmode = False
msg(translate("draft", "Pick first point:\n")) msg(translate("draft", "Pick first point:\n"))
FreeCADGui.draftToolBar.show() FreeCADGui.draftToolBar.show()
@ -1741,6 +1743,9 @@ class Dimension(Creator):
self.node = [self.node[1]] self.node = [self.node[1]]
self.link = None self.link = None
def selectEdge(self):
self.selectmode = not(self.selectmode)
def action(self,arg): def action(self,arg):
"scene event handler" "scene event handler"
if arg["Type"] == "SoKeyboardEvent": if arg["Type"] == "SoKeyboardEvent":
@ -1752,7 +1757,7 @@ class Dimension(Creator):
self.point,ctrlPoint,self.info = getPoint(self,arg,noTracker=(len(self.node)>0)) self.point,ctrlPoint,self.info = getPoint(self,arg,noTracker=(len(self.node)>0))
if self.arcmode or self.point2: if self.arcmode or self.point2:
setMod(arg,MODCONSTRAIN,False) 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() self.dimtrack.off()
if not self.altdown: if not self.altdown:
self.altdown = True self.altdown = True
@ -1837,7 +1842,7 @@ class Dimension(Creator):
self.ui.redraw() self.ui.redraw()
if (not self.node) and (not self.support): if (not self.node) and (not self.support):
getSupport(arg) 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 #print "snapped: ",self.info
if self.info: if self.info:
ob = self.doc.getObject(self.info['Object']) ob = self.doc.getObject(self.info['Object'])
@ -1888,6 +1893,7 @@ class Dimension(Creator):
self.dimtrack.on() self.dimtrack.on()
else: else:
self.node.append(self.point) self.node.append(self.point)
self.selectmode = False
#print "node",self.node #print "node",self.node
self.dimtrack.update(self.node) self.dimtrack.update(self.node)
if (len(self.node) == 2): if (len(self.node) == 2):