Draft: Added checkbox to center working plane on current view in Select Plane dialog

This commit is contained in:
Yorik van Havre 2017-02-25 15:55:17 -03:00
parent 5eedcc4651
commit 89035021fb
2 changed files with 36 additions and 8 deletions

View File

@ -257,6 +257,7 @@ class DraftToolBar:
self.z = 0
self.uiloader = FreeCADGui.UiLoader()
self.autogroup = None
self.isCenterPlane = False
if self.taskmode:
# add only a dummy widget, since widgets are created on demand
@ -491,6 +492,7 @@ class DraftToolBar:
self.layout.addLayout(ml)
self.mainlineLabel = self._label("mainlineLabel", ml)
self.mainlineValue = self._spinbox("mainlineValue", ml)
self.centerPlane = self._checkbox("centerPlane",self.layout,checked = self.isCenterPlane)
# spacer
if not self.taskmode:
@ -560,6 +562,7 @@ class DraftToolBar:
QtCore.QObject.connect(self.FFileValue,QtCore.SIGNAL("returnPressed()"),self.validateFile)
QtCore.QObject.connect(self.gridValue,QtCore.SIGNAL("textEdited(QString)"),self.setGridSize)
QtCore.QObject.connect(self.mainlineValue,QtCore.SIGNAL("valueChanged(int)"),self.setMainline)
QtCore.QObject.connect(self.centerPlane,QtCore.SIGNAL("stateChanged(int)"),self.setCenterPlane)
# following lines can cause a crash and are not needed anymore when using the task panel
# http://forum.freecadweb.org/viewtopic.php?f=3&t=6952
@ -703,6 +706,7 @@ class DraftToolBar:
self.gridValue.setToolTip(translate("draft", "The spacing between the grid lines"))
self.mainlineLabel.setText(translate("draft", "Main line every"))
self.mainlineValue.setToolTip(translate("draft", "The number of lines between main lines"))
self.centerPlane.setText(translate("draft", "Center plane on view"))
# Update the maximum width of the push buttons
maxwidth = 66 # that's the default
@ -791,6 +795,7 @@ class DraftToolBar:
self.mainlineValue.show()
p = Draft.getParam("gridEvery",10)
self.mainlineValue.setValue(p)
self.centerPlane.show()
def extraLineUi(self):
'''shows length and angle controls'''
@ -938,6 +943,7 @@ class DraftToolBar:
self.gridValue.hide()
self.mainlineLabel.hide()
self.mainlineValue.hide()
self.centerPlane.hide()
def trimUi(self,title=translate("draft","Trim")):
self.taskUi(title)
@ -1160,6 +1166,9 @@ class DraftToolBar:
Draft.setParam("gridEvery",val)
if hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper.setGrid()
def setCenterPlane(self,val):
self.isCenterPlane = bool(val)
#---------------------------------------------------------------------------
# Processing functions

View File

@ -378,6 +378,22 @@ class SelectPlane(DraftTool):
self.finish()
except:
pass
def getCenterPoint(self,x,y,z):
if not self.ui.isCenterPlane:
return "0,0,0"
v = FreeCAD.Vector(x,y,z)
cam1 = FreeCAD.Vector(FreeCADGui.ActiveDocument.ActiveView.getCameraNode().position.getValue().getValue())
cam2 = FreeCADGui.ActiveDocument.ActiveView.getViewDirection()
vcam1 = DraftVecUtils.project(cam1,v)
a = vcam1.getAngle(cam2)
if a < 0.0001:
return "0,0,0"
d = vcam1.Length
L = d/math.cos(a)
vcam2 = DraftVecUtils.scaleTo(cam2,L)
cp = cam1.add(vcam2)
return str(cp.x)+","+str(cp.y)+","+str(cp.z)
def selectHandler(self, arg):
try:
@ -385,20 +401,20 @@ class SelectPlane(DraftTool):
except:
self.offset = 0
if arg == "XY":
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector(0,0,0), FreeCAD.Vector(0,0,1), "+str(self.offset)+")")
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(0,0,1)+"), FreeCAD.Vector(0,0,1), "+str(self.offset)+")")
self.display('Top')
self.finish()
elif arg == "XZ":
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector(0,0,0), FreeCAD.Vector(0,-1,0), "+str(self.offset)+")")
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(0,-1,0)+"), FreeCAD.Vector(0,-1,0), "+str(self.offset)+")")
self.display('Front')
self.finish()
elif arg == "YZ":
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector(0,0,0), FreeCAD.Vector(1,0,0), "+str(self.offset)+")")
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(1,0,0)+"), FreeCAD.Vector(1,0,0), "+str(self.offset)+")")
self.display('Side')
self.finish()
elif arg == "currentView":
d = self.view.getViewDirection().negative()
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector(0,0,0), FreeCAD.Vector("+str(d.x)+","+str(d.y)+","+str(d.z)+"), "+str(self.offset)+")")
FreeCADGui.doCommandGui("FreeCAD.DraftWorkingPlane.alignToPointAndAxis(FreeCAD.Vector("+self.getCenterPoint(d.x,d.y,d.z)+"), FreeCAD.Vector("+str(d.x)+","+str(d.y)+","+str(d.z)+"), "+str(self.offset)+")")
self.display(d)
self.finish()
elif arg == "reset":
@ -2810,9 +2826,11 @@ class Stretch(Modifier):
# first point of displacement line
msg(translate("draft", "Pick end point of displacement:\n"))
self.displacement = point
#print "first point:",point
self.node = [point]
self.step = 4
elif self.step == 4:
#print "second point:",point
self.displacement = point.sub(self.displacement)
self.doStretch()
if self.point:
@ -2836,16 +2854,17 @@ class Stretch(Modifier):
commitops = []
if self.displacement:
if self.displacement.Length > 0:
#print "displacement: ",self.displacement
for ops in self.ops:
tp = Draft.getType(ops[0])
localdisp = ops[0].Placement.Rotation.inverted().multVec(self.displacement)
if tp in ["Wire","BSpline","BezCurve"]:
pts = []
for i in range(len(ops[1])):
if ops[1][i] == False:
pts.append(ops[0].Points[i])
else:
pts.append(ops[0].Points[i].add(self.displacement))
pts.append(ops[0].Points[i].add(localdisp))
pts = str(pts).replace("Vector","FreeCAD.Vector")
commitops.append("FreeCAD.ActiveDocument."+ops[0].Name+".Points="+pts)
elif tp in ["Rectangle"]:
@ -4254,8 +4273,8 @@ class AddToGroup():
def GetResources(self):
return {'Pixmap' : 'Draft_AddToGroup',
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_AddToGroup", "Add to group..."),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_AddToGroup", "Adds the selected object(s) to an existing group")}
'MenuText': QtCore.QT_TRANSLATE_NOOP("Draft_AddToGroup", "Move to group..."),
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Draft_AddToGroup", "Moves the selected object(s) to an existing group")}
def IsActive(self):
if FreeCADGui.Selection.getSelection():