molde 0.1.0__py3-none-any.whl → 0.1.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. molde/__init__.py +6 -5
  2. molde/__main__.py +74 -63
  3. molde/actors/__init__.py +5 -4
  4. molde/actors/common_symbols_actor.py +148 -0
  5. molde/actors/ghost_actor.py +12 -12
  6. molde/actors/lines_actor.py +31 -31
  7. molde/actors/round_points_actor.py +7 -7
  8. molde/actors/square_points_actor.py +32 -32
  9. molde/colors/__init__.py +1 -1
  10. molde/colors/color.py +120 -120
  11. molde/colors/color_names.py +124 -124
  12. molde/interactor_styles/__init__.py +2 -2
  13. molde/interactor_styles/arcball_camera_style.py +288 -272
  14. molde/interactor_styles/box_selection_style.py +70 -70
  15. molde/main_window.ui +864 -0
  16. molde/pickers/__init__.py +2 -2
  17. molde/pickers/cell_area_picker.py +61 -61
  18. molde/pickers/cell_property_area_picker.py +84 -84
  19. molde/poly_data/__init__.py +19 -2
  20. molde/poly_data/arrows.py +54 -0
  21. molde/poly_data/complex_shapes.py +26 -0
  22. molde/poly_data/lines_data.py +23 -23
  23. molde/poly_data/simple_shapes.py +22 -0
  24. molde/poly_data/vertices_data.py +24 -24
  25. molde/render_widgets/__init__.py +2 -2
  26. molde/render_widgets/animated_render_widget.py +164 -164
  27. molde/render_widgets/common_render_widget.py +433 -433
  28. molde/stylesheets/__init__.py +119 -119
  29. molde/stylesheets/common.qss +16 -16
  30. molde/stylesheets/create_color_page.py +61 -61
  31. molde/stylesheets/mainwindow.ui +611 -611
  32. molde/stylesheets/qcheckbox.qss +18 -18
  33. molde/stylesheets/qinputs.qss +78 -78
  34. molde/stylesheets/qlayouts.qss +22 -22
  35. molde/stylesheets/qmenubar.qss +12 -12
  36. molde/stylesheets/qprogressbar.qss +11 -11
  37. molde/stylesheets/qpushbutton.qss +90 -90
  38. molde/stylesheets/qradiobutton.qss +30 -30
  39. molde/stylesheets/qscrollbar.qss +29 -29
  40. molde/stylesheets/qslider.qss +61 -61
  41. molde/stylesheets/qtablewidget.qss +27 -27
  42. molde/stylesheets/qtabwidget.qss +29 -29
  43. molde/stylesheets/qtoolbar.qss +62 -62
  44. molde/stylesheets/qtoolbuttons.qss +14 -14
  45. molde/stylesheets/qtreewidget.qss +25 -25
  46. molde/ui_files/messages/new_loading_window.ui +73 -0
  47. molde/utils/__init__.py +8 -8
  48. molde/utils/format_sequences.py +44 -44
  49. molde/utils/poly_data_utils.py +24 -24
  50. molde/utils/tree_info.py +52 -52
  51. molde/windows/loading_window.py +189 -0
  52. {molde-0.1.0.dist-info → molde-0.1.2.dist-info}/METADATA +5 -3
  53. molde-0.1.2.dist-info/RECORD +69 -0
  54. {molde-0.1.0.dist-info → molde-0.1.2.dist-info}/WHEEL +1 -1
  55. molde-0.1.0.dist-info/RECORD +0 -62
molde/pickers/__init__.py CHANGED
@@ -1,2 +1,2 @@
1
- from .cell_area_picker import CellAreaPicker
2
- from .cell_property_area_picker import CellPropertyAreaPicker
1
+ from .cell_area_picker import CellAreaPicker
2
+ from .cell_property_area_picker import CellPropertyAreaPicker
@@ -1,61 +1,61 @@
1
- from vtkmodules.vtkCommonDataModel import vtkPolyData
2
- from vtkmodules.vtkFiltersGeneral import vtkExtractSelectedFrustum
3
- from vtkmodules.vtkRenderingCore import (
4
- vtkActor,
5
- vtkAreaPicker,
6
- vtkCellPicker,
7
- vtkPropPicker,
8
- vtkRenderer,
9
- )
10
-
11
-
12
- class CellAreaPicker(vtkPropPicker):
13
- def __init__(self) -> None:
14
- super().__init__()
15
- self._picked_cells = []
16
- self._picked_actors = []
17
- self._picked = dict()
18
-
19
- self._area_picker = vtkAreaPicker()
20
- self._cell_picker = vtkCellPicker()
21
- self._cell_picker.SetTolerance(0.01)
22
-
23
- def pick(self, x: float, y: float, z: float, renderer: vtkRenderer):
24
- self._picked.clear()
25
- self._cell_picker.Pick(x, y, z, renderer)
26
- self._picked[self._cell_picker.GetActor()] = [self._cell_picker.GetCellId()]
27
-
28
- # # select a small area around the mouse click
29
- # delta = 10
30
- # self.area_pick(x-delta, y-delta, x+delta, y+delta, renderer)
31
-
32
- # # keep at most a single cell selected for every picked actor
33
- # for actor, selection in self._picked.items():
34
- # self._picked[actor] = selection[:1]
35
-
36
- def area_pick(
37
- self, x0: float, y0: float, x1: float, y1: float, renderer: vtkRenderer
38
- ):
39
- self._picked.clear()
40
- self._area_picker.AreaPick(x0, y0, x1, y1, renderer)
41
- extractor = vtkExtractSelectedFrustum()
42
- extractor.SetFrustum(self._area_picker.GetFrustum())
43
-
44
- for actor in self._area_picker.GetProp3Ds():
45
- if not isinstance(actor, vtkActor):
46
- continue
47
-
48
- data: vtkPolyData = actor.GetMapper().GetInput()
49
- if data is None:
50
- continue
51
-
52
- cells = []
53
- for i in range(data.GetNumberOfCells()):
54
- bounds = [0, 0, 0, 0, 0, 0]
55
- data.GetCellBounds(i, bounds)
56
- if extractor.OverallBoundsTest(bounds):
57
- cells.append(i)
58
- self._picked[actor] = cells
59
-
60
- def get_picked(self):
61
- return dict(self._picked)
1
+ from vtkmodules.vtkCommonDataModel import vtkPolyData
2
+ from vtkmodules.vtkFiltersGeneral import vtkExtractSelectedFrustum
3
+ from vtkmodules.vtkRenderingCore import (
4
+ vtkActor,
5
+ vtkAreaPicker,
6
+ vtkCellPicker,
7
+ vtkPropPicker,
8
+ vtkRenderer,
9
+ )
10
+
11
+
12
+ class CellAreaPicker(vtkPropPicker):
13
+ def __init__(self) -> None:
14
+ super().__init__()
15
+ self._picked_cells = []
16
+ self._picked_actors = []
17
+ self._picked = dict()
18
+
19
+ self._area_picker = vtkAreaPicker()
20
+ self._cell_picker = vtkCellPicker()
21
+ self._cell_picker.SetTolerance(0.01)
22
+
23
+ def pick(self, x: float, y: float, z: float, renderer: vtkRenderer):
24
+ self._picked.clear()
25
+ self._cell_picker.Pick(x, y, z, renderer)
26
+ self._picked[self._cell_picker.GetActor()] = [self._cell_picker.GetCellId()]
27
+
28
+ # # select a small area around the mouse click
29
+ # delta = 10
30
+ # self.area_pick(x-delta, y-delta, x+delta, y+delta, renderer)
31
+
32
+ # # keep at most a single cell selected for every picked actor
33
+ # for actor, selection in self._picked.items():
34
+ # self._picked[actor] = selection[:1]
35
+
36
+ def area_pick(
37
+ self, x0: float, y0: float, x1: float, y1: float, renderer: vtkRenderer
38
+ ):
39
+ self._picked.clear()
40
+ self._area_picker.AreaPick(x0, y0, x1, y1, renderer)
41
+ extractor = vtkExtractSelectedFrustum()
42
+ extractor.SetFrustum(self._area_picker.GetFrustum())
43
+
44
+ for actor in self._area_picker.GetProp3Ds():
45
+ if not isinstance(actor, vtkActor):
46
+ continue
47
+
48
+ data: vtkPolyData = actor.GetMapper().GetInput()
49
+ if data is None:
50
+ continue
51
+
52
+ cells = []
53
+ for i in range(data.GetNumberOfCells()):
54
+ bounds = [0, 0, 0, 0, 0, 0]
55
+ data.GetCellBounds(i, bounds)
56
+ if extractor.OverallBoundsTest(bounds):
57
+ cells.append(i)
58
+ self._picked[actor] = cells
59
+
60
+ def get_picked(self):
61
+ return dict(self._picked)
@@ -1,84 +1,84 @@
1
- from vtkmodules.vtkCommonDataModel import vtkPolyData
2
- from vtkmodules.vtkFiltersGeneral import vtkExtractSelectedFrustum
3
- from vtkmodules.vtkRenderingCore import (
4
- vtkActor,
5
- vtkAreaPicker,
6
- vtkCellPicker,
7
- vtkPropPicker,
8
- vtkRenderer,
9
- )
10
-
11
-
12
- class CellPropertyAreaPicker(vtkPropPicker):
13
- def __init__(self, property_name: str, desired_actor: vtkActor) -> None:
14
- super().__init__()
15
-
16
- self.property_name = property_name
17
- self.desired_actor = desired_actor
18
- self._picked = set()
19
-
20
- self._cell_picker = vtkCellPicker()
21
- self._area_picker = vtkAreaPicker()
22
- self._cell_picker.SetTolerance(0.005)
23
-
24
- def pick(self, x: float, y: float, z: float, renderer: vtkRenderer):
25
- # maybe a behaviour like the one implemented in CellAreaPicker
26
- # would fit nicely here
27
- self._picked.clear()
28
- self._cell_picker.Pick(x, y, z, renderer)
29
-
30
- if self.desired_actor != self._cell_picker.GetActor():
31
- return self.get_picked()
32
-
33
- data: vtkPolyData = self.desired_actor.GetMapper().GetInput()
34
- if data is None:
35
- return self.get_picked()
36
-
37
- property_array = data.GetCellData().GetArray(self.property_name)
38
- if property_array is None:
39
- return self.get_picked()
40
-
41
- cell = self._cell_picker.GetCellId()
42
- property_val = property_array.GetValue(cell)
43
- self._picked.add(property_val)
44
- return self.get_picked()
45
-
46
- def area_pick(
47
- self, x0: float, y0: float, x1: float, y1: float, renderer: vtkRenderer
48
- ):
49
- self._picked.clear()
50
- self._area_picker.AreaPick(x0, y0, x1, y1, renderer)
51
- extractor = vtkExtractSelectedFrustum()
52
- extractor.SetFrustum(self._area_picker.GetFrustum())
53
-
54
- if self.desired_actor not in self._area_picker.GetProp3Ds():
55
- return self.get_picked()
56
-
57
- data: vtkPolyData = self.desired_actor.GetMapper().GetInput()
58
- if data is None:
59
- return self.get_picked()
60
-
61
- property_array = data.GetCellData().GetArray(self.property_name)
62
- if property_array is None:
63
- return self.get_picked()
64
-
65
- if property_array.GetNumberOfValues() < data.GetNumberOfCells():
66
- return self.get_picked()
67
-
68
- for cell in range(data.GetNumberOfCells()):
69
- property_val = property_array.GetValue(cell)
70
-
71
- # if the property was already picked
72
- # we don't even need to check if the cell
73
- # is inside the selection box
74
- if property_val in self._picked:
75
- continue
76
-
77
- bounds = [0, 0, 0, 0, 0, 0]
78
- data.GetCellBounds(cell, bounds)
79
- if extractor.OverallBoundsTest(bounds):
80
- self._picked.add(property_val)
81
- return self.get_picked()
82
-
83
- def get_picked(self):
84
- return set(self._picked)
1
+ from vtkmodules.vtkCommonDataModel import vtkPolyData
2
+ from vtkmodules.vtkFiltersGeneral import vtkExtractSelectedFrustum
3
+ from vtkmodules.vtkRenderingCore import (
4
+ vtkActor,
5
+ vtkAreaPicker,
6
+ vtkCellPicker,
7
+ vtkPropPicker,
8
+ vtkRenderer,
9
+ )
10
+
11
+
12
+ class CellPropertyAreaPicker(vtkPropPicker):
13
+ def __init__(self, property_name: str, desired_actor: vtkActor) -> None:
14
+ super().__init__()
15
+
16
+ self.property_name = property_name
17
+ self.desired_actor = desired_actor
18
+ self._picked = set()
19
+
20
+ self._cell_picker = vtkCellPicker()
21
+ self._area_picker = vtkAreaPicker()
22
+ self._cell_picker.SetTolerance(0.005)
23
+
24
+ def pick(self, x: float, y: float, z: float, renderer: vtkRenderer):
25
+ # maybe a behaviour like the one implemented in CellAreaPicker
26
+ # would fit nicely here
27
+ self._picked.clear()
28
+ self._cell_picker.Pick(x, y, z, renderer)
29
+
30
+ if self.desired_actor != self._cell_picker.GetActor():
31
+ return self.get_picked()
32
+
33
+ data: vtkPolyData = self.desired_actor.GetMapper().GetInput()
34
+ if data is None:
35
+ return self.get_picked()
36
+
37
+ property_array = data.GetCellData().GetArray(self.property_name)
38
+ if property_array is None:
39
+ return self.get_picked()
40
+
41
+ cell = self._cell_picker.GetCellId()
42
+ property_val = property_array.GetValue(cell)
43
+ self._picked.add(property_val)
44
+ return self.get_picked()
45
+
46
+ def area_pick(
47
+ self, x0: float, y0: float, x1: float, y1: float, renderer: vtkRenderer
48
+ ):
49
+ self._picked.clear()
50
+ self._area_picker.AreaPick(x0, y0, x1, y1, renderer)
51
+ extractor = vtkExtractSelectedFrustum()
52
+ extractor.SetFrustum(self._area_picker.GetFrustum())
53
+
54
+ if self.desired_actor not in self._area_picker.GetProp3Ds():
55
+ return self.get_picked()
56
+
57
+ data: vtkPolyData = self.desired_actor.GetMapper().GetInput()
58
+ if data is None:
59
+ return self.get_picked()
60
+
61
+ property_array = data.GetCellData().GetArray(self.property_name)
62
+ if property_array is None:
63
+ return self.get_picked()
64
+
65
+ if property_array.GetNumberOfValues() < data.GetNumberOfCells():
66
+ return self.get_picked()
67
+
68
+ for cell in range(data.GetNumberOfCells()):
69
+ property_val = property_array.GetValue(cell)
70
+
71
+ # if the property was already picked
72
+ # we don't even need to check if the cell
73
+ # is inside the selection box
74
+ if property_val in self._picked:
75
+ continue
76
+
77
+ bounds = [0, 0, 0, 0, 0, 0]
78
+ data.GetCellBounds(cell, bounds)
79
+ if extractor.OverallBoundsTest(bounds):
80
+ self._picked.add(property_val)
81
+ return self.get_picked()
82
+
83
+ def get_picked(self):
84
+ return set(self._picked)
@@ -1,2 +1,19 @@
1
- from .lines_data import LinesData
2
- from .vertices_data import VerticesData
1
+ from .lines_data import LinesData
2
+ from .vertices_data import VerticesData
3
+ from .arrows import (
4
+ create_arrow_source,
5
+ create_long_arrow_source,
6
+ create_double_arrow_source,
7
+ create_outwards_arrow_source,
8
+ )
9
+
10
+ from .simple_shapes import (
11
+ create_cone_source,
12
+ create_cube_source,
13
+ )
14
+
15
+ from .complex_shapes import (
16
+ create_spring_source,
17
+ create_damper_source,
18
+ create_mass_source,
19
+ )
@@ -0,0 +1,54 @@
1
+ from vtkmodules.vtkFiltersSources import vtkArrowSource
2
+ from vtkmodules.vtkFiltersCore import vtkAppendPolyData
3
+ from vibra.utils.polydata_utils import transform_polydata
4
+
5
+
6
+ def create_arrow_source():
7
+ source = vtkArrowSource()
8
+ source.SetTipLength(0.25)
9
+ source.Update()
10
+
11
+ return transform_polydata(
12
+ source.GetOutput(),
13
+ position=(-1, 0, 0),
14
+ )
15
+
16
+
17
+ def create_long_arrow_source():
18
+ source = vtkArrowSource()
19
+ source.SetTipResolution(4)
20
+ source.SetShaftResolution(4)
21
+ source.SetTipLength(0.85)
22
+ source.Update()
23
+
24
+ return transform_polydata(
25
+ source.GetOutput(),
26
+ position=(-1, 0, 0),
27
+ )
28
+
29
+
30
+ def create_double_arrow_source():
31
+ arrow1 = vtkArrowSource()
32
+ arrow1.SetTipLength(0.45)
33
+ arrow1.Update()
34
+
35
+ arrow2 = vtkArrowSource()
36
+ arrow2.SetTipLength(0.3)
37
+ arrow2.Update()
38
+
39
+ source = vtkAppendPolyData()
40
+ source.AddInputData(arrow1.GetOutput())
41
+ source.AddInputData(arrow2.GetOutput())
42
+ source.Update()
43
+
44
+ return transform_polydata(
45
+ source.GetOutput(),
46
+ position=(-1, 0, 0),
47
+ )
48
+
49
+
50
+ def create_outwards_arrow_source():
51
+ source = vtkArrowSource()
52
+ source.SetTipLength(0.25)
53
+ source.Update()
54
+ return source.GetOutput()
@@ -0,0 +1,26 @@
1
+ from vibra import SYMBOLS_DIR
2
+ from vibra.utils.polydata_utils import read_obj_file, read_stl_file, transform_polydata
3
+
4
+
5
+ def create_spring_source():
6
+ polydata = read_stl_file(SYMBOLS_DIR / "stl_files/spring_symbol.STL")
7
+ return transform_polydata(
8
+ polydata,
9
+ position=(-1.25, -0.18, 0.18),
10
+ rotation=(0, 90, 0),
11
+ )
12
+
13
+
14
+ def create_damper_source():
15
+ polydata = read_obj_file(SYMBOLS_DIR / "structural/lumped_damper.obj")
16
+ return transform_polydata(
17
+ polydata,
18
+ position=(-0.145, 0, 0),
19
+ )
20
+
21
+
22
+ def create_mass_source():
23
+ return transform_polydata(
24
+ read_obj_file(SYMBOLS_DIR / "structural/new_lumped_mass.obj"),
25
+ rotation=(0, -90, 0),
26
+ )
@@ -1,23 +1,23 @@
1
- from vtkmodules.vtkCommonCore import vtkPoints
2
- from vtkmodules.vtkCommonDataModel import VTK_LINE, vtkPolyData
3
-
4
-
5
- class LinesData(vtkPolyData):
6
- def __init__(self, lines_list) -> None:
7
- super().__init__()
8
-
9
- self.lines_list = lines_list
10
- self.build()
11
-
12
- def build(self):
13
- points = vtkPoints()
14
- self.Allocate(len(self.lines_list))
15
-
16
- current_point = 0
17
- for x0, y0, z0, x1, y1, z1 in self.lines_list:
18
- points.InsertPoint(current_point, x0, y0, z0)
19
- points.InsertPoint(current_point + 1, x1, y1, z1)
20
- self.InsertNextCell(VTK_LINE, 2, [current_point, current_point + 1])
21
- current_point += 2
22
-
23
- self.SetPoints(points)
1
+ from vtkmodules.vtkCommonCore import vtkPoints
2
+ from vtkmodules.vtkCommonDataModel import VTK_LINE, vtkPolyData
3
+
4
+
5
+ class LinesData(vtkPolyData):
6
+ def __init__(self, lines_list) -> None:
7
+ super().__init__()
8
+
9
+ self.lines_list = lines_list
10
+ self.build()
11
+
12
+ def build(self):
13
+ points = vtkPoints()
14
+ self.Allocate(len(self.lines_list))
15
+
16
+ current_point = 0
17
+ for x0, y0, z0, x1, y1, z1 in self.lines_list:
18
+ points.InsertPoint(current_point, x0, y0, z0)
19
+ points.InsertPoint(current_point + 1, x1, y1, z1)
20
+ self.InsertNextCell(VTK_LINE, 2, [current_point, current_point + 1])
21
+ current_point += 2
22
+
23
+ self.SetPoints(points)
@@ -0,0 +1,22 @@
1
+ from vibra.utils.polydata_utils import transform_polydata
2
+ from vtkmodules.vtkFiltersSources import (
3
+ vtkConeSource,
4
+ vtkCubeSource,
5
+ )
6
+
7
+ def create_cone_source():
8
+ source = vtkConeSource()
9
+ source.SetHeight(1)
10
+ source.SetRadius(0.5)
11
+ source.SetResolution(12)
12
+ source.Update()
13
+ return transform_polydata(
14
+ source.GetOutput(),
15
+ position=(-0.5, 0, 0),
16
+ )
17
+
18
+ def create_cube_source():
19
+ source = vtkCubeSource()
20
+ source.SetBounds(0, 1, 0, 1, 0, 1)
21
+ source.Update()
22
+ return source.GetOutput()
@@ -1,24 +1,24 @@
1
- from vtkmodules.vtkCommonCore import vtkPoints
2
- from vtkmodules.vtkCommonDataModel import VTK_VERTEX, vtkPolyData
3
-
4
-
5
- class VerticesData(vtkPolyData):
6
- """
7
- This class describes a polydata composed by a set of points.
8
- """
9
-
10
- def __init__(self, points_list: list[tuple[int, int, int]]) -> None:
11
- super().__init__()
12
-
13
- self.points_list = points_list
14
- self.build()
15
-
16
- def build(self):
17
- points = vtkPoints()
18
- self.Allocate(len(self.points_list))
19
-
20
- for i, (x, y, z) in enumerate(self.points_list):
21
- points.InsertNextPoint(x, y, z)
22
- self.InsertNextCell(VTK_VERTEX, 1, [i])
23
-
24
- self.SetPoints(points)
1
+ from vtkmodules.vtkCommonCore import vtkPoints
2
+ from vtkmodules.vtkCommonDataModel import VTK_VERTEX, vtkPolyData
3
+
4
+
5
+ class VerticesData(vtkPolyData):
6
+ """
7
+ This class describes a polydata composed by a set of points.
8
+ """
9
+
10
+ def __init__(self, points_list: list[tuple[int, int, int]]) -> None:
11
+ super().__init__()
12
+
13
+ self.points_list = points_list
14
+ self.build()
15
+
16
+ def build(self):
17
+ points = vtkPoints()
18
+ self.Allocate(len(self.points_list))
19
+
20
+ for i, (x, y, z) in enumerate(self.points_list):
21
+ points.InsertNextPoint(x, y, z)
22
+ self.InsertNextCell(VTK_VERTEX, 1, [i])
23
+
24
+ self.SetPoints(points)
@@ -1,2 +1,2 @@
1
- from .animated_render_widget import AnimatedRenderWidget
2
- from .common_render_widget import CommonRenderWidget
1
+ from .animated_render_widget import AnimatedRenderWidget
2
+ from .common_render_widget import CommonRenderWidget