Draft: New UI for the Scale tool
This commit is contained in:
@@ -3594,12 +3594,20 @@ class Scale(Modifier):
|
||||
Modifier.finish(self)
|
||||
if self.ghost:
|
||||
self.ghost.finalize()
|
||||
if cont and self.ui:
|
||||
if self.ui.continueMode:
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
self.Activated()
|
||||
|
||||
def scale(self,delta,copy=False):
|
||||
def scale(self,x,y,z,rel,mode):
|
||||
delta = Vector(x,y,z)
|
||||
if rel:
|
||||
delta = FreeCAD.DraftWorkingPlane.getGlobalCoords(delta)
|
||||
if mode == 0:
|
||||
copy = False
|
||||
legacy = False
|
||||
elif mode == 1:
|
||||
copy = False
|
||||
legacy = True
|
||||
elif mode == 2:
|
||||
copy = True
|
||||
legacy = True
|
||||
"moving the real shapes"
|
||||
sel = '['
|
||||
for o in self.sel:
|
||||
@@ -3608,14 +3616,22 @@ class Scale(Modifier):
|
||||
sel += 'FreeCAD.ActiveDocument.'+o.Name
|
||||
sel += ']'
|
||||
FreeCADGui.addModule("Draft")
|
||||
if copy:
|
||||
self.commit(translate("draft","Copy"),
|
||||
['Draft.scale('+sel+',delta='+DraftVecUtils.toString(delta)+',center='+DraftVecUtils.toString(self.node[0])+',copy='+str(copy)+')',
|
||||
'FreeCAD.ActiveDocument.recompute()'])
|
||||
else:
|
||||
self.commit(translate("draft","Scale"),
|
||||
['Draft.scale('+sel+',delta='+DraftVecUtils.toString(delta)+',center='+DraftVecUtils.toString(self.node[0])+',copy='+str(copy)+')',
|
||||
'FreeCAD.ActiveDocument.recompute()'])
|
||||
self.commit(translate("draft","Copy"),
|
||||
['Draft.scale('+sel+',delta='+DraftVecUtils.toString(delta)+',center='+DraftVecUtils.toString(self.node[0])+',copy='+str(copy)+',legacy='+str(legacy)+')',
|
||||
'FreeCAD.ActiveDocument.recompute()'])
|
||||
self.finish()
|
||||
|
||||
def scaleGhost(self,x,y,z,rel):
|
||||
delta = Vector(x,y,z)
|
||||
if rel:
|
||||
delta = FreeCAD.DraftWorkingPlane.getGlobalCoords(delta)
|
||||
self.ghost.scale(delta)
|
||||
# calculate a correction factor depending on the scaling center
|
||||
corr = Vector(self.node[0].x,self.node[0].y,self.node[0].z)
|
||||
corr.scale(delta.x,delta.y,delta.z)
|
||||
corr = (corr.sub(self.node[0])).negative()
|
||||
self.ghost.move(corr)
|
||||
self.ghost.on()
|
||||
|
||||
def action(self,arg):
|
||||
"scene event handler"
|
||||
@@ -3626,63 +3642,24 @@ class Scale(Modifier):
|
||||
if self.ghost:
|
||||
self.ghost.off()
|
||||
self.point,ctrlPoint,info = getPoint(self,arg,sym=True)
|
||||
if (len(self.node) > 0):
|
||||
last = self.node[len(self.node)-1]
|
||||
delta = self.point.sub(last)
|
||||
delta = FreeCAD.Vector(delta.x,delta.y,1)
|
||||
if self.ghost:
|
||||
self.ghost.scale(delta)
|
||||
# calculate a correction factor depending on the scaling center
|
||||
corr = Vector(self.node[0].x,self.node[0].y,self.node[0].z)
|
||||
corr.scale(delta.x,delta.y,delta.z)
|
||||
corr = (corr.sub(self.node[0])).negative()
|
||||
self.ghost.move(corr)
|
||||
self.ghost.on()
|
||||
self.ui.zValue.setText("1")
|
||||
if self.extendedCopy:
|
||||
if not hasMod(arg,MODALT): self.finish()
|
||||
redraw3DView()
|
||||
elif arg["Type"] == "SoMouseButtonEvent":
|
||||
if (arg["State"] == "DOWN") and (arg["Button"] == "BUTTON1"):
|
||||
if self.point:
|
||||
self.ui.redraw()
|
||||
if (self.node == []):
|
||||
self.node.append(self.point)
|
||||
self.ui.isRelative.setChecked(True)
|
||||
self.ui.isCopy.show()
|
||||
if self.ghost:
|
||||
self.ghost.on()
|
||||
msg(translate("draft", "Pick scale factor:\n"))
|
||||
else:
|
||||
last = self.node[0]
|
||||
delta = self.point.sub(last)
|
||||
delta = FreeCAD.Vector(delta.x,delta.y,1)
|
||||
if self.ui.isCopy.isChecked() or hasMod(arg,MODALT):
|
||||
self.scale(delta,True)
|
||||
else:
|
||||
self.scale(delta)
|
||||
if hasMod(arg,MODALT):
|
||||
self.extendedCopy = True
|
||||
else:
|
||||
self.finish(cont=True)
|
||||
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 valid x, y, and z have been entered there"
|
||||
"this function gets called by the toolbar when a valid base point has been entered"
|
||||
self.point = Vector(numx,numy,numz)
|
||||
if not self.node:
|
||||
self.node.append(self.point)
|
||||
self.ui.isRelative.show()
|
||||
self.ui.isCopy.show()
|
||||
if self.ghost:
|
||||
self.ghost.on()
|
||||
msg(translate("draft", "Pick scale factor:\n"))
|
||||
else:
|
||||
last = self.node[-1]
|
||||
if self.ui.isCopy.isChecked():
|
||||
self.scale(self.point.sub(last),True)
|
||||
else:
|
||||
self.scale(self.point.sub(last))
|
||||
self.finish(cont=True)
|
||||
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()
|
||||
|
||||
|
||||
class ToggleConstructionMode():
|
||||
|
||||
Reference in New Issue
Block a user