# -*- coding: utf-8 -*- #------------------------------------------------- #-- freecad wrapper for pyflow #-- #-- microelly 2019 #-- #-- GNU Lesser General Public License (LGPL) #------------------------------------------------- import os import sys import json os.environ["QT_PREFERRED_BINDING"] = os.pathsep.join([ "PyQt4"]) import Qt from PyFlow.Core.Common import * from PyFlow import CreateRawPin from nodeeditor.say import * import FreeCAD,FreeCADGui from Qt import QtCore from Qt import QtGui from Qt.QtWidgets import * import nodeeditor.PyFlowGraph from nodeeditor.PyFlowGraph import PyFlowGraph, Blinker, Receiver from PyFlow import( INITIALIZE, GET_PACKAGES ) from PyFlow.Core import( GraphBase, PinBase, NodeBase, GraphManager ) import sys if sys.version_info[0] !=2: from importlib import reload import nodeeditor.pfwrap as pfwrap reload (pfwrap) def unloadmodules(): ''' prepare some modules for reload''' try: FreeCAd.t.hide() except: pass if 10: sms=sys.modules.keys() for m in sms: if m.startswith('PyFlow'): print(m) del(sys.modules[m]) return def QtEnvironment(): ''' test Qt environment''' say("Qt is " +str(Qt)) say(["Flags in Qt: PyQt4",Qt.IsPyQt4,"PySide",Qt.IsPySide]) def refresh_gui(): store=saveGraph(False) # say(store) loadGraph(store) return sayl("REFRESH---------") hidePyFlow() # tempd=pfwrap.getInstance().getTempDirectory() instance=pfwrap.getInstance() saveData = instance.graphManager.get().serialize() gg=pfwrap.getGraphManager().getAllGraphs()[0] say(gg) #geaendert # saveData = pfwrap.getGraphManager().serialize() # saveData = pfwrap.getGraphManager().serialize() # json.dump(saveData, f, indent=4) #saveData = gg.serialize() sayl("naCH SE") import tempfile f = tempfile.NamedTemporaryFile(delete=False) fpath= f.name say("HUEW") say(saveData) say(f) say("---------------") json.dump(saveData, f, indent=4) f.close() say("fname",fpath) sayl("CCC") with open(fpath, 'r') as f: data = json.load(f) FreeCAD.data=data pfwrap.getInstance().loadFromData(data, fpath) sayl("huhu") pfwrap.getInstance().show() clearLogger() FreeCADGui.activeDocument().activeView().viewIsometric() FreeCADGui.SendMsgToActiveView("ViewFit") def VectorRotationPlacement(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] makeInt=pfwrap.createFunction('PyFlowBase',"DefaultLib","makeInt") makeInt.setData('i', 5) addNode2 = pfwrap.createFunction('PyFlowBase',"MathAbstractLib","add") printNode = pfwrap.createNode('PyFlowBase',"consoleOutput","printer") gg.addNode(makeInt) gg.addNode(addNode2) gg.addNode(printNode) makeInt.setPosition(-200,-150) addNode2.setPosition(-150,-70) printNode.setPosition(200,-100) # freecad nodes erstellen fa=pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecAdd") gg.addNode(fa) fa.setPosition(100,0) fa.setData('a', FreeCAD.Vector(1,2,3)) fb = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecAdd") gg.addNode(fb) fb.setPosition(-100,0) fb.setData('a', FreeCAD.Vector(1,2,3)) fb.setData('b', FreeCAD.Vector(-3,-5,-6)) connection = pfwrap.connect(fa,'out',printNode,'entity') connection = pfwrap.connect(fb,'out',fa,'b') ra=pfwrap.createFunction('PyFlowFreeCAD',"Rotation","rotMultiply") gg.addNode(ra) ra.setPosition(-300,100) pa=pfwrap.createFunction('PyFlowFreeCAD',"Placement","pmMultiply") pa.setPosition(-200,100) gg.addNode(pa) pc=pfwrap.createFunction('PyFlowFreeCAD',"Placement","pmCreate") pc.setPosition(-100,100) gg.addNode(pc) box=FreeCAD.ActiveDocument.addObject("Part::Box","Box") box2=FreeCAD.ActiveDocument.addObject("Part::Box","Box") fp = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Placement","Placer") fp.setData('objectname', 'Box') gg.addNode(fp) fp.setPosition(350,100) tim = pfwrap.createNode('PyFlowBase',"timer","MyTimer") tim.setPosition(200,-200) gg.addNode(tim) seq = pfwrap.createNode('PyFlowBase',"sequence","MySeq") gg.addNode(seq) seq.setPosition(-450,-50) connection = pfwrap.connect(tim,'OUT',fp,'inExec') connection = pfwrap.connect(fa,'out', fp,'Placement_Base') def PlacerFreeCAD_ObjectandArraypins(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] box=FreeCAD.ActiveDocument.addObject("Part::Box","Box") box2=FreeCAD.ActiveDocument.addObject("Part::Cone","Cone") sphere=FreeCAD.ActiveDocument.addObject("Part::Sphere","Sphere") printNode = pfwrap.createNode('PyFlowBase',"consoleOutput","printer") printNode.setPosition(500,-0) gg.addNode(printNode) fp = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Placement","Placer") fp.setData('objectname', 'Box') fp.setPosition(-100,-100) gg.addNode(fp) fpo = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Object","FCobj") fpo.setData('objectname', 'Box') fpo.setPosition(100,-100) gg.addNode(fpo) fpo2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Object","FCobj__________2") fpo2.setData('objectname', 'Box001') fpo2.setPosition(300,-100) gg.addNode(fpo2) #connection = pfwrap.connect(fpo,'Object', fpo2,'ObjectA') #connection = pfwrap.connect(fpo,'Shape_out', fpo2,'Shape_in') connection = pfwrap.connect(fpo,'outExec', fpo2,'inExec') connection = pfwrap.connect(fpo,'Array_out', fpo2,'Array_in') connection = pfwrap.connect(fpo2,'outExec', printNode,'inExec') connection = pfwrap.connect(fpo2,'Object', printNode,'entity') showPyFlow() a=pfwrap.getGraphManager() gg=a.getAllGraphs()[0] fb = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") gg.addNode(fb) fb.setPosition(-300,0) fb.setData('X', 1) fb.setData('Y', 2) ri = pfwrap.createFunction('PyFlowBase',"RandomLib","randint") gg.addNode(ri) tim = pfwrap.createNode('PyFlowBase',"timer","MyTimer") tim.setPosition(200,-200) gg.addNode(tim) connection = pfwrap.connect(ri,'Result', fb,'Z') connection = pfwrap.connect(fb,'out', fp,'Placement_Base') connection = pfwrap.connect(tim,'OUT', fp,'inExec') def FusionoftwoToynodes(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Toy","Toy") t.setPosition(-200,-200) gg.addNode(t) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Toy","Toy2") t2.setPosition(-200,00) gg.addNode(t2) tf = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Boolean","Boolean") tf.setPosition(100,-200) gg.addNode(tf) connection = pfwrap.connect(t,'Part', tf,'Part_in1') connection = pfwrap.connect(t2,'Part', tf,'Part_in2') connection = pfwrap.connect(t,'outExec', tf,'inExec') connection = pfwrap.connect(t2,'outExec', tf,'inExec') connection = pfwrap.chainExec(t,tf) tim = pfwrap.createNode('PyFlowBase',"timer","MyTimer") tim.setPosition(-500,-200) gg.addNode(tim) s = pfwrap.createNode('PyFlowBase',"sequence","MySequence") s.setPosition(-400,-00) gg.addNode(s) s.createOutputPin() s.createOutputPin() connection = pfwrap.connect(tim,'OUT', s,'inExec') connection = pfwrap.connect(s,'1', t,'inExec') #connection = pfwrap.connect(s,'2', t2,'inExec') def ConeTorusBoxandImagenode(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] FreeCAD.ActiveDocument.addObject("Part::Cone","Cone") FreeCAD.ActiveDocument.addObject("Part::Torus","Torus") FreeCAD.ActiveDocument.addObject("Part::Box","Box") t = pfwrap.createNode('PyFlowBase',"imageDisplay","ImageXX") t.setPosition(-100,-200) t.entity.setData('/home/thomas/Bilder/freeka.png') t.compute() #t.setData("shapeOnly",True) gg.addNode(t) refresh_gui() def arrayofarrayforsurface(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] v1 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") gg.addNode(v1) v2 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v2.setData('X', 10) v2.setData('Y', 0) gg.addNode(v2) v3 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v3.setData('X', 0) v3.setData('Y', 10) gg.addNode(v3) v4 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v4.setData('X', 10) v4.setData('Y', 10) gg.addNode(v4) ar = pfwrap.createNode('PyFlowBase',"makeArray","VecArray") gg.addNode(ar) connection = pfwrap.connect(v1,'out',ar,'data') connection = pfwrap.connect(v2,'out',ar,'data') ar2 = pfwrap.createNode('PyFlowBase',"makeArray","VecArray") gg.addNode(ar2) connection = pfwrap.connect(v3,'out',ar2,'data') connection = pfwrap.connect(v4,'out',ar2,'data') ar3 = pfwrap.createNode('PyFlowBase',"makeArray","VecArray") gg.addNode(ar3) ar3.setData('preserveLists',True) connection = pfwrap.connect(ar,'out',ar3,'data') connection = pfwrap.connect(ar2,'out',ar3,'data') t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_BSpline","aBSplineSurface") t2.setPosition(-300,-150) gg.addNode(t2) connection = pfwrap.connect(ar3,'out',t2,'poles') refresh_gui() def createaVectorArraytoplay(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] ta = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_VectorArray","aVectorArray") ta.setPosition(-200,00) gg.addNode(ta) t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Console","Console") t.setPosition(00,00) #t.setData("shapeOnly",True) gg.addNode(t) connection = pfwrap.connect(ta,'out',t,'entity') tim = pfwrap.createNode('PyFlowBase',"timer","MyTimer") tim.setPosition(-300,-100) gg.addNode(tim) connection = pfwrap.connect(tim,'OUT', ta,'inExec') refresh_gui() def playwithFreeCAD_Array(): '''test numpy array flow''' clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Object","PPP") t2.setPosition(-00,-150) gg.addNode(t2) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Array","AAA") t2.setPosition(-300,-150) gg.addNode(t2) t3 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Array","BBB") t3.setPosition(-100,0) gg.addNode(t3) t4 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Array","CCC") t4.setPosition(100,150) gg.addNode(t4) connection = pfwrap.connect(t2,'Array_out', t3,'Array_in') connection = pfwrap.chainExec(t2,t3) connection = pfwrap.connect(t3,'Array_out', t4,'Array_in') connection = pfwrap.chainExec(t3,t4) t2.compute() refresh_gui() def PolygonandPolygon2(): '''test point listnumpy array flow''' instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] t3 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Polygon","MyPolygon") t3.setPosition(-200,0) gg.addNode(t3) t3.compute() t3 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Polygon2","MyPolygon2") gg.addNode(t3) t3.compute() def PartExplorerSubshapeIndexandPlot(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Box","MyBox") t2.setPosition(-200,0) gg.addNode(t2) t3 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_PartExplorer","MyPartExplorer") t3.setPosition(00,0) gg.addNode(t3) t2.compute() t3.compute() connection = pfwrap.connect(t2,'Part', t3,'Part_in') t4 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_ShapeIndex","MyIndex") #t4.setData("shapeOnly",True) t4.setPosition(200,0) gg.addNode(t4) t4 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Plot","MyPlot") t4.setPosition(00,-200) #gg.addNode(t4) t2.compute() t3.compute() t4.compute() t5 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Compound","MyCompound") t5.setPosition(-200,-200) gg.addNode(t5) refresh_gui() def createPolygonFromCoordinateListswithnumpy(): ''' create Polygon from CoordinateLists with numpy create 3 random lists zip them to a vector list create a polygon ''' instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] makeInt=pfwrap.createFunction('PyFlowBase',"DefaultLib","makeInt") makeInt.setData('i', 50) gg.addNode(makeInt) v = pfwrap.createFunction('PyFlowFreeCAD',"Numpy","zip") gg.addNode(v) v1 = pfwrap.createFunction('PyFlowFreeCAD',"Numpy","randomList") gg.addNode(v1) connection = pfwrap.connect(v1,'out', v,'x') connection = pfwrap.connect(makeInt,'out', v1,'size') v1 = pfwrap.createFunction('PyFlowFreeCAD',"Numpy","randomList") gg.addNode(v1) connection = pfwrap.connect(v1,'out', v,'y') connection = pfwrap.connect(makeInt,'out', v1,'size') v1 = pfwrap.createFunction('PyFlowFreeCAD',"Numpy","randomList") gg.addNode(v1) connection = pfwrap.connect(v1,'out', v,'z') connection = pfwrap.connect(makeInt,'out', v1,'size') t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Console","Console") t.setPosition(-200,200) gg.addNode(t) # connection = pfwrap.connect(v,'out', t,'entity') t.compute() t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Polygon2","Polygon") gg.addNode(t) connection = pfwrap.connect(v,'out', t,'points') refresh_gui() def drawadoublesinuscurve(): ''' x=a*sin(b*z+c) y=a'*sin(b'*z+c') ''' instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] makeInt=pfwrap.createFunction('PyFlowBase',"DefaultLib","makeInt") makeInt.setData('i', 50) gg.addNode(makeInt) v = pfwrap.createFunction('PyFlowFreeCAD',"Vector","zip") gg.addNode(v) v1 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","linSpace") gg.addNode(v1) connection = pfwrap.connect(v1,'out', v,'z') connection = pfwrap.connect(makeInt,'out', v1,'num') v1 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","linSpace") gg.addNode(v1) # connection = pfwrap.connect(v1,'out', v,'y') connection = pfwrap.connect(makeInt,'out', v1,'num') s = pfwrap.createFunction('PyFlowFreeCAD',"Vector","sin") gg.addNode(s) connection = pfwrap.connect(v1,'out', s,'data') connection = pfwrap.connect(s,'out', v,'y') s.setData("b",5) v1 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","linSpace") gg.addNode(v1) #connection = pfwrap.connect(v1,'out', v,'x') connection = pfwrap.connect(makeInt,'out', v1,'num') s = pfwrap.createFunction('PyFlowFreeCAD',"Vector","sin") gg.addNode(s) connection = pfwrap.connect(v1,'out', s,'data') connection = pfwrap.connect(s,'out', v,'x') t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Console","Console") t.setPosition(-200,200) gg.addNode(t) t.compute() t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Polygon2","Polygon") gg.addNode(t) connection = pfwrap.connect(v,'out', t,'points') refresh_gui() def reset(): '''file laden und graph anzeigen testcase''' if 'aa' not in FreeCAD.listDocuments().keys(): FreeCAD.open(u"/home/thomas/aa.FCStd") FreeCAD.setActiveDocument("aa") try: pfwrap.deleteInstance() del(FreeCAD.PF) except: pass instance=pfwrap.getInstance() clearGraph() loadGraph() class MyDockWidget(QDockWidget): def __init__(self, title_widget, objectname): QDockWidget.__init__(self) self.title_widget = title_widget self.setWindowTitle(objectname) self.setObjectName(objectname) if 1: self.setTitleBarWidget(None) else: self.setTitleBarWidget(self.title_widget) self.setMinimumSize(200, 185) self.centralWidget = QWidget(self) self.setWidget(self.centralWidget) l=QVBoxLayout() self.layout = l self.centralWidget.setLayout(l) #a=QGraphicsView() #l.addWidget(a) if 1: buttons=QWidget() bl = QHBoxLayout() buttons.setLayout(bl) pB = QPushButton(QtGui.QIcon('icons:freecad.svg'), 'load File A') bl.addWidget(pB) # pB.clicked.connect(self.loadA) pB = QPushButton(QtGui.QIcon('icons:freecad.svg'), 'refresh') bl.addWidget(pB) # pB.clicked.connect(self.refresh) for i in range(3): pB = QPushButton(QtGui.QIcon('icons:freecad.svg'), 'F'+str(i)) bl.addWidget(pB) # pB.clicked.connect(self.save) pB = QPushButton(QtGui.QIcon('icons:freecad.svg'), 'load dialog') bl.addWidget(pB) # pB.clicked.connect(self.load) pB = QPushButton(QtGui.QIcon('icons:freecad.svg'), 'Properties Tool') bl.addWidget(pB) # pB.clicked.connect(createPropTool) l.addWidget(buttons) # geht nicht, weil FreeCAD PYside ist und es crash gibt #w = FreeCADGui.getMainWindow() w=pfwrap.getInstance() w.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self) l.addWidget(pfwrap.getInstance().canvasWidget) a=QPushButton("Bottom Button 1") l.addWidget(a) d=QPushButton("Bottom Button 2") l.addWidget(d) def PyFlowtoDockWidget(): # erzeugen PyFlow Fenster # test_AA() # erzeuge eigenes Fesnter und uebernehme die Daten a=MyDockWidget(None, "objectname") a.show() FreeCAD.a=a def save_and_load_json_file_test(): pfwrap.getInstance().load('/home/thomas/Schreibtisch/aa2.json') pfwrap.getInstance().save(False,'/home/thomas/Schreibtisch/aa2.json') def shutdown(): '''fast stop of freecad test environ''' try: FreeCAD.closeDocument("Unnamed") except: pass try: FreeCAD.closeDocument("graph") except: pass FreeCADGui.runCommand("Std_Quit") def hidePyFlow(): pfwrap.deleteInstance() def showPyFlow(): try: pfwrap.getInstance().hide() except: pass pfwrap.getInstance().show() def thinoutGraph(): '''test clean up graph: delete half of the nodes''' instance=pfwrap.getInstance() gg=instance.graphManager.get().getAllGraphs()[0] for i,n in enumerate(gg.getNodes()): if i%2==0: n.kill() def clearGraph(): instance=pfwrap.getInstance() instance.graphManager.get().clear(keepRoot=False) def clearGraph(): # bugfix clear geht nicht mit fc #+# for node in pfwrap.getInstance().graphManager.get().getAllNodes(): node.kill() pfwrap.deleteInstance() del(FreeCAD.PF) def loadGraph(store=None): showPyFlow() instance=pfwrap.getInstance() instance.graphManager.get().clear() if store is None: a=PyFlowGraph() # a=FreeCAD.Gui.Selection.getSelection()[0] data=eval(a.graph) instance.loadFromData(data) else: data=store instance.loadFromData(data) for n in FreeCAD.PF.graphManager.get().getAllNodes(): yid="ID_"+str(n.uid) yid=yid.replace('-','_') a=FreeCAD.ActiveDocument.getObject(yid) if a != None: FreeCAD.ActiveDocument.removeObject(yid) n._preview = True def saveGraph(storage = True): instance=pfwrap.getInstance() saveData = instance.graphManager.get().serialize() if storage: a=PyFlowGraph() a.graph=str(saveData) return None else: return saveData def loadFile(): hidePyFlow() if 'graph' not in FreeCAD.listDocuments().keys(): FreeCAD.open(u"/home/thomas/graph.FCStd") FreeCAD.setActiveDocument("graph") clearGraph() loadGraph() def clearLogger(): '''logger clear''' instance=pfwrap.getInstance() for t in instance._tools: if t.name() == 'Logger': say(t) t.clearView() t.hide() class ViewProvider: def __init__(self, obj): obj.Proxy = self def createObjectWithAllProperties(): obj=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","allProps") for p in obj.supportedProperties(): pn=str(p).replace('Part::Property','a') pn=str(p).replace('App::Property','a') obj.addProperty(p,pn) print ("obj.addProperty('{}','{}')".format(p,pn)) ViewProvider(obj.ViewObject) instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Object","allProps") t.setPosition(-100,-200) #t.setData("shapeOnly",True) gg.addNode(t) t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Console","Console") t.setPosition(-200,200) #t.setData("shapeOnly",True) gg.addNode(t) fb = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") gg.addNode(fb) fb.setPosition(-300,0) fb.setData('X', 1) fb.setData('Y', 2) fb2 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") gg.addNode(fb2) arr = pfwrap.createNode('PyFlowBase',"makeArray","VecArray") gg.addNode(arr) connection = pfwrap.connect(fb,'out',arr,'data') connection = pfwrap.connect(fb2,'out',arr,'data') connection = pfwrap.connect(arr,'out',t,'entity') pol = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Polygon2","Polygon") gg.addNode(pol) refresh_gui() def crossbeamexample(): ''' # see https://forum.freecadweb.org/viewtopic.php?f=8&t=37817 ''' instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Console","Console") t.setPosition(-200,200) #t.setData("shapeOnly",True) gg.addNode(t) # 1.rib v = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v.setPosition(400,0) gg.addNode(v) v2= pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v2.setData('Y', 20) v2.setPosition(400,100*2) gg.addNode(v2) v3 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v3.setData('Y', 50) v3.setPosition(400,200*2) gg.addNode(v3) ar = pfwrap.createNode('PyFlowBase',"makeArray","VecArray_rib_1") gg.addNode(ar) connection = pfwrap.connect(v,'out',ar,'data') connection = pfwrap.connect(v2,'out',ar,'data') connection = pfwrap.connect(v3,'out',ar,'data') t3 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Polygon2","Rib_1") gg.addNode(t3) t3.setPosition(1700,-200) connection = pfwrap.connect(ar,'out',t3,'points') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(510,25*2) j.setData('m',1) gg.addNode(j) connection = pfwrap.connect(v,'out',j,'a') connection = pfwrap.connect(v2,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(520,75*2) j.setData('m',9) gg.addNode(j) connection = pfwrap.connect(v,'out',j,'a') connection = pfwrap.connect(v2,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(510,125*2) j.setData('m',1) gg.addNode(j) connection = pfwrap.connect(v2,'out',j,'a') connection = pfwrap.connect(v3,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(520,175*2) j.setData('m',9) gg.addNode(j) connection = pfwrap.connect(v2,'out',j,'a') connection = pfwrap.connect(v3,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') rib1=ar t3.compute() # 2.rib v = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v.setData('X', 20) v.setData('Z', 20) v.setPosition(600,0) gg.addNode(v) v2= pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v2.setData('X', 40) v2.setData('Y', 20) v2.setData('Z', 40) v2.setPosition(600,100*2) gg.addNode(v2) v3 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v3.setData('X', 40) v3.setData('Y', 50) v3.setData('Z', 40) v3.setPosition(600,200*2) gg.addNode(v3) ar = pfwrap.createNode('PyFlowBase',"makeArray","VecArray_rib_4") gg.addNode(ar) connection = pfwrap.connect(v,'out',ar,'data') connection = pfwrap.connect(v2,'out',ar,'data') connection = pfwrap.connect(v3,'out',ar,'data') t3 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Polygon2","Rib_4") gg.addNode(t3) t3.setPosition(1700,0) connection = pfwrap.connect(ar,'out',t3,'points') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(710,25*2) j.setData('m',1) gg.addNode(j) connection = pfwrap.connect(v,'out',j,'a') connection = pfwrap.connect(v2,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(720,75*2) j.setData('m',9) gg.addNode(j) connection = pfwrap.connect(v,'out',j,'a') connection = pfwrap.connect(v2,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(720,125*2) j.setData('m',1) gg.addNode(j) connection = pfwrap.connect(v2,'out',j,'a') connection = pfwrap.connect(v3,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(710,175*2) j.setData('m',9) gg.addNode(j) connection = pfwrap.connect(v2,'out',j,'a') connection = pfwrap.connect(v3,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') t3.compute() rib4=ar # 7.rib v = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v.setData('X', 140) v.setData('Z', 20) v.setPosition(800,0) gg.addNode(v) v2= pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v2.setData('X', 140) v2.setData('Y', 20) v2.setData('Z', 40) v2.setPosition(800,100*2) gg.addNode(v2) v3 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","vecCreate") v3.setData('X', 140) v3.setData('Y', 50) v3.setData('Z', 40) v3.setPosition(800,200*2) gg.addNode(v3) ar = pfwrap.createNode('PyFlowBase',"makeArray","VecArray_rib_7") gg.addNode(ar) connection = pfwrap.connect(v,'out',ar,'data') connection = pfwrap.connect(v2,'out',ar,'data') connection = pfwrap.connect(v3,'out',ar,'data') t3 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Polygon2","Rib_7") t3.setPosition(1700,400) gg.addNode(t3) connection = pfwrap.connect(ar,'out',t3,'points') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(920,25*2) j.setData('m',1) gg.addNode(j) connection = pfwrap.connect(v,'out',j,'a') connection = pfwrap.connect(v2,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(910,75*2) j.setData('m',9) gg.addNode(j) connection = pfwrap.connect(v,'out',j,'a') connection = pfwrap.connect(v2,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(920,125*2) j.setData('m',1) gg.addNode(j) connection = pfwrap.connect(v2,'out',j,'a') connection = pfwrap.connect(v3,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') j = pfwrap.createFunction('PyFlowFreeCAD',"Vector","between") j.setPosition(910,175*2) j.setData('m',9) gg.addNode(j) connection = pfwrap.connect(v2,'out',j,'a') connection = pfwrap.connect(v3,'out',j,'b') connection = pfwrap.connect(j,'out',ar,'data') t3.compute() rib7=ar arf = pfwrap.createNode('PyFlowBase',"makeArray","RibArray") arf.setPosition(1800,250) arf.setData('preserveLists',True) gg.addNode(arf) rib1.setPosition(1200,10*5) rib4.setPosition(1200,40*5) rib7.setPosition(1200,70*5) connection = pfwrap.connect(rib1,'out',arf,'data') connection = pfwrap.connect(rib4,'out',arf,'data') connection = pfwrap.connect(rib7,'out',arf,'data') rib2 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","betweenList") rib2.setPosition(1400,20*5) rib2.setData('m',1) gg.addNode(rib2) connection = pfwrap.connect(rib1,'out',rib2,'a') connection = pfwrap.connect(rib4,'out',rib2,'b') connection = pfwrap.connect(rib2,'out',arf,'data') rib3 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","betweenList") rib3.setPosition(1500,30*5) rib3.setData('m',9) gg.addNode(rib3) connection = pfwrap.connect(rib1,'out',rib3,'a') connection = pfwrap.connect(rib4,'out',rib3,'b') connection = pfwrap.connect(rib3,'out',arf,'data') rib5 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","betweenList") rib5.setPosition(1400,50*5) rib5.setData('m',1) gg.addNode(rib5) connection = pfwrap.connect(rib4,'out',rib5,'a') connection = pfwrap.connect(rib7,'out',rib5,'b') connection = pfwrap.connect(rib5,'out',arf,'data') rib6 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","betweenList") rib6.setPosition(1500,60*5) rib6.setData('m',9) gg.addNode(rib6) connection = pfwrap.connect(rib4,'out',rib6,'a') connection = pfwrap.connect(rib7,'out',rib6,'b') connection = pfwrap.connect(rib6,'out',arf,'data') bs = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_BSpline","aBSplineSurface") gg.addNode(bs) bs.setPosition(2000,250) connection = pfwrap.connect(arf,'out',bs,'poles') bs.compute() refresh_gui() #--------------------------------------------------- # the 4 main icons for new ideas #-------------------------------------------------------- # some methods for fast testing T1,T2,T3 fn='bb' fn='project' fn='compb' def loadAll(): showPyFlow() try: FreeCAD.getDocument(fn) except: FreeCAD.open(u"/home/thomas/{}.FCStd".format(fn)) FreeCAD.setActiveDocument(fn) FreeCAD.ActiveDocument=FreeCAD.getDocument(fn) FreeCADGui.ActiveDocument=FreeCADGui.getDocument(fn) loadGraph() pass def saveAll(): saveGraph() FreeCAD.ActiveDocument.saveAs(u"/home/thomas/{}.FCStd".format(fn)) pass def view3DExample(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] tim = pfwrap.createNode('PyFlowBase',"timer","MyTimer") tim.setPosition(200,-200) gg.addNode(tim) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Box","MyBox") t2.setPosition(-200,-100) t2.setData("shapeOnly",True) t2.compute() gg.addNode(t2) rib = pfwrap.createFunction('PyFlowFreeCAD',"Vector","workspace") rib.setPosition(-100,0) gg.addNode(rib) rib5 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","view3D") rib5.setPosition(100,0) gg.addNode(rib5) connection = pfwrap.connect(t2,'Shape',rib5,'Shape') pfwrap.chainExec(t2,rib5) connection = pfwrap.connect(rib,'out',rib5,'Workspace') refresh_gui() pass def createAllNodesforTests(): FreeCAD.ActiveDocument.addObject("Part::Cone","Cone") FreeCAD.ActiveDocument.addObject("Part::Box","Box") FreeCADGui.Selection.clearSelection() FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face1']) FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face2']) instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] # erzeuge für alle Nodes ein Objekt und lasse es laufen compute() nn=[] nodelistcol=[] if 1: from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Coin import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Combination import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Conversion import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Development import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_File import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Geom2D import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_HighLevel import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Image import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Information import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Lambda import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Logic import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Nurbs import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Object import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Placement import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Primitive import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Projection import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Sensor import nodelist nodelistcol += nodelist() from PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Signal import nodelist nodelistcol += nodelist() x0=-300 x=x0 y=-400 nodes={} for i,n in enumerate(nodelistcol): #if i>13:break FreeCADGui.updateGui() name=n.__name__ if name=="FreeCAD_Tread": say("ignore", name) continue # if i>170 or i<70: continue say("-----------",i, n.__name__) node=pfwrap.createNode('PyFlowFreeCAD',name,name) node.setPosition(x,y) gg.addNode(node) nodes[name] =node x+=200 if x>= 2400: x=x0 y+= 300 refresh_gui() say("number of nodes",len(nn)) return nodes def runTestforAllNodes(): #FreeCAD.nodes=createAllNodesforTest() instance=pfwrap.getInstance() FreeCAD.gg=pfwrap.getGraphManager().getAllGraphs()[0] nodes=FreeCAD.gg.getNodesList() errors=[] for i,node in enumerate(nodes): # 15,16,17, machr rekursive call #ä#+# #if i not in [15,16,17]: continue #if i not in [16]: continue if node.name in ['FreeCAD_topo']:continue try: say(node) node.compute() except: sayexc(str(node)) errors += [str(node)] sayl("done") for e in errors: say(e) say("ERRORS:",len(errors)) def view3DRefandLOD(): FreeCAD.ActiveDocument.addObject("Part::Cone","Cone") FreeCAD.ActiveDocument.addObject("Part::Box","Box") FreeCAD.activeDocument().recompute() FreeCADGui.Selection.clearSelection() if 10: FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face1']) FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face2']) FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face3']) FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face4']) else: FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Cone,['Face1']) instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] rib5 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_view3D","view3D") rib5.setPosition(100,0) gg.addNode(rib5) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Ref","Ref_Box",b="das ist B") t2.compute() gg.addNode(t2) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_LOD","myLOD") rib5.setPosition(100,200) t2.compute() gg.addNode(t2) #connection = pfwrap.connect(t2,'Shape',rib5,'Shape') refresh_gui() def LODDemo(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] if 0: FreeCAD.ActiveDocument.addObject("Part::Cone","Cone") FreeCAD.ActiveDocument.addObject("Part::Box","Box") FreeCAD.ActiveDocument.addObject("Part::Sphere","Sphere") FreeCAD.activeDocument().recompute() FreeCADGui.Selection.clearSelection() FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face1']) FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face2']) FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face3']) FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,['Face4']) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Ref","Ref") t2.compute() gg.addNode(t2) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Box","MyBox") t2.setPosition(-200,0) t2.setData("shapeOnly",True) gg.addNode(t2) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Sphere","MySphere") t2.setPosition(-200,0) t2.setData("shapeOnly",True) gg.addNode(t2) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Cone","MyCone") t2.setPosition(-200,0) t2.setData("shapeOnly",True) gg.addNode(t2) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Toy","MyToy") t2.setPosition(-200,0) #t2.setData("shapeOnly",True) gg.addNode(t2) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Boolean","Bool") t2.setPosition(-200,0) #t2.setData("shapeOnly",True) gg.addNode(t2) rib5 = pfwrap.createFunction('PyFlowFreeCAD',"Vector","view3D") rib5.setPosition(100,0) rib5.setData("Workspace","LOD_DEMO") gg.addNode(rib5) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_LOD","myLOD") t2.setPosition(100,200) t2.compute() gg.addNode(t2) connection = pfwrap.connect(t2,'Shape',rib5,'Shape') refresh_gui() def voronoi(): instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Voronoi","myLOD") t2.setPosition(100,200) t2.compute() gg.addNode(t2) refresh_gui() def VoronoiforPointcloud(): ''' create voroni data for a random list of points ''' instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] makeInt=pfwrap.createFunction('PyFlowBase',"DefaultLib","makeInt") makeInt.setData('i', 50) gg.addNode(makeInt) v = pfwrap.createFunction('PyFlowFreeCAD',"Numpy","zip") gg.addNode(v) v1 = pfwrap.createFunction('PyFlowFreeCAD',"Numpy","randomList") gg.addNode(v1) connection = pfwrap.connect(v1,'out', v,'x') connection = pfwrap.connect(makeInt,'out', v1,'size') v1 = pfwrap.createFunction('PyFlowFreeCAD',"Numpy","randomList") gg.addNode(v1) connection = pfwrap.connect(v1,'out', v,'y') connection = pfwrap.connect(makeInt,'out', v1,'size') v1 = pfwrap.createFunction('PyFlowFreeCAD',"Numpy","randomList") gg.addNode(v1) connection = pfwrap.connect(v1,'out', v,'z') connection = pfwrap.connect(makeInt,'out', v1,'size') t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Console","Console") t.setPosition(-200,200) gg.addNode(t) # connection = pfwrap.connect(v,'out', t,'entity') t.compute() t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Polygon2","Polygon") gg.addNode(t) # connection = pfwrap.connect(v,'out', t,'points') t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Voronoi","myVoronoi") t2.setPosition(100,200) #t2.compute() #gg.addNode(t2) #t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Ref","Ref") #t2.compute() #gg.addNode(t2) refresh_gui() say("fertig") def Geom2dNodes(): ''' draw a line Geom2d.LineSegment onto a surface and than a circke and an ellipse ''' instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] # preprocessing load the environment scene ... createBePlane() #create a reference node for the face1 of the beplane FreeCADGui.Selection.clearSelection() FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.BePlane,['Face1']) t2 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Ref","Ref_Box",b="das ist B") t2.compute() gg.addNode(t2) t2.setPosition(-200,0) # a linesegment on th beplane t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_2DGeometry","linesegment") t.compute() gg.addNode(t) connection = pfwrap.connect(t2,'Face1', t,'Shape') rib5 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_view3D","view") rib5.setPosition(200,0) rib5.setData("Workspace","aa") rib5.setData("name","linesegment") gg.addNode(rib5) connection = pfwrap.connect(t,'Shape_out',rib5,'Shape') pfwrap.chainExec(t,rib5) # a circle on the beplane t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_2DCircle","circle") t.compute() gg.addNode(t) connection = pfwrap.connect(t2,'Face1', t,'Shape') rib5 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_view3D","view") rib5.setPosition(200,0) rib5.setData("Workspace","aa") rib5.setData("name","circle") gg.addNode(rib5) connection = pfwrap.connect(t,'Shape_out',rib5,'Shape') pfwrap.chainExec(t,rib5) # an ellipse on the beplane t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_2DEllipse","circle") t.setPosition(-300,-200) t.compute() gg.addNode(t) connection = pfwrap.connect(t2,'Face1', t,'Shape') rib5 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_view3D","view") rib5.setPosition(200,-200) rib5.setData("Workspace","aa") rib5.setData("name","circle") gg.addNode(rib5) connection = pfwrap.connect(t,'Shape_out',rib5,'Shape') pfwrap.chainExec(t,rib5) # an arcof ellipse on the beplane t = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_2DArcOfEllipse","arc_of") t.setPosition(-300,-200) t.compute() gg.addNode(t) connection = pfwrap.connect(t2,'Face1', t,'Shape') rib5 = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_view3D","view") rib5.setPosition(200,-200) rib5.setData("Workspace","aa") rib5.setData("name","arc_of") gg.addNode(rib5) connection = pfwrap.connect(t,'Shape_out',rib5,'Shape') pfwrap.chainExec(t,rib5) # todo: hyperbel, parabel ... #+# refresh_gui() def createBePlane(): '''create an environment with a BePlane and a BeTube''' import nurbswb import nurbswb.berings rc=nurbswb.berings.createBePlane() rc.noise=4. rc=nurbswb.berings.createBeTube() rc.uSize=2000 rc.vSize=500 rc.vSegments=5 rc.noise=500 FreeCAD.activeDocument().recompute() def createsomeparts(): ''' default box,cone and sphere for testing''' box=FreeCAD.ActiveDocument.addObject("Part::Box","Box") box2=FreeCAD.ActiveDocument.addObject("Part::Cone","Cone") sphere=FreeCAD.ActiveDocument.addObject("Part::Sphere","Sphere") FreeCAD.activeDocument().recompute() def T1(): '''test method''' sayl("nix") def T2(): '''another test''' sayl("nix") def T3(): sayl("nix3") def test_AA(): PartExplorerSubshapeIndexandPlot() def test_BB(): refresh_gui() def test_CC(): refresh_gui() def test_DD(): crossbeamexample() import FreeCADGui def clearReportView(name="noname"): from PySide import QtGui mw=FreeCADGui.getMainWindow() r=mw.findChild(QtGui.QTextEdit, "Report view") r.clear() import time now = time.ctime(int(time.time())) #FreeCAD.Console.PrintWarning("Cleared Report view " +str(now)+" by " + name+"\n") def getdescription(pin): if not pin.description.endswith(' instance'): return pin.description descriptions = { 'u':'coordinate in uv space', 'v':'2nd coordinate in uv space', 'Shape_out': 'resulting shape', 'Compound_out': 'resulting shape as compound', 'Shape_in': 'reference shape', 'Face_in': 'reference face', 'Edge_in': 'reference edge', 'display': 'option to create a resulting part', 'uCount': 'number of u Iso curves', 'vCount': 'number of v Iso curves', 'randomize': 'add some random noise to the layout', } try: return descriptions[pin.name] except: return pin.description def reset(): '''refrehs graph gui''' instance=pfwrap.getInstance() data = instance.graphManager.get().serialize() instance.graphManager.get().clear() instance.loadFromData(data) from PyFlow.UI.Tool.Tool import ShelfTool, DockTool from PyFlow.UI.Tool import GET_TOOLS from PyFlow.UI.Tool import REGISTER_TOOL def displayTools(): ''' tools for pyflow''' packageName="PyFlowBase" for toolName in ["Properties","NodeBox"]: FreeCAD.PF.invokeDockToolByName(packageName, toolName, settings=None) def displayPreferencesWindow(): a=pfwrap.getInstance() say(a) a.showPreferencesWindow() def createSender(): a=Blinker() def createBlinker(): a=Blinker() def createReceiver(): a=Receiver() #------------ move_2 ------------------ 28.11.2019 def test_AA(): import FreeCAD import FreeCADGui App=FreeCAD Gui=FreeCADGui ### Begin command Std_RecentFiles try: App.closeDocument('Unnamed') except: pass App.setActiveDocument("") App.ActiveDocument=None Gui.ActiveDocument=None FreeCAD.open(u"/home/thomas/Schreibtisch/move_2.FCStd") App.setActiveDocument("move_2") App.ActiveDocument=App.getDocument("move_2") Gui.ActiveDocument=Gui.getDocument("move_2") ### End command Std_RecentFiles loadGraph() def getNodebyName(name): ''' find a node by its name ''' g=pfwrap.getGraphManager().getAllGraphs()[0] t=g.getNodesList() for n in t: print("!"+n.name+"!",name) say("hu") if name==n.name: return n def test_BB(): n=getNodebyName("FreeCAD_VectorArray") n.compute() n=getNodebyName("FreeCAD_VectorArray8") n.compute() def test_CC(): allnodes=createAllNodesforTests() def createnodewithallpins(): import PyFlow.Packages.PyFlowFreeCAD pincs=PyFlow.Packages.PyFlowFreeCAD.PyFlowFreeCAD.GetPinClasses() instance=pfwrap.getInstance() clearGraph() gg=pfwrap.getGraphManager().getAllGraphs()[0] toy = pfwrap.createNode('PyFlowFreeCAD',"FreeCAD_Toy","aToy") gg.addNode(toy) say(toy) refresh_gui() def reset(): ''' startup nach restart FreeCAD''' allnodes=createAllNodesforTests() def T1(): for n in FreeCAD.PF.graphManager.get().getAllNodes(): yid="ID_"+str(n.uid) yid=yid.replace('-','_') a=FreeCAD.ActiveDocument.getObject(yid) if a != None: FreeCAD.ActiveDocument.removeObject(yid) n._preview = True def createNewNodeDocu(): createNodeDocu(True) def T3(): #createNewNodeDocu() pass def createNodeDocu(onlyNew=False): ''' create nodes documentation for wiki ''' clearReportView() packs=pfwrap.getNodesClasses() keys=list(packs.keys()) keys.sort() for p in keys: if p == 'PyFlowBase': continue pack=packs[p] say("======"+p+"======") classNodes = pack.GetNodeClasses() cnks=list(classNodes.keys()) cnks.sort() kats={} doclevel={} for c in cnks: if c[7:] in ['PinsTest']: continue try: say("=====FC"+c[7:]+"=====") RESOURCES_DIR="/home/thomas/.FreeCAD/Mod.PyFlow/NodeEditor/PyFlowPackages/PyFlowFreeCAD/UI/icons" image=RESOURCES_DIR + "/"+ c.lower()+".svg" if os.path.exists(image): say("{{:icons_pyflow:"+c.lower()+".svg|}}") say("/*") node = classNodes[c]("nodeName") say("*/") say("[[::pyflow::categories#"+ classNodes[c].category()+"|"+ classNodes[c].category() +" ...]]") # if node.dok != 2: continue try: doclevel[node.dok] += [c] except: doclevel[node.dok] = [c] # say(c,node) # say("-----") # horiz linie #say(node.__doc__) docs=node.__doc__ for s in docs.split('\n'): say(" "+s.lstrip()) say("[[nodes::{}|More ...]]\n\n".format(c[8:])) try: say("Videos: {}".format(node.videos)) say() except: pass FreeCAD.n=node try: kats[node.category()] += [c] except: kats[node.category()] = [c] say("===INPUT PINS===") for pin in node.getOrderedPins(): if str(pin.direction) != 'PinDirection.Input': continue if pin.name in ['inExec','outExec']: continue say("**__"+pin.name+"__** ") #say(pin.direction) #say(pin.name) #say() say("[["+pin.__class__.__name__+"]]") des=getdescription(pin) if des !='': say(des) say() say("===OUTPUT PINS===") for pin in node.getOrderedPins(): if str(pin.direction) != 'PinDirection.Output': continue if pin.name in ['inExec','outExec']: continue say("**__"+pin.name+"__** ") #say(pin.direction) #say(pin.name) say("[[" + pin.__class__.__name__ + "]]") des=getdescription(pin) if des != '': say(des) say() FreeCAD.pin=pin except: sayErr("problem for ",c) # sayl("t3 done") say("======Nodes by category======") kl=list(kats.keys()) kl.sort() for k in kl: say("====={}=====".format(k)) for c in kats[k]: say("[[nodes::{}]]".format(c[8:])) say("[[nodes#fc_{}|/°/ ]]".format(c[8:])) say() say("number of nodes:"+str(len(kats[k]))) if onlyNew: say("======Nodes by doc level======") kl=list(doclevel.keys()) kl.sort() for k in kl: say("====={}=====".format(k)) for c in doclevel[k]: say("[[nodes::{}]]".format(c[8:])) say("[[nodes#fc_{}|/°/ ]]".format(c[8:])) say() say("number of nodes {}".format(len(cnks))) return # nur kategorien ab hier say("############################################") say("############################################") say("############################################") import PyFlow.Packages.PyFlowFreeCAD.Nodes for modul in [ PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Algebra, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Coin, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Combination, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Conversion, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Data, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Development, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_File, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Flow, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Geom2D, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_HighLevel, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Image, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Information, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Lambda, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Logic, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Nurbs, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Object, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Placement, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Primitive, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Projection, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Sensor, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Signal, PyFlow.Packages.PyFlowFreeCAD.Nodes.FreeCAD_Voronoi, ]: mn=modul.__name__ k=mn[44:] say("====={}=====".format(k)) say("=={}==".format(modul.__name__)) say() say(modul.__doc__) try: _=kats[k] except: sayErr("ignore",k) continue for c in kats[k]: say("[[nodes::{}]]".format(c[8:])) say("[[nodes#fc_{}|/°/ ]]".format(c[8:])) say() say("number of nodes:"+str(len(kats[k]))) FreeCAD.kats=kats def T3(): # docfun(): clearReportView() packages = GET_PACKAGES() kats={} for pn in packages: if str(pn).startswith('PyFlowBase'): continue #say("!",pn) lib = packages[pn].GetFunctionLibraries() #say(lib) for l in lib: ll = lib[l] say("======={}=======".format(ll.__class__.__name__)) for fn in ll.getFunctions(): fun=ll.getFunctions()[fn] say("====={}======".format(fun.__name__)) docs=fun.__doc__ if docs is not None: for s in docs.split('\n'): say(" "+s.lstrip()) #say("/*") node=pfwrap.createFunction(pn,l,fn) #say("*/") try: kats[node.category()] += [fn] except: kats[node.category()] = [fn] say("===INPUT PINS===") for pin in node.getOrderedPins(): if str(pin.direction) != 'PinDirection.Input': continue if pin.name in ['inExec','outExec']: continue say("**__"+pin.name+"__** ") #say(pin.direction) #say(pin.name) #say() say("[["+pin.__class__.__name__+"]], ") #des=getdescription(pin) #if des !='': # say(des) #say() say("===OUTPUT PINS===") for pin in node.getOrderedPins(): if str(pin.direction) != 'PinDirection.Output': continue if pin.name in ['inExec','outExec']: continue say("**__"+pin.name+"__** ") #say(pin.direction) #say(pin.name) say("[[" + pin.__class__.__name__ + "]], ") des=getdescription(pin) #if des != '': # say(des) #say() say("======Nodes by category======") kl=list(kats.keys()) kl.sort() nc=0 for k in kl: say("====={}=====".format(k)) for c in kats[k]: nc += 1 say("[[nodes::{}]]".format(c)) say("[[nodes#fc_{}|/°/ ]]".format(c)) say() say("!number of nodes {}".format(nc)) def getfun(fname): packages = GET_PACKAGES() kats={} for pn in packages: lib = packages[pn].GetFunctionLibraries() for l in lib: ll = lib[l] for fn in ll.getFunctions(): fun=ll.getFunctions()[fn] if fun.__name__ ==fname: return(pn,ll.__class__.__name__) return(None,None) def dumpScriptforGraph(): ''' skript zum aufsetzen graph''' nodes=FreeCAD.PF.graphManager.get().getAllNodes() say() say('#####################################') say('import nodeeditor') say('import nodeeditor.pfwrap as pfwrap') say('instance=pfwrap.getInstance()') say('gg=pfwrap.getGraphManager().getAllGraphs()[0]') say() for ix, n in enumerate(nodes): tt=str(n.__class__).split('.') pn,ln=getfun(n.__class__.__name__) if pn != None: say("_{}=pfwrap.createFunction('{}','{}','{}')".format(n.name,pn,ln,n.__class__.__name__)) else: say("_{}=pfwrap.createNode('{}','{}','{}')".format(n.name,tt[2],n.__class__.__name__,n.name)) say("_{}.setPosition({},{})".format(n.name,int(round(n.x)),int(round(n.y)))) say("gg.addNode(_{})".format(n.name)) say() say("#{}.setData(pinname,value)".format(n.name)) say() say() for ix, n in enumerate(nodes): pins=n.getOrderedPins() for pin in pins: if pin.direction == PinDirection.Output: s=getConnectedPins(pin) if len(s)>0: for p in s: say("pfwrap.connect(_{},'{}',_{},'{}')".format(n.name,pin.name,p.owningNode().name,p.name)) say("nodeeditor.Commands.refresh_gui()") def T2(): import toponaming reload (toponaming) toponaming.main() def T2(): import elastic reload (elastic) elastic.main() def T2(): import step2 reload (step2) step2.main() def T3(): import step reload (step) step.main2() def T3(): import forum_monitor reload (forum_monitor) forum_monitor.read_forum() def T2(): import forum_monitor reload (forum_monitor) #forum_monitor.analyse_weblinks() sayl("DONE----------") def T1(): import forum_monitor reload (forum_monitor) forum_monitor.create_entries_v3() sayl("DONE----------") def test_AA(): import forum_monitor reload (forum_monitor) forum_monitor.chain_threads() sayl("DONE----------") def test_BB(): import forum_monitor reload (forum_monitor) forum_monitor.get_post_ip() sayl("DONE----------")