Draft: New button to modify working plane during Wire drawing
This commit is contained in:
@@ -476,6 +476,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.orientWPButton = self._pushbutton("orientWPButton", self.layout, icon='Draft_SelectPlane')
|
||||
self.selectButton = self._pushbutton("selectButton", self.layout, icon='view-select')
|
||||
self.xyButton = self._pushbutton("xyButton", self.layout)
|
||||
self.xzButton = self._pushbutton("xzButton", self.layout)
|
||||
@@ -540,6 +541,7 @@ class DraftToolBar:
|
||||
QtCore.QObject.connect(self.finishButton,QtCore.SIGNAL("pressed()"),self.finish)
|
||||
QtCore.QObject.connect(self.closeButton,QtCore.SIGNAL("pressed()"),self.closeLine)
|
||||
QtCore.QObject.connect(self.wipeButton,QtCore.SIGNAL("pressed()"),self.wipeLine)
|
||||
QtCore.QObject.connect(self.orientWPButton,QtCore.SIGNAL("pressed()"),self.orientWP)
|
||||
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)
|
||||
@@ -686,6 +688,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.orientWPButton.setText(translate("draft", "&Set WP"))
|
||||
self.orientWPButton.setToolTip(translate("draft", "Reorients the working plane on the last segment (S)"))
|
||||
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"))
|
||||
@@ -702,7 +706,7 @@ class DraftToolBar:
|
||||
self.resetPlaneButton.setText(translate("draft", "Auto"))
|
||||
self.resetPlaneButton.setToolTip(translate("draft", "Do not project points to a drawing plane"))
|
||||
self.isCopy.setText(translate("draft", "C&opy"))
|
||||
self.isCopy.setToolTip(translate("draft", "If checked, objects will be copied instead of moved (C)"))
|
||||
self.isCopy.setToolTip(translate("draft", "If checked, objects will be copied instead of moved (O)"))
|
||||
self.SStringValue.setToolTip(translate("draft", "Text string to draw"))
|
||||
self.labelSString.setText(translate("draft", "String"))
|
||||
self.SSizeValue.setToolTip(translate("draft", "Height of text"))
|
||||
@@ -844,6 +848,7 @@ class DraftToolBar:
|
||||
self.finishButton.show()
|
||||
self.closeButton.show()
|
||||
self.wipeButton.show()
|
||||
self.orientWPButton.show()
|
||||
self.undoButton.show()
|
||||
self.continueCmd.show()
|
||||
|
||||
@@ -915,6 +920,7 @@ class DraftToolBar:
|
||||
self.undoButton.hide()
|
||||
self.closeButton.hide()
|
||||
self.wipeButton.hide()
|
||||
self.orientWPButton.hide()
|
||||
self.selectButton.hide()
|
||||
self.xyButton.hide()
|
||||
self.xzButton.hide()
|
||||
@@ -1400,7 +1406,11 @@ class DraftToolBar:
|
||||
def wipeLine(self):
|
||||
"wipes existing segments of a line"
|
||||
self.sourceCmd.wipe()
|
||||
|
||||
|
||||
def orientWP(self):
|
||||
"reorients the current working plane"
|
||||
self.sourceCmd.orientWP()
|
||||
|
||||
def selectEdge(self):
|
||||
"allows the dimension command to select an edge"
|
||||
if hasattr(self.sourceCmd,"selectEdge"):
|
||||
|
||||
@@ -480,7 +480,8 @@ class Line(Creator):
|
||||
def Activated(self,name=translate("draft","Line")):
|
||||
Creator.Activated(self,name)
|
||||
if self.doc:
|
||||
self.obj = None
|
||||
self.obj = None # stores the temp shape
|
||||
self.oldWP = None # stores the WP if we modify it
|
||||
if self.isWire:
|
||||
self.ui.wireUi(name)
|
||||
else:
|
||||
@@ -498,6 +499,12 @@ class Line(Creator):
|
||||
old = self.obj.Name
|
||||
todo.delay(self.doc.removeObject,old)
|
||||
self.obj = None
|
||||
if self.oldWP:
|
||||
FreeCAD.DraftWorkingPlane = self.oldWP
|
||||
if hasattr(FreeCADGui,"Snapper"):
|
||||
FreeCADGui.Snapper.setGrid()
|
||||
FreeCADGui.Snapper.restack()
|
||||
self.oldWP = None
|
||||
if (len(self.node) > 1):
|
||||
if (len(self.node) == 2) and Draft.getParam("UsePartPrimitives",False):
|
||||
# use Part primitive
|
||||
@@ -604,6 +611,23 @@ class Line(Creator):
|
||||
self.planetrack.set(self.node[0])
|
||||
msg(translate("draft", "Pick next point:\n"))
|
||||
|
||||
def orientWP(self):
|
||||
if hasattr(FreeCAD,"DraftWorkingPlane"):
|
||||
if (len(self.node) > 1) and self.obj:
|
||||
import DraftGeomUtils
|
||||
n = DraftGeomUtils.getNormal(self.obj.Shape)
|
||||
if not n:
|
||||
n = FreeCAD.DraftWorkingPlane.axis
|
||||
p = self.node[-1]
|
||||
v = self.node[-2].sub(self.node[-1])
|
||||
v = v.negative()
|
||||
if not self.oldWP:
|
||||
self.oldWP = FreeCAD.DraftWorkingPlane.copy()
|
||||
FreeCAD.DraftWorkingPlane.alignToPointAndAxis(p,n,upvec=v)
|
||||
if hasattr(FreeCADGui,"Snapper"):
|
||||
FreeCADGui.Snapper.setGrid()
|
||||
FreeCADGui.Snapper.restack()
|
||||
|
||||
def numericInput(self,numx,numy,numz):
|
||||
"this function gets called by the toolbar when valid x, y, and z have been entered there"
|
||||
self.point = Vector(numx,numy,numz)
|
||||
|
||||
@@ -59,6 +59,9 @@ class plane:
|
||||
def __repr__(self):
|
||||
return "Workplane x="+str(DraftVecUtils.rounded(self.u))+" y="+str(DraftVecUtils.rounded(self.v))+" z="+str(DraftVecUtils.rounded(self.axis))
|
||||
|
||||
def copy(self):
|
||||
return plane(u=self.u,v=self.v,w=self.axis,pos=self.position)
|
||||
|
||||
def offsetToPoint(self, p, direction=None):
|
||||
'''
|
||||
Return the signed distance from p to the plane, such
|
||||
|
||||
Reference in New Issue
Block a user