Draft: New UI for the Scale tool

This commit is contained in:
Yorik van Havre
2017-08-25 16:40:49 -03:00
parent 648468a7d6
commit 353e9a6228
3 changed files with 142 additions and 73 deletions

View File

@@ -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():