FreeCAD GUI Widgets toolkit: Difference between revisions
No edit summary |
(Removed the translation tags. Page is in an unfinished state. Code samples do not work.) |
||
(8 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
== Background == |
|||
⚫ | |||
⚫ | |||
[[Design456_Workbench|Design456]] is an external workbench that aims to provide a Direct Modeling solution within FreeCAD. |
|||
⚫ | |||
Often FreeCAD implemented this interactive part as a ViewProivder part. These ViewProvider are made for each tool and they are specific for each tools. |
|||
⚫ | |||
⚫ | |||
⚫ | In the effort of making new tools for direct modeling, a graphical user interface (GUI) is needed. A widget system is required to let the user interact with the [[3D_view|3D view]]. Often FreeCAD implemented this interactive part as a [[Viewprovider|ViewProvider]]. These ViewProviders are made for each tool and are specific for each tools. |
||
This |
This doesn't serve Design456's agenda as it would make producing new tools difficult. That is why the necessity to figure out how [https://github.com/coin3d/coin/wiki Coin3D] works, in other words how drawings directly to the [[Scenegraph|scenegraph]] is implemented. |
||
This GUI toolkit will in the beginning try to produce different kind of primitive drawings which then can be adapted by different widgets (i.e square, circle, triangle, ellipse |
This GUI toolkit will in the beginning try to produce different kind of primitive drawings which then can be adapted by different widgets (i.e square, circle, triangle, ellipse etc...). For example an arrow that a user can push/pull to get the effect of extruding or pushing a face of a 3D object. |
||
For example an arrow that user can push or pull to get the effect of extruding or pushing a face of an 3D object. |
|||
As I am inspired totally by the simplicity of [https://www.fltk.org/ FLTK GUI Toolkit] |
As I am inspired totally by the simplicity of [https://www.fltk.org/ FLTK GUI Toolkit] used for making Windows/macOS/Linux GUI interfaces in cplusplus and other languages. The [[FreeCAD_GUI_Widgets_toolkit|FreeCAD GUI Widgets toolkit]] will be inspired by FLTK so understanding the toolkit shouldn't present much difficulty. |
||
===== Simple example showing a drawing===== |
===== Simple example showing a drawing===== |
||
{{Code|code= |
{{Code|code= |
||
from pivy import coin |
from pivy import coin |
||
Line 17: | Line 22: | ||
sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph() |
sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph() |
||
root=d.draw_circle() |
root = d.draw_circle() |
||
sg.addChild(root) |
sg.addChild(root) |
||
}} |
}} |
||
===== Another example ===== |
|||
{{Code|code= |
|||
from pivy import coin |
|||
import math |
|||
import fr_draw as d |
|||
import time |
|||
from PySide import QtCore,QtGui |
|||
sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph() |
|||
#draw_DoubleSidedArrow(_Points=[], _color=FR_COLOR.FR_BLACK, _ArrSize=1.0, _rotation=[0.0, 0.0, 1.0, 0.0]): |
|||
root=d.draw_DoubleSidedArrow(App.Vector(0,0,0),(0,1,1),1,[1.0, 0.0, 0.0, 180]) |
|||
sg.addChild(root) |
|||
}} |
|||
=== Installing the GUI toolkit=== |
=== Installing the GUI toolkit=== |
||
You need to install the Design456 Workbench to be able to use this widget system. Or you can specifically import the toolkit in your python code, but still you need to install the Design456 Workbench |
|||
The [[Design456_Workbench|Design456 Workbench]] is a prerequisite to be able to use this widget system. There is an option to specifically import the toolkit via Python code, but Design456 Workbench is still required. |
|||
⚫ | |||
⚫ | |||
⚫ | |||
See [[Fr_Widget_Basics|Fr Widget Basics]]. |
|||
⚫ | |||
There are some basic drawings written at the moment. Later I will list down them. But you can look at fr_draw.py to find them. Some are used for developing direct modeling commands. |
|||
To be continued .. |
Latest revision as of 15:32, 10 January 2023
Background
Design456 is an external workbench that aims to provide a Direct Modeling solution within FreeCAD.
Introduction
FreeCAD GUI Widgets toolkit
In the effort of making new tools for direct modeling, a graphical user interface (GUI) is needed. A widget system is required to let the user interact with the 3D view. Often FreeCAD implemented this interactive part as a ViewProvider. These ViewProviders are made for each tool and are specific for each tools.
This doesn't serve Design456's agenda as it would make producing new tools difficult. That is why the necessity to figure out how Coin3D works, in other words how drawings directly to the scenegraph is implemented.
This GUI toolkit will in the beginning try to produce different kind of primitive drawings which then can be adapted by different widgets (i.e square, circle, triangle, ellipse etc...). For example an arrow that a user can push/pull to get the effect of extruding or pushing a face of a 3D object.
As I am inspired totally by the simplicity of FLTK GUI Toolkit used for making Windows/macOS/Linux GUI interfaces in cplusplus and other languages. The FreeCAD GUI Widgets toolkit will be inspired by FLTK so understanding the toolkit shouldn't present much difficulty.
Simple example showing a drawing
from pivy import coin
import fr_draw as d
sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
root = d.draw_circle()
sg.addChild(root)
Another example
from pivy import coin
import math
import fr_draw as d
import time
from PySide import QtCore,QtGui
sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
#draw_DoubleSidedArrow(_Points=[], _color=FR_COLOR.FR_BLACK, _ArrSize=1.0, _rotation=[0.0, 0.0, 1.0, 0.0]):
root=d.draw_DoubleSidedArrow(App.Vector(0,0,0),(0,1,1),1,[1.0, 0.0, 0.0, 180])
sg.addChild(root)
Installing the GUI toolkit
The Design456 Workbench is a prerequisite to be able to use this widget system. There is an option to specifically import the toolkit via Python code, but Design456 Workbench is still required.
Fr Widget Basics
See Fr Widget Basics.
Fr Widget Common Widgets
There are some basic drawings written at the moment. Later I will list down them. But you can look at fr_draw.py to find them. Some are used for developing direct modeling commands.
To be continued ..