diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 6d06906869..d80b5119d8 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -2221,9 +2221,12 @@ class ScaleTaskPanel: layout.addWidget(self.isOriginal,7,0,1,2) self.isCopy = QtGui.QRadioButton() layout.addWidget(self.isCopy,8,0,1,2) + self.pickrefButton = QtGui.QPushButton() + layout.addWidget(self.pickrefButton,9,0,1,2) QtCore.QObject.connect(self.xValue,QtCore.SIGNAL("valueChanged(double)"),self.setValue) QtCore.QObject.connect(self.yValue,QtCore.SIGNAL("valueChanged(double)"),self.setValue) QtCore.QObject.connect(self.zValue,QtCore.SIGNAL("valueChanged(double)"),self.setValue) + QtCore.QObject.connect(self.pickrefButton,QtCore.SIGNAL("clicked()"),self.pickRef) self.retranslateUi() def setValue(self,val=None): @@ -2245,6 +2248,11 @@ class ScaleTaskPanel: self.isClone.setText(QtGui.QApplication.translate("Draft", "Create a clone", None)) self.isOriginal.setText(QtGui.QApplication.translate("Draft", "Modify original", None)) self.isCopy.setText(QtGui.QApplication.translate("Draft", "Create a copy", None)) + self.pickrefButton.setText(QtGui.QApplication.translate("Draft", "Pick from/to points", None)) + + def pickRef(self): + if self.sourceCmd: + self.sourceCmd.pickRef() def accept(self): if self.sourceCmd: diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 2e1e6d4210..7db28ba663 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -3601,14 +3601,24 @@ class Scale(Modifier): if self.call: self.view.removeEventCallback("SoEvent",self.call) self.sel = FreeCADGui.Selection.getSelection() self.sel = Draft.getGroupContents(self.sel) + self.refs = [] self.ui.pointUi(self.name) self.ui.modUi() self.ui.xValue.setFocus() self.ui.xValue.selectAll() self.ghost = ghostTracker(self.sel) + self.pickmode = False + self.task = None self.call = self.view.addEventCallback("SoEvent",self.action) msg(translate("draft", "Pick base point:")+"\n") + def pickRef(self): + self.pickmode = True + if self.node: + self.node = self.node[:1] # remove previous picks + msg(translate("draft", "Pick reference distance from base point:")+"\n") + self.call = self.view.addEventCallback("SoEvent",self.action) + def finish(self,closed=False,cont=False): Modifier.finish(self) if self.ghost: @@ -3664,22 +3674,36 @@ class Scale(Modifier): elif arg["Type"] == "SoMouseButtonEvent": if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"): if self.point: - self.ui.redraw() + #self.ui.redraw() self.numericInput(self.point.x,self.point.y,self.point.z) def numericInput(self,numx,numy,numz): "this function gets called by the toolbar when a valid base point has been entered" self.point = Vector(numx,numy,numz) self.node.append(self.point) - self.ui.offUi() - if self.call: - self.view.removeEventCallback("SoEvent",self.call) - task = DraftGui.ScaleTaskPanel() - task.sourceCmd = self - DraftGui.todo.delay(FreeCADGui.Control.showDialog,task) - if self.ghost: - self.ghost.on() - + if not self.pickmode: + self.ui.offUi() + if self.call: + self.view.removeEventCallback("SoEvent",self.call) + self.task = DraftGui.ScaleTaskPanel() + self.task.sourceCmd = self + DraftGui.todo.delay(FreeCADGui.Control.showDialog,self.task) + if self.ghost: + self.ghost.on() + elif len(self.node) == 2: + msg(translate("draft", "Pick new distance from base point:")+"\n") + elif len(self.node) == 3: + if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.off() + if self.call: + self.view.removeEventCallback("SoEvent",self.call) + d1 = (self.node[1].sub(self.node[0])).Length + d2 = (self.node[2].sub(self.node[0])).Length + #print d2,"/",d1,"=",d2/d1 + if hasattr(self,"task"): + if self.task: + self.task.lock.setChecked(True) + self.task.setValue(d2/d1) class ToggleConstructionMode(): "The Draft_ToggleConstructionMode FreeCAD command definition"