diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index aeaeb3e9e5..3fce4d5faa 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -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 diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index c86354e0d2..5f1f7d6874 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -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():