mlampert wrote: ↑Mon Mar 11, 2019 7:55 pm
Personally I would very much appreciate a starting point implementation - I would use that a lot
For the Operation startpoint only how about something like this?
For startpoints on the toolpath just run as is.
If you want a startpoint outside the solid set your stock appearance to either: Flat Lines, or Shaded
Updated: 19 March
added FixedZ (Fixes Z at 0)
Added ExtraHeight (Add's extra Z height)
Added Automatic selection when not LockedToToolPath (First click Path then click startpoint)
Added Done() to end selection when in loop
Code: Select all
view=Gui.activeDocument().activeView()
doc = Gui.ActiveDocument.Document.Name
LockedToToolPath = True
LoopSelection = True
FixedZ = False
ExtraHeight = 0
if (LockedToToolPath == True):
FreeCAD.Console.PrintMessage("\nSelect Startpoint: \n")
else:
FreeCAD.Console.PrintMessage("\nSelect Operation: \n")
def BaseOp(PreSelection):
if('Dressup' in (PreSelection.ObjectName) and hasattr( (PreSelection.Object.Base), 'Base')):
# if('Dressup' in (PreSelection.ObjectName)):
if('Dressup' in ( PreSelection.Object.Base.Name) ):#Double Dressup
if('Dressup' in ( PreSelection.Object.Base.Base.Name) ):#Triple Dressup
return PreSelection.Object.Base.Base.Base.Name#Triple Dressup
return PreSelection.Object.Base.Base.Name#Double Dressup
else:
return PreSelection.Object.Base.Name#Single Dressup
else:
return PreSelection.ObjectName#No Dressup
def setLocked(ObjectName, PickedPoints):
FreeCAD.getDocument(doc).getObject(ObjectName).UseStartPoint = True
FreeCAD.getDocument(doc).getObject(ObjectName).StartPoint = (PickedPoints[0], PickedPoints[1],((PickedPoints[2]+ExtraHeight)* (not FixedZ))+( ExtraHeight* FixedZ))
App.activeDocument().recompute()
FreeCAD.Console.PrintMessage(" \nSet Startpoint for: ")
FreeCAD.Console.PrintMessage(ObjectName)
FreeCAD.Console.PrintMessage(("At: X ",PickedPoints[0],"Y",PickedPoints[1],"Z",((PickedPoints[2]+ExtraHeight)* (not FixedZ))+( ExtraHeight* FixedZ)))
FreeCAD.Console.PrintMessage(" \n ")
if(LoopSelection == False):
view.removeEventCallback("SoMouseButtonEvent",c)
def setUnLocked(ObjectName, PickedPoints):
if(hasattr (FreeCAD.getDocument(doc).getObject(ObjectName), 'UseStartPoint')):
FreeCAD.getDocument(doc).getObject(ObjectName).UseStartPoint = True
FreeCAD.getDocument(doc).getObject(ObjectName).StartPoint = (PickedPoints[0], PickedPoints[1],((PickedPoints[2]+ExtraHeight)* (not FixedZ))+( ExtraHeight* FixedZ))
App.activeDocument().recompute()
FreeCAD.Console.PrintMessage(" \nSet UnLocked Startpoint for:")
FreeCAD.Console.PrintMessage(ObjectName)
FreeCAD.Console.PrintMessage(("At: X ",PickedPoints[0],"Y",PickedPoints[1],"Z",((PickedPoints[2]+ExtraHeight)* (not FixedZ))+( ExtraHeight* FixedZ)))
FreeCAD.Console.PrintMessage(" \n ")
if(LoopSelection == False):
view.removeEventCallback("SoMouseButtonEvent",c)
def Done():
view.removeEventCallback("SoMouseButtonEvent",c)
FreeCAD.Console.PrintMessage("\nDone Setting startpoints\n")
class ViewObserver():
def getClicked(self, info):
down = (info["State"] == "DOWN")
PreSelection = Gui.Selection.getPreselection()
ObjectName = BaseOp(PreSelection)
PickedPoints = PreSelection.PickedPoints[0]
if (down):
if ( hasattr (FreeCAD.getDocument(doc).getObject(ObjectName), 'UseStartPoint') ):
if (LockedToToolPath == True):
setLocked(ObjectName, PickedPoints)
else:
if (LockedToToolPath == False):
setUnLocked(Gui.Selection.getSelection().__getitem__(0).Name, PickedPoints)
else:
FreeCAD.Console.PrintMessage(" \n")
FreeCAD.Console.PrintMessage(ObjectName)
FreeCAD.Console.PrintMessage(" Has no atribute: UseStartPoint\n")
o = ViewObserver()
c = view.addEventCallback("SoMouseButtonEvent",o.getClicked)
LockedToToolPath = False
LoopSelection = True
FixedZ = False
ExtraHeight = 0