def testHandler(self): import __main__ class UnitWorkbench(__main__.Workbench): MenuText = "Unittest" ToolTip = "Unittest" def Initialize(self): list = ["Test_Test"] self.appendToolbar("My Unittest", list) def GetClassName(self): return "Gui::PythonWorkbench" FreeCADGui.addWorkbench(UnitWorkbench()) list = FreeCADGui.listWorkbenches() self.failUnless( list.has_key("UnitWorkbench") == True, "Test on adding workbench handler failed") FreeCADGui.activateWorkbench("UnitWorkbench") FreeCADGui.updateGui() self.failUnless(FreeCADGui.activeWorkbench().name() == "UnitWorkbench", "Test on loading workbench 'Unittest' failed") FreeCADGui.removeWorkbench("UnitWorkbench") list = FreeCADGui.listWorkbenches() self.failUnless( list.has_key("UnitWorkbench") == False, "Test on removing workbench handler failed")
def createWorkbench(self): self.cls = type(self.module.__name__ + "Workbench", (Workbench, ), {"Initialize": self.Initialize}) self.instance = self.cls() self.instance.MenuText = self.module.__name__ self.instance.ToolTip = "testing..." self.instance.Icon = self.getModuleIcon() FreeCADGui.addWorkbench(self.instance)
def testInvalidType(self): class MyExtWorkbench(FreeCADGui.Workbench): def Initialize(self): pass def GetClassName(self): return "App::Extension" FreeCADGui.addWorkbench(MyExtWorkbench()) with self.assertRaises(TypeError): FreeCADGui.activateWorkbench("MyExtWorkbench") FreeCADGui.removeWorkbench("MyExtWorkbench")
def showEvent(self, event): FreeCADGui.showMainWindow() self.setCentralWidget(FreeCADGui.getMainWindow()) # Need version >= 0.16.5949 class BlankWorkbench(FreeCADGui.Workbench): MenuText = "Blank" ToolTip = "Blank workbench" def Initialize(self): return def GetClassName(self): return "Gui::BlankWorkbench" FreeCADGui.addWorkbench(BlankWorkbench) FreeCADGui.activateWorkbench("BlankWorkbench")
def testHandler(self): import __main__ class UnitWorkbench(__main__.Workbench): MenuText = "Unittest" ToolTip = "Unittest" def Initialize(self): list = ["Test_Test"] self.appendToolbar("My Unittest",list) def GetClassName(self): return "Gui::PythonWorkbench" FreeCADGui.addWorkbench(UnitWorkbench()) list=FreeCADGui.listWorkbenches() self.failUnless(list.has_key("UnitWorkbench")==True, "Test on adding workbench handler failed") FreeCADGui.activateWorkbench("UnitWorkbench") FreeCADGui.updateGui() self.failUnless(FreeCADGui.activeWorkbench().name()=="UnitWorkbench", "Test on loading workbench 'Unittest' failed") FreeCADGui.removeWorkbench("UnitWorkbench") list=FreeCADGui.listWorkbenches() self.failUnless(list.has_key("UnitWorkbench")==False, "Test on removing workbench handler failed")
def on_actionEmbed_triggered(self): FreeCADGui.showMainWindow() hwnd = self.winId() PyCObject_AsVoidPtr = ctypes.PYFUNCTYPE(ctypes.c_void_p, ctypes.py_object)( ('PyCObject_AsVoidPtr', ctypes.pythonapi)) addr = PyCObject_AsVoidPtr(hwnd) FreeCADGui.embedToWindow(hex(addr)) # Need version >= 0.16.5949 class BlankWorkbench(FreeCADGui.Workbench): MenuText = "Blank" ToolTip = "Blank workbench" def Initialize(self): return def GetClassName(self): return "Gui::BlankWorkbench" FreeCADGui.addWorkbench(BlankWorkbench) FreeCADGui.activateWorkbench("BlankWorkbench")
"................", "................", "......####......", "......####......", "......####......", "......####......", "......####......", "......####......", "......####......", "......####......", "......####......", "................", "................"}; """ MenuText = "Polyedre" ToolTip = "Polyedre workbench" def GetClassName(self): return "Gui::PythonWorkbench" def Initialize(self): import core self.appendToolbar("My Tools", ["IcosahedronTool","DodecahedronTool","TetrahedronTool"]) self.appendMenu("My Tools", ["IcosahedronTool","DodecahedronTool","TetrahedronTool"]) #self.appendToolbar("My Tools", ["DodecahedronTool"]) #self.appendMenu("My Tools", ["DodecahedronTool"]) FreeCADGui.addWorkbench(PolyedreWorkbench)
". % 8 8 8 8 8 8 8 8 9 C.h$/ / / / / / i$$.j$c.. . . $ k$s l$* * * * * * * * * * * * * * * * * C#+$. ", ". % 8 8 8 8 8 8 8 8 8 8 m$n$/ / / / / o$! p$. . . . S.s q$r$* * * * * * * * * * * * * * * * s$+$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 /$p+/ / t$u$v$l.. . . O s w$* * * * * * * * * * * * * * * * s$+$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 8 a+:$x$y$! z$. . . L 8@A$& * * * * * * * * * * * * * * * .@+$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 B$C$Y # . . . D$s E$* * * * * * * * * * * * * * * s$+$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 F$! G$. . . . H$s I$* * * * * * * * * * * * * * * .@+$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 J$! K$. . . . =.=.L$* * * * * * * * * * * * * * .@+$. ", ". % `@/$/$/$/$/[email protected]$]+]+x.! N$. . . O$s P$* * * * * * * * * * * * * * .@Q$. ", ". % /+/ / / / / / / / / / / / / / R$! $ . . . S$s T$* * * * * * * * * * * * * * .@Q$. ", ". % H / / / / / / / / / / / / / U$! ! . . . . V$s r.* * * * * * * * * * * * * * .@Q$. ", ". % ^ / / / / / / / / / / / / / y.! ! . . . W$s X$* * * * * * * * * * * * * * .@Q$. ", ". % D./ / / / / / / / / / / / / / Y$! l.. . . Z$s `$* * * * * * * * * * * * * * .@Q$. ", ". % ../ / / / / / / / / / / / / / %! V+. . . .%s f+* * * * * * * * * * * * * * .@Q$. ", ". % +%/ / / / / / / / / / / / / / @%! #%. . . . $%s M.* * * * * * * * * * * * * * .@Q$. ", ". % B@/ / %%%%%%%%%%^+Z.Z.Z.Z.Z.q+&%! *%. . . $ 8#=.1+* * * * * * * * * * * * * * .@Q$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 j ! 3+. . . =%s -%* * * * * * * * * * * * * * * .@Q$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ;%! w.. . . . >%s R#* * * * * * * * * * * * * * * .@Q$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 ) X@,%. . N$s '%* * * * * * * * * * * * * * * * .@Q$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 )%!%#+~%. . . . O s c#* * * * * * * * * * * * * * * * .@Q$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 8 8 F {%8+a a ]%! ^%. . . . /%s - * * * * * * * * * * * * * * * * * .@Q$. ", ". % 8 8 8 8 8 8 8 8 8 8 8 )%(%..a a a a _%:%<%Z#. . l.8 s [%* * * * * * * * * * * * * * * * * .@Q$. ", ". % 8 8 8 8 8 8 8 8 l#}%p+a a a a a a a a |%! 1%. . . . 2%s 3%* * * * * * * * * * * * * * * * * * .@Q$. ", ". % 8 8 8 8 8 a+4%5%6%a a a a a a a a a a 7%8%! 9%. . . . 0%8@f * * * * * * * * * * * * * * * * * * * .@Q$. ", ". % 8 8 8 _.a%b%a a a a a a a a a a a a a a c%! d%l.. . . . :@e%8#: * * * * * * * * * * * * * * * * * * * .@Q$. ", ". % E+4%5%^ a a a a a a a a a a a a a a a a a f%! g%. . . $ !.s h%* * * * * * * * * * * * * * * * * * * * .@Q$. ", ". . + + + + + + + + + + + + + + + % % % % % % % % + . . . . . . . . . . . l.+ + + + + + + + + + + + + + + + + + + + + + + + . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; """ Gui.addWorkbench(TransportationWorkbench(__vers__))
'PlaceBeforeSelectedTrajectory', 'GoToSelectedTrajectory', 'GoToStart', 'PlayBackward', 'StopAnimation', 'PlayForward', 'GoToEnd', 'ToggleTrajectoryVisibility', 'AlignToEdge', 'Rotate15', 'PointToPoint', 'PlaceConcentric', 'LoadExampleFile'] self.appendToolbar('ExplodedAssemblyCreationTools', self.CreationTools) #self.appendToolbar('ExplodedAssemblyCameraTools', self.CameraAnimation) self.appendToolbar('ExplodedAssemblyAnimationControlTools', self.AnimationControlTools) self.appendToolbar('ExplodedAssemblyAuxiliarAssemblyTools', self.AuxiliaryAssemblyTools) self.appendMenu('ExplodedAssembly', self.Menu_tools) def Activated(self): import ExplodedAssembly as ea if not(FreeCAD.ActiveDocument): FreeCAD.newDocument() ea.checkDocumentStructure() FreeCAD.Console.PrintMessage('Exploded Assembly workbench loaded\n') FreeCADGui.addWorkbench(ExplodedAssembly)
translate("draft", "CubicBezCurve")): self.appendContextMenu("", self.line_commands) else: if Gui.Selection.getSelection(): self.appendContextMenu("Utilities", self.context_commands) # END DRAFT except Exception as exc: App.Console.PrintError(exc) App.Console.PrintError("Error: Draft ContexMenu " "failed, " "Draft will not work as expected.\n") def GetClassName(self): return "Gui::PythonWorkbench" Gui.addWorkbench(Design456_Workbench()) # FROM DRAFT # Preference pages for importing and exporting various file formats # are independent of the loading of the workbench and can be loaded at startup Gui.addPreferencePage(":/ui/preferences-dxf.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) Gui.addPreferencePage(":/ui/preferences-dwg.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) Gui.addPreferencePage(":/ui/preferences-svg.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) Gui.addPreferencePage(":/ui/preferences-oca.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) App.__unit_test__ += ["TestDraftGui"]
Icon= ''' /* XPM */ static char * nurbs_xpm[] = { "16 16 2 1", ". c #FF0FFF", "+ c #00FF00", "................", "....+...........", ".....+..........", ".....+..........", ".....+...+++++..", "......+..+++++..", ".....+++++++++..", ".........+++++..", "..+......+++++..", "..++++...+++++..", "................", "................", "..++++++++++++..", "..+++++++++++...", "..+++++++++.....", "................"};''' FreeCADGui.addWorkbench(PyFlow(toolbars, __vers__))
"(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.-._.:.[ a a a a a a a a a a a a a a a a a a a a a a a a | { <.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.[.}.q a a a a a a a a a a a a a a a a a a a a a a a a | |.1.2.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.3.4.5.a a a a a a a a a a a a a a a a a a a a a a a a a a | 6.7.B (.(.(.(.(.(.(.(.(.(.(.(.(.(.(.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.9.9 0.a a a a a a a a a a a a a a a a a a a a a a a a a a a.b.c.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.d.e.f.a a a a a a a a a a a a a a a a a a a a a a a a a a g.h.i.j.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.k.l.m.[ a a a a a a a a a a a a a a a a a a a a a a a a a n.o.>.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.p.q.r.a a a a a a a a a a a a a a a a a a a a a a a a a [ s.t.u.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.v.w.[ a a a a a a a a a a a a a a a a a a a a a a a a a [ x.y.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.z.A.B.a a a a a a a a a a a a a a a a a a a a a a a a a a C.D.E.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.E.G.H.a a a a a a a a a a a a a a a a a a a a a a a a a [ I.N J.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.J.N K.[ a a a a a a a a a a a a a a a a a a a a a a a a a r.L.9.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.M.N.O.a a a a a a a a a a a a a a a a a a a a a a a a a q z P.Q.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.R.S.a T.&.a a a a a a a a a a a a a a a a a a a a a a a [ S U.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.V.W.X.Y.Z.`. +r [ [ q a a a a a a a a a a a a a a a a a 0 .+++F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.@+#+++$+%+&+m.*+[ [ q a a a a a a a a a a a a a a [ u =+Q.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+;+>+,+'+)+!+~+{+]+[ a a a a a a a a a a a a ^+/+(+_+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+", "-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Q._+-+:+<+[+}+|+1+[ q a a a a a a a a a 2+3+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+", "-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+>+4+5+6+7+]+8+a a a a a a a a 9+0+a+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+", "b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+c+d+V.e+f+g+h+i+[ [ a a q [ j+k+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+", "b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+l+m+n+o+p+q+[ a [ r+s+k.b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+", "b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+M.t+e.u+v+w+x+e y+k.b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+_+A+B+C+D+E+F+G+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+>+H+I+;+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+J+K+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+"}; """ FreeCADGui.addWorkbench(Reconstruction)
def GetClassName(self): return 'Gui::PythonWorkbench' def Initialize(self): from freecad.frametools import commands Gui.addCommand('Beam', commands.Beam()) Gui.addCommand('CutMiter', commands.CutMiter()) Gui.addCommand('CutPlane', commands.CutPlane()) Gui.addCommand('CutShape', commands.CutShape()) Gui.addCommand('Reload', commands.Reload()) Gui.addCommand('LinkedFace', commands.LinkedFace()) Gui.addCommand('ExtrudedFace', commands.ExtrudedFace()) Gui.addCommand('FlatFace', commands.FlatFace()) Gui.addCommand('FlatFace', commands.NurbsConnection()) Gui.addCommand('FemSolver', commands.FemSolver()) self.appendToolbar('Frame', self.toolbox) self.appendMenu('Frame', self.toolbox) self.appendToolbar('Box', self.boxbox) self.appendMenu('Box', self.boxbox) def Activated(self): pass def Deactivated(self): pass Gui.addWorkbench(frame_workbench())
Manfold Design workbench Initialize ''' try: # disabling wrong-import-position pylint warning # pylint: disable=C0413 import Manifold except ImportError: App.Console.PrintMessage('workbench cannot be loaded') def Activated(self): ''' this executes when workbench is activated ''' App.Console.PrintMessage('ManfoldWorkbench.Activated') def Deactivated(self): ''' this executes when workbench is deactivated ''' App.Console.PrintMessage('ManfoldWorkbench.Deactivated') def GetClassName(self): ''' Manfold Design workbench GetClassName ''' return 'Gui::PythonWorkbench' # disabling undefined-variable pylint warning # pylint: disable=E0602 Gui.addWorkbench(ManfoldWorkbench())
"(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.-._.:.[ a a a a a a a a a a a a a a a a a a a a a a a a | { <.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.[.}.q a a a a a a a a a a a a a a a a a a a a a a a a | |.1.2.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.", "(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.3.4.5.a a a a a a a a a a a a a a a a a a a a a a a a a a | 6.7.B (.(.(.(.(.(.(.(.(.(.(.(.(.(.(.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.9.9 0.a a a a a a a a a a a a a a a a a a a a a a a a a a a.b.c.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.d.e.f.a a a a a a a a a a a a a a a a a a a a a a a a a a g.h.i.j.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.k.l.m.[ a a a a a a a a a a a a a a a a a a a a a a a a a n.o.>.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.p.q.r.a a a a a a a a a a a a a a a a a a a a a a a a a [ s.t.u.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.v.w.[ a a a a a a a a a a a a a a a a a a a a a a a a a [ x.y.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.z.A.B.a a a a a a a a a a a a a a a a a a a a a a a a a a C.D.E.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.E.G.H.a a a a a a a a a a a a a a a a a a a a a a a a a [ I.N J.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.J.N K.[ a a a a a a a a a a a a a a a a a a a a a a a a a r.L.9.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.M.N.O.a a a a a a a a a a a a a a a a a a a a a a a a a q z P.Q.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.R.S.a T.&.a a a a a a a a a a a a a a a a a a a a a a a [ S U.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.V.W.X.Y.Z.`. +r [ [ q a a a a a a a a a a a a a a a a a 0 .+++F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.@+#+++$+%+&+m.*+[ [ q a a a a a a a a a a a a a a [ u =+Q.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+;+>+,+'+)+!+~+{+]+[ a a a a a a a a a a a a ^+/+(+_+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+", "-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Q._+-+:+<+[+}+|+1+[ q a a a a a a a a a 2+3+>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+", "-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+>+4+5+6+7+]+8+a a a a a a a a 9+0+a+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+", "b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+c+d+V.e+f+g+h+i+[ [ a a q [ j+k+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+", "b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+l+m+n+o+p+q+[ a [ r+s+k.b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+", "b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+M.t+e.u+v+w+x+e y+k.b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+_+A+B+C+D+E+F+G+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+>+H+I+;+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+J+K+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+z+", "_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+_+"}; """ FreeCADGui.addWorkbench(Geodat)
class NiCrWorkbench(Workbench): import NiCrInit # this is needed to load the workbench icon # __dir__ = os.path.dirname( __file__ ) # __file__ is not working Icon = NiCrInit.__dir__ + '/icons/WorkbenchIcon.svg' MenuText = 'NiCr' ToolTip = 'Workbench for the NiCr foam cutter machine' def GetClassName(self): return 'Gui::PythonWorkbench' def Initialize(self): import NiCrInit self.tools = ['CreateNiCrMachine', 'CreateToolPath', 'CreatePathLink', 'SaveWirePath', 'ImportWirePath', 'RunPathSimulation'] FreeCAD.t = self.appendToolbar('NiCrWorkbench', self.tools) self.appendMenu('NiCrWorkbench', self.tools) FreeCAD.Console.PrintMessage('NiCr workbench loaded\n') def Activated(self): pass FreeCADGui.addWorkbench(NiCrWorkbench)
""" #import os #Icon = (open( #os.path.join( #__file__, 'resources', 'menger.xpm'), 'r') #.read()) MenuText = "ArmyOfEvilRobots" ToolTip = "Rapid prototyping workbench." def GetClassName(self): """This is the Class name used in freecad mapping""" return "Gui::PythonWorkbench" def Initialize(self): """Setup""" from geometry import menger self.appendToolbar("AOER Tools", ["Menger",]) self.appendMenu("AOER Tools", ["Menger",]) FreeCADGui.addCommand('Menger', menger.MengerCommand()) Log ("Loading MyModule... done\n") def Activated(self): """do something here if needed...""" Msg ("AOERBench.Activated()\n") def Deactivated(self): """do something here if needed...""" Msg ("AOERBench.Deactivated()\n") FreeCADGui.addWorkbench(AOERBench)
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * # * USA * # * * # * Juergen Riegel 2002 * # ***************************************************************************/ import FreeCAD import FreeCADGui class FemWorkbench(Workbench): "Fem workbench object" def __init__(self): self.__class__.Icon = FreeCAD.getResourceDir( ) + "Mod/Fem/Resources/icons/FemWorkbench.svg" self.__class__.MenuText = "FEM" self.__class__.ToolTip = "FEM workbench" def Initialize(self): # load the module import Fem import FemGui import femcommands.commands def GetClassName(self): return "FemGui::Workbench" FreeCADGui.addWorkbench(FemWorkbench())
self.appendContextMenu("Draft", self.drawing_commands) else: if FreeCAD.activeDraftCommand.featureName == translate( "draft", "Line"): # BUG: line subcommands are not usable while another command is active self.appendContextMenu("", self.line_commands) else: if FreeCADGui.Selection.getSelection(): self.appendContextMenu("Utilities", self.context_commands) def GetClassName(self): """Type of workbench.""" return "Gui::PythonWorkbench" FreeCADGui.addWorkbench(DraftWorkbench) # Preference pages for importing and exporting various file formats # are independent of the loading of the workbench and can be loaded at startup import Draft_rc from PySide.QtCore import QT_TRANSLATE_NOOP FreeCADGui.addPreferencePage(":/ui/preferences-dxf.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) FreeCADGui.addPreferencePage(":/ui/preferences-dwg.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) FreeCADGui.addPreferencePage(":/ui/preferences-svg.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) FreeCADGui.addPreferencePage(":/ui/preferences-oca.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) FreeCAD.__unit_test__ += ["TestDraft"]
try: import freecad.plot except ImportError: msg = QtGui.QApplication.translate( "ship_console", "freecad.plot is disabled, tools cannot graph output curves, install freecad.plot with addon-manager", None) App.Console.PrintMessage(msg + '\n') # ToolBar shiplist = [ "Ship_LoadExample", "Ship_CreateShip", "Ship_OutlineDraw", "Ship_AreasCurve", "Ship_Hydrostatics" ] weightslist = [ "Ship_Weight", "Ship_Tank", "Ship_Capacity", "Ship_LoadCondition", "Ship_GZ" ] self.appendToolbar( str(QtCore.QT_TRANSLATE_NOOP("Ship", "Ship design")), shiplist) self.appendToolbar(str(QtCore.QT_TRANSLATE_NOOP("Ship", "Weights")), weightslist) self.appendMenu(str(QtCore.QT_TRANSLATE_NOOP("Ship", "Ship design")), shiplist) self.appendMenu(str(QtCore.QT_TRANSLATE_NOOP("Ship", "Weights")), weightslist) Gui.addWorkbench(ShipWorkbench())
import FreeCAD import FreeCADGui class ToolboxWorkbench(FreeCADGui.Workbench): "Collection of different useful tools for FreeCAD" MenuText = "Toolbox" ToolTip = "Collection of useful Tools" # TODO: Add icon self.__class__.Icon = "path/to/icon" def Initialize(self): # Initialize the module import gui.toolbar_manager as toolbar_manager for name, commands in toolbar_manager.toolbarManager.Toolbars.items(): self.appendToolbar(name, [command.commandName for command in commands]) # def Activated(self): # def Deactivated(self): FreeCADGui.addWorkbench(ToolboxWorkbench())
def GetClassName(self): return "Gui::PythonWorkbench" def Initialize(self): from .gearfunc import CreateCycloideGear, CreateInvoluteGear, CreateBevelGear, CreateInvoluteRack self.appendToolbar("Gear", [ "CreateInvoluteGear", "CreateInvoluteRack", "CreateCycloideGear", "CreateBevelGear" ]) self.appendMenu("Gear", [ "CreateInvoluteGear", "CreateInvoluteRack", "CreateCycloideGear", "CreateBevelGear" ]) Gui.addIconPath(App.getHomePath() + "Mod/gear/icons/") Gui.addCommand('CreateInvoluteGear', CreateInvoluteGear()) Gui.addCommand('CreateCycloideGear', CreateCycloideGear()) Gui.addCommand('CreateBevelGear', CreateBevelGear()) Gui.addCommand('CreateInvoluteRack', CreateInvoluteRack()) def Activated(self): pass def Deactivated(self): pass Gui.addWorkbench(gearWorkbench())
"........................... ........................", "............................ .........................", "............................. .........................", "................................................................", "................................................................", "............................. ........................", "............................. .........................", "............................. .........................", "................................................................", "................................................................" }; """ MenuText = "3D Guitar Design" ToolTip = "In development" def GetClassName(self): return "Gui::PythonWorkbench" def Initialize(self): self.appendToolbar("3D Guitar Design", ["3D_NewGuitar"]) self.appendMenu("My Tools", ["3D_NewGuitar"]) Log ("Loading MyModule... done\n") #def Activated(self): # Msg ("TGD.Activated()\n") #def Deactivated(self): # Msg ("TGD.Deactivated()\n") FreeCADGui.addWorkbench(TGD)
#Icon = ":Resources/icons/kicad-StepUp-tools-WB.svg" MenuText = "DatumTools" ToolTip = "DatumTools workbench" def GetClassName(self): return "Gui::PythonWorkbench" def Initialize(self): self.appendToolbar("Datum Tools", ["DatumPoint","DatumLine","DatumPlane","DatumLCS","AltLCS","Plane","AnnoLbl"]) #"Point","Line", #self.appendMenu("ksu Tools", ["ksuTools","ksuToolsEdit"]) self.appendMenu("Datum Tools", ["DatumPoint","DatumLine","DatumPlane","DatumLCS","AltLCS","Plane","AnnoLbl"]) Log ("Loading DatumTools Module... done\n") def Activated(self): # do something here if needed... Msg ("DatumTools WB Activated("+DT_wb_version+")\n") from PySide import QtGui import time def Deactivated(self): # do something here if needed... Msg ("DatumTools WB Deactivated()\n") ### FreeCADGui.addWorkbench(DatumToolsWB)
commands = [ "CreateInvoluteGear", "CreateInvoluteRack", "CreateCycloideGear", "CreateBevelGear", "CreateCrownGear"] def GetClassName(self): return "Gui::PythonWorkbench" def Initialize(self): from .commands import CreateCycloideGear, CreateInvoluteGear from .commands import CreateBevelGear, CreateInvoluteRack, CreateCrownGear self.appendToolbar("Gear", self.commands) self.appendMenu("Gear", self.commands) Gui.addIconPath(App.getHomePath()+"Mod/gear/icons/") Gui.addCommand('CreateInvoluteGear', CreateInvoluteGear()) Gui.addCommand('CreateCycloideGear', CreateCycloideGear()) Gui.addCommand('CreateBevelGear', CreateBevelGear()) Gui.addCommand('CreateInvoluteRack', CreateInvoluteRack()) Gui.addCommand('CreateCrownGear', CreateCrownGear()) def Activated(self): pass def Deactivated(self): pass Gui.addWorkbench(gearWorkbench())
] cmds4 = [ 'Nurbs_pta', 'Nurbs_ptb', 'Nurbs_ptc', 'Nurbs_ptd', 'Nurbs_pte' ] cmds5 = ['Nurbs_geodesic' + str(a + 1) for a in range(6)] if 1: self.appendToolbar("Nurbs", cmds) self.appendMenu("Nurbs", cmds) # self.appendToolbar("TTT", cmds2 ) self.appendToolbar("Workspaces and Views", cmds3) self.appendToolbar("Points Workspaces and Views", cmds4) self.appendToolbar("Geodesic Patch Tests", cmds5) menues = {} ml = [] for _t in FreeCAD.tcmds5: c = _t[0] a = _t[1] try: menues[tuple(c)].append(a) except: menues[tuple(c)] = [a] ml.append(tuple(c)) for m in ml: self.appendMenu(list(m), menues[m]) FreeCADGui.addWorkbench(NurbsWorkbench)
if len(selection) == 1: obj = selection[0] # TODO: better classification of selections # TODO: why CheckObjects function not working here? if 'lcclass' in obj.PropertiesList: #if isLocalCoordinatesObserver(obj): self.appendContextMenu("Separator", []) self.appendContextMenu( "Pyrate Local Coordinate System", ["ContextAddChildToLocalCoordinatesCommand"]) self.appendContextMenu("Separator", []) if 'wavelengths' in obj.PropertiesList: self.appendContextMenu("Separator", []) self.appendContextMenu( "Pyrate Field", ["ShowFieldDialogCommand"]) self.appendContextMenu( "Pyrate Surfaces", ["ShowSurfaceDialogCommand"]) self.appendContextMenu("ShowRaybundlesCommand", []) self.appendContextMenu("Separator", []) def Activated(self): "do something here if needed..." pass # Msg ("PyrateWorkbench.Activated()\n") def Deactivated(self): "do something here if needed..." pass # Msg ("PyrateWorkbench.Deactivated()\n") FreeCADGui.addWorkbench(PyrateWorkbench())
FreeCAD.Console.PrintMessage("Animate workbench deactivated\n") def ContextMenu(self, recipient): """ Method to add custom commands to a context menu with respect to a recipient. This method is executed whenever the user right-clicks in a Tree View or the View box. It's possible to only add commands via `self.appendContextMenu()`. Args: recipient: A str equal to "Tree" or "View" according to where user clicked. """ # Log who is the recipient # FreeCAD.Console.PrintLog("Preparing context menu for " + recipient # + "\n") # Add commands to the context menu if necessary # self.appendContextMenu("My commands", self.list) pass def GetClassName(self): """ Mandatory method for full python workbenches. Returns: A str with C++ binding class for this workbench. """ return "Gui::PythonWorkbench" FreeCADGui.addWorkbench(Animate())
@staticmethod def ListExamples(): import os import module_locator dirs = [] # List all of the example files in an order that makes sense module_base_path = module_locator.module_path() exs_dir_path = os.path.join(module_base_path, 'Examples') dirs = os.listdir(exs_dir_path) dirs.sort() return dirs FreeCADGui.addCommand('CadQueryNewScript', CadQueryNewScript()) FreeCADGui.addCommand('CadQueryOpenScript', CadQueryOpenScript()) FreeCADGui.addCommand('CadQuerySaveScript', CadQuerySaveScript()) FreeCADGui.addCommand('CadQuerySaveAsScript', CadQuerySaveAsScript()) FreeCADGui.addCommand('CadQueryExecuteScript', CadQueryExecuteScript()) FreeCADGui.addCommand('CadQueryCloseScript', CadQueryCloseScript()) FreeCADGui.addCommand('CadQueryClearOutput', CadQueryClearOutput()) # Step through and add an Examples submenu item for each example dirs = CadQueryWorkbench.ListExamples() for curFile in dirs: FreeCADGui.addCommand(curFile, CadQueryExecuteExample(curFile)) FreeCADGui.addWorkbench(CadQueryWorkbench())
self.appendMenu(["Add Components", "Mirrors"], ["RoundMirror", "RectangularMirror"]) self.appendMenu(["Add Components", "Prisms"], ["PentaPrism", "DovePrism", "RightAnglePrism"]) self.appendMenu(["Add Components", "Beam Splitters"], ["BSCube"]) self.appendMenu(["Add Components", "Ray Sources"], ["RaysParallel", "RaysPoint", "RaysArray"]) self.appendMenu(["Add Components"], "Aperture") self.appendMenu(["Add Components"], "DiffractionGratting") self.appendMenu(["Add Components"], "Sensor") self.appendMenu(["Simulate"], ["Propagate", "Reports", "Optimize"]) def Activated(self): ''' code which should be computed when a user switch to this workbench ''' pass def Deactivated(self): ''' code which should be computed when this workbench is deactivated ''' pass Gui.addWorkbench(PyOpToolsWorkbench())
if _v['gui'] & self.group: Gui.addCommand( _k, CommandGroup(_v['cmd'], _v['tooltip'], _v.get('type_id'))) def Activated(self): """ Called when switching to this workbench """ pass def Deactivated(self): """ Called when switiching away from this workbench """ pass def ContextMenu(self, recipient): """ Right-click menu options """ # "recipient" will be either "view" or "tree" for _k, _v in self.fn.items(): if _v['gui'] & self.context: self.appendContextMenu(_k, _v['cmds']) Gui.addWorkbench(TrailsWorkbench())
self.appendToolbar('Assembly3 Navigation', [ "Std_SelBack", "Std_SelForward", AsmCmdGotoRelation.getName(), "Std_LinkSelectLinked", "Std_LinkSelectLinkedFinal", "Std_LinkSelectAllLinks", "Std_TreeSelectAllInstances" ]) for name, cmds in AsmCmdManager.Menus.items(): cmdSet.update(cmds) self.appendMenu(name, [cmd.getName() for cmd in cmds]) self._observer.setCommands(cmdSet) self.docObserver = AsmDocumentObserver() # FreeCADGui.addPreferencePage( # ':/assembly3/ui/assembly3_prefs.ui','Assembly3') def _contextMenu(self): from .gui import AsmCmdManager from collections import OrderedDict menus = OrderedDict() for cmd in AsmCmdManager.getInfo().Types: name = cmd.getContextMenuName() if name: menus.setdefault(name, []).append(cmd.getName()) for name, cmds in menus.items(): self.appendContextMenu(name, cmds) def ContextMenu(self, _recipient): logger.catch('', self._contextMenu) FreeCADGui.addWorkbench(Assembly3Workbench)
" .... ", " ", " "}; ''' def Initialize(self): """Initialize GUI when the workbench is first loaded (callback). This method is called by FreeCAD framework when the workbench is first loaded. """ # pylint: disable=no-self-use, import-outside-toplevel from PySide.QtCore import QT_TRANSLATE_NOOP from FreeCAD import Console from FreeCADGui import addIconPath, addPreferencePage from Render import RENDER_COMMANDS, ICONDIR, PREFPAGE commands = RENDER_COMMANDS self.appendToolbar(QT_TRANSLATE_NOOP("Workbench", "Render"), commands) self.appendMenu(QT_TRANSLATE_NOOP("Workbench", "&Render"), commands) addIconPath(ICONDIR) addPreferencePage(PREFPAGE, "Render") Console.PrintLog("Loading Render module...done\n") def GetClassName(self): # pylint: disable=no-self-use """Provide type of workbench.""" return "Gui::PythonWorkbench" Gui.addWorkbench(RenderWorkbench)
class gliderWorkbench(Workbench): """probe workbench object""" MenuText = "glider" ToolTip = "glider workbench" Icon = "glider_workbench.svg" def GetClassName(self): return "Gui::PythonWorkbench" def Initialize(self): #load the module self.appendToolbar("Glider", ["LoadGlider", "ChangeShape"]) self.appendMenu("Glider", ["LoadGlider", "ChangeShape"]) profileitems = ["LoadProfile", "ChangeProfile", "CompareProfile", "MergeProfile", "RunXfoil"] self.appendToolbar("airfoil", profileitems) self.appendMenu("airfoil", profileitems) def Activated(self): pass def Deactivated(self): pass Gui.addWorkbench(gliderWorkbench()) # Append the open handler #FreeCAD.EndingAdd("probe formats (*.bmp *.jpg *.png *.xpm)","probeGui")
self.__class__.ToolTip = "FEM workbench" def Initialize(self): # load the module import Fem import FemGui import _CommandShowResult import _CommandRunSolver import _CommandPurgeResults import _CommandClearMesh import _CommandPrintMeshInfo import _CommandControlSolver import _CommandFEMMesh2Mesh import _CommandMeshGmshFromShape import _CommandMeshNetgenFromShape import _CommandMeshRegion import _CommandAnalysis import _CommandShellThickness import _CommandBeamSection import _CommandMaterial import _CommandMaterialMechanicalNonlinear import _CommandSolverCalculix import _CommandSolverZ88 import _CommandConstraintSelfWeight def GetClassName(self): return "FemGui::Workbench" FreeCADGui.addWorkbench(FemWorkbench())
def Activated(self): Msg("Animation workbench activated\n") def Deactivated(self): Msg("Animation workbench deactivated\n") def ContextMenu(self, recipient): # self.appendContextMenu("Animation tools",self.animtools) # self.appendContextMenu("My Animation tools",self.contextTools) # self.appendContextMenu("",self.contextTools) # FreeCAD.yy=self pass def GetClassName(self): return "Gui::PythonWorkbench" FreeCADGui.addWorkbench(AnimationWorkbench)
parttoolbarcommands = ['Part_Cut', 'Part_Fuse', 'Part_Common'] meshtoolbarcommands = ['Mesh_FromPartShape'] self.appendToolbar(QT_TRANSLATE_NOOP('Workbench', 'GDMLTools'), toolbarcommands) self.appendMenu('GDML', commands) self.appendToolbar(QT_TRANSLATE_NOOP('Workbech', 'GDML Part tools'), parttoolbarcommands) FreeCADGui.addIconPath(joinDir("Resources/icons")) FreeCADGui.addLanguagePath(joinDir("Resources/translations")) FreeCADGui.addPreferencePage(joinDir("Resources/ui/GDML-base.ui"), "GDML") def Activated(self): "This function is executed when the workbench is activated" print("Activated") self.obs = self.MyObserver() FreeCAD.addDocumentObserver(self.obs) return def Deactivated(self): "This function is executed when the workbench is deactivated" FreeCAD.removeDocumentObserver(self.obs) return def GetClassName(self): return "Gui::PythonWorkbench" FreeCADGui.addWorkbench(GDML_Workbench())
"""When leaving the workbench.""" if hasattr(FreeCADGui, "draftToolBar"): FreeCADGui.draftToolBar.Deactivated() if hasattr(FreeCADGui, "Snapper"): FreeCADGui.Snapper.hide() FreeCAD.Console.PrintLog("Arch workbench deactivated.\n") def ContextMenu(self, recipient): """Define an optional custom context menu.""" self.appendContextMenu("Utilities", self.draft_context_commands) def GetClassName(self): """Type of workbench.""" return "Gui::PythonWorkbench" FreeCADGui.addWorkbench(ArchWorkbench) # Preference pages for importing and exporting various file formats # are independent of the loading of the workbench and can be loaded at startup import Arch_rc from PySide.QtCore import QT_TRANSLATE_NOOP FreeCADGui.addPreferencePage(":/ui/preferences-ifc.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) FreeCADGui.addPreferencePage(":/ui/preferences-ifc-export.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) FreeCADGui.addPreferencePage(":/ui/preferences-dae.ui", QT_TRANSLATE_NOOP("Draft", "Import-Export")) FreeCAD.__unit_test__ += ["TestArch"]
import EasyVoxel # this is needed to load the workbench icon # __dir__ = os.path.dirname( __file__ ) # __file__ is not working Icon = EasyVoxel.__dir__ + '/icons/WorkbenchIcon.svg' MenuText = 'Voxel Workbench' ToolTip = 'Create models with cubes' def GetClassName(self): return 'Gui::PythonWorkbench' def Initialize(self): pass def Activated(self): import EasyVoxel EasyVoxel.startVoxel() import VoxelNav self.vnav = VoxelNav.VoxelNav() FreeCAD.ActiveDocument.recompute() self.appendToolbar( "VoxelTools", ['ToggleXYMidplane', 'VoxelToObject', 'ObjectToVoxel']) self.appendMenu("VoxelWorkbench", ['ToggleXYMidplane', 'VoxelToObject', 'ObjectToVoxel']) FreeCAD.Console.PrintMessage('Voxel Workbench Loaded\n') def Deactivated(self): self.vnav.removeNav() FreeCADGui.addWorkbench(VoxelWorkbench)
nl = [] cl = [] for i in range(len(self.Selection)): if not self.Selection[i] == Gui.Selection.getSelectionObject( doc, obj, sub): nl.append(self.Selection[i]) cl.append(self.View_Directions[i]) self.Selection = nl def clearSelection(self, doc): self.Selection = [] self.View_Directions = [] def ContextMenu(self, recipient): """This is executed whenever the user right-clicks on screen. recipient" will be either 'view' or 'tree'""" if recipient == "View": contextlist = ["adjacent_faces", "bspline_to_console"] # list of commands self.appendContextMenu("Curves", contextlist) elif recipient == "Tree": contextlist = [] # list of commands self.appendContextMenu("Curves", contextlist) def GetClassName(self): """This function is mandatory if this is a full python workbench""" return "Gui::PythonWorkbench" Gui.addWorkbench(CurvesWorkbench())
QtCore.QObject.connect(self.item[0], QtCore.SIGNAL("triggered()"), self.information) QtCore.QObject.connect(self.item[1], QtCore.SIGNAL("triggered()"), self.warning) QtCore.QObject.connect(self.item[2], QtCore.SIGNAL("triggered()"), self.critical) def Activated(self): self.__title__ = self.mw.windowTitle() self.mw.setWindowTitle("FreeCAD -- PythonQt") d = QtGui.QDockWidget() d.setWindowTitle("Calendar") c = QtGui.QCalendarWidget() d.setWidget(c) self.mw.addDockWidget(QtCore.Qt.RightDockWidgetArea,d) self.dock[d] = c bar = self.mw.menuBar() a=bar.actions() for i in a: if i.objectName() == "&Windows": break bar.insertMenu(i, self.menu) self.menu.setTitle("Python Qt") self.menu.menuAction().setVisible(True) def Deactivated(self): self.mw.setWindowTitle(self.__title__) self.dock.clear() FreeCADGui.addWorkbench(PythonQtWorkbench)
@staticmethod def ListDemos(): import os import ksu_locator dirs = [] # List all of the example files in an order that makes sense module_base_path = ksu_locator.module_path() demo_dir_path = os.path.join(module_base_path, 'demo') dirs = os.listdir(demo_dir_path) dirs.sort() return dirs ## ### dirs = ksuWB.ListDemos() #print dirs #FreeCADGui.addCommand('ksuWBOpenDemo', ksuOpenDemo()) #dirs = ksuWB.ListDemos() for curFile in dirs: FreeCADGui.addCommand(curFile, ksuExcDemo(curFile)) #FreeCADGui.addPreferencePage(kSU_MainPrefPage,"kicadStepUpGui") #FreeCADGui.addPreferencePage(CalendarPage, "kicadStepUpGui") FreeCADGui.addWorkbench(ksuWB)
if _v['gui'] & self.MENU: self.appendMenu(_k, _v['cmd']) self.appendToolbar("Tools", self.toolbox) self.appendMenu("Tools", self.toolbox) def Activated(self): """ Workbench activation occurs when switched to """ pass def Deactivated(self): """ Workbench deactivation occurs when switched away from in the UI """ pass def ContextMenu(self, recipient): """ Right-click menu options """ #Populate the context menu when it's called for _k, _v in self.command_ui.items(): if _v['gui'] & self.CONTEXT: self.appendContextMenu(_k, _v['cmd']) Gui.addWorkbench(template_workbench())