molde 0.1.3__py3-none-any.whl → 0.1.5__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 (52) hide show
  1. molde/__init__.py +12 -6
  2. molde/__main__.py +77 -74
  3. molde/actors/__init__.py +5 -5
  4. molde/actors/common_symbols_actor.py +164 -164
  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 +150 -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 -288
  14. molde/interactor_styles/box_selection_style.py +87 -70
  15. molde/main_window.ui +864 -864
  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 +13 -13
  20. molde/poly_data/lines_data.py +23 -23
  21. molde/poly_data/vertices_data.py +24 -24
  22. molde/render_widgets/__init__.py +2 -2
  23. molde/render_widgets/animated_render_widget.py +164 -164
  24. molde/render_widgets/common_render_widget.py +429 -433
  25. molde/stylesheets/__init__.py +122 -119
  26. molde/stylesheets/common.qss +16 -16
  27. molde/stylesheets/create_color_page.py +61 -61
  28. molde/stylesheets/mainwindow.ui +611 -611
  29. molde/stylesheets/qcheckbox.qss +23 -18
  30. molde/stylesheets/qinputs.qss +81 -78
  31. molde/stylesheets/qlayouts.qss +23 -22
  32. molde/stylesheets/qmenubar.qss +12 -12
  33. molde/stylesheets/qprogressbar.qss +11 -11
  34. molde/stylesheets/qpushbutton.qss +91 -91
  35. molde/stylesheets/qradiobutton.qss +30 -30
  36. molde/stylesheets/qscrollbar.qss +29 -29
  37. molde/stylesheets/qslider.qss +61 -61
  38. molde/stylesheets/qtablewidget.qss +27 -27
  39. molde/stylesheets/qtabwidget.qss +28 -29
  40. molde/stylesheets/qtoolbar.qss +52 -62
  41. molde/stylesheets/qtoolbuttons.qss +14 -14
  42. molde/stylesheets/qtreewidget.qss +25 -25
  43. molde/ui_files/messages/new_loading_window.ui +73 -73
  44. molde/utils/__init__.py +8 -8
  45. molde/utils/format_sequences.py +44 -44
  46. molde/utils/poly_data_utils.py +66 -66
  47. molde/utils/tree_info.py +52 -52
  48. molde/windows/loading_window.py +189 -189
  49. {molde-0.1.3.dist-info → molde-0.1.5.dist-info}/METADATA +6 -4
  50. molde-0.1.5.dist-info/RECORD +68 -0
  51. {molde-0.1.3.dist-info → molde-0.1.5.dist-info}/WHEEL +1 -1
  52. molde-0.1.3.dist-info/RECORD +0 -68
@@ -1,44 +1,44 @@
1
- from math import ceil, floor
2
-
3
-
4
- def format_long_sequence(
5
- sequence, max_width=30, max_lines=3, item_separator=", ", identation="► "
6
- ):
7
- strings = [str(i) for i in sequence]
8
-
9
- initial_lines = []
10
- for _ in range(ceil(max_lines / 2)):
11
- new_line = _extract_line(strings, max_width, len(item_separator))
12
- if not new_line:
13
- break
14
- initial_lines.append(new_line)
15
- strings = strings[len(new_line) :]
16
-
17
- strings.reverse()
18
- final_lines = []
19
- for _ in range(floor(max_lines / 2)):
20
- new_line = _extract_line(strings, max_width, len(item_separator))
21
- if not new_line:
22
- break
23
- final_lines.append(new_line)
24
- strings = strings[len(new_line) :]
25
- final_lines.reverse()
26
-
27
- if strings and initial_lines:
28
- initial_lines[-1] = ["..."]
29
- lines = initial_lines + final_lines
30
-
31
- formated_lines = [item_separator.join(line) for line in lines]
32
- concatenated_lines = identation + f"\n{identation}".join(formated_lines)
33
- return concatenated_lines
34
-
35
-
36
- def _extract_line(strings, max_width, separator_size):
37
- line = []
38
- current_width = 0
39
- for string in strings:
40
- if len(string) + current_width + separator_size > max_width:
41
- break
42
- line.append(string)
43
- current_width += len(string) + separator_size
44
- return line
1
+ from math import ceil, floor
2
+
3
+
4
+ def format_long_sequence(
5
+ sequence, max_width=30, max_lines=3, item_separator=", ", identation="► "
6
+ ):
7
+ strings = [str(i) for i in sequence]
8
+
9
+ initial_lines = []
10
+ for _ in range(ceil(max_lines / 2)):
11
+ new_line = _extract_line(strings, max_width, len(item_separator))
12
+ if not new_line:
13
+ break
14
+ initial_lines.append(new_line)
15
+ strings = strings[len(new_line) :]
16
+
17
+ strings.reverse()
18
+ final_lines = []
19
+ for _ in range(floor(max_lines / 2)):
20
+ new_line = _extract_line(strings, max_width, len(item_separator))
21
+ if not new_line:
22
+ break
23
+ final_lines.append(new_line)
24
+ strings = strings[len(new_line) :]
25
+ final_lines.reverse()
26
+
27
+ if strings and initial_lines:
28
+ initial_lines[-1] = ["..."]
29
+ lines = initial_lines + final_lines
30
+
31
+ formated_lines = [item_separator.join(line) for line in lines]
32
+ concatenated_lines = identation + f"\n{identation}".join(formated_lines)
33
+ return concatenated_lines
34
+
35
+
36
+ def _extract_line(strings, max_width, separator_size):
37
+ line = []
38
+ current_width = 0
39
+ for string in strings:
40
+ if len(string) + current_width + separator_size > max_width:
41
+ break
42
+ line.append(string)
43
+ current_width += len(string) + separator_size
44
+ return line
@@ -1,66 +1,66 @@
1
- from pathlib import Path
2
-
3
- from vtkmodules.vtkCommonCore import vtkUnsignedCharArray, vtkUnsignedIntArray
4
- from vtkmodules.vtkCommonDataModel import vtkPolyData
5
- from vtkmodules.vtkCommonTransforms import vtkTransform
6
- from vtkmodules.vtkFiltersGeneral import vtkTransformPolyDataFilter
7
- from vtkmodules.vtkIOGeometry import vtkOBJReader, vtkSTLReader
8
-
9
-
10
- def set_polydata_colors(data: vtkPolyData, color: tuple) -> vtkUnsignedCharArray:
11
- n_cells = data.GetNumberOfCells()
12
- cell_colors = vtkUnsignedCharArray()
13
- cell_colors.SetName("colors")
14
- cell_colors.SetNumberOfComponents(3)
15
- cell_colors.SetNumberOfTuples(n_cells)
16
- cell_colors.FillComponent(0, color[0])
17
- cell_colors.FillComponent(1, color[1])
18
- cell_colors.FillComponent(2, color[2])
19
- data.GetCellData().SetScalars(cell_colors)
20
- return cell_colors
21
-
22
-
23
- def set_polydata_property(
24
- data: vtkPolyData, property_data: int, property_name: str
25
- ) -> vtkUnsignedIntArray:
26
- n_cells = data.GetNumberOfCells()
27
- cell_identifier = vtkUnsignedIntArray()
28
- cell_identifier.SetName(property_name)
29
- cell_identifier.SetNumberOfTuples(n_cells)
30
- cell_identifier.Fill(property_data)
31
- data.GetCellData().AddArray(cell_identifier)
32
- return cell_identifier
33
-
34
-
35
- def read_obj_file(path: str | Path) -> vtkPolyData:
36
- reader = vtkOBJReader()
37
- reader.SetFileName(str(path))
38
- reader.Update()
39
- return reader.GetOutput()
40
-
41
-
42
- def read_stl_file(path: str | Path) -> vtkPolyData:
43
- reader = vtkSTLReader()
44
- reader.SetFileName(str(path))
45
- reader.Update()
46
- return reader.GetOutput()
47
-
48
-
49
- def transform_polydata(
50
- polydata: vtkPolyData,
51
- position=(0, 0, 0),
52
- rotation=(0, 0, 0),
53
- scale=(1, 1, 1),
54
- ) -> vtkPolyData:
55
- transform = vtkTransform()
56
- transform.Translate(position)
57
- transform.Scale(scale)
58
- transform.RotateX(rotation[0])
59
- transform.RotateY(rotation[1])
60
- transform.RotateZ(rotation[2])
61
- transform.Update()
62
- transformation = vtkTransformPolyDataFilter()
63
- transformation.SetTransform(transform)
64
- transformation.SetInputData(polydata)
65
- transformation.Update()
66
- return transformation.GetOutput()
1
+ from pathlib import Path
2
+
3
+ from vtkmodules.vtkCommonCore import vtkUnsignedCharArray, vtkUnsignedIntArray
4
+ from vtkmodules.vtkCommonDataModel import vtkPolyData
5
+ from vtkmodules.vtkCommonTransforms import vtkTransform
6
+ from vtkmodules.vtkFiltersGeneral import vtkTransformPolyDataFilter
7
+ from vtkmodules.vtkIOGeometry import vtkOBJReader, vtkSTLReader
8
+
9
+
10
+ def set_polydata_colors(data: vtkPolyData, color: tuple) -> vtkUnsignedCharArray:
11
+ n_cells = data.GetNumberOfCells()
12
+ cell_colors = vtkUnsignedCharArray()
13
+ cell_colors.SetName("colors")
14
+ cell_colors.SetNumberOfComponents(3)
15
+ cell_colors.SetNumberOfTuples(n_cells)
16
+ cell_colors.FillComponent(0, color[0])
17
+ cell_colors.FillComponent(1, color[1])
18
+ cell_colors.FillComponent(2, color[2])
19
+ data.GetCellData().SetScalars(cell_colors)
20
+ return cell_colors
21
+
22
+
23
+ def set_polydata_property(
24
+ data: vtkPolyData, property_data: int, property_name: str
25
+ ) -> vtkUnsignedIntArray:
26
+ n_cells = data.GetNumberOfCells()
27
+ cell_identifier = vtkUnsignedIntArray()
28
+ cell_identifier.SetName(property_name)
29
+ cell_identifier.SetNumberOfTuples(n_cells)
30
+ cell_identifier.Fill(property_data)
31
+ data.GetCellData().AddArray(cell_identifier)
32
+ return cell_identifier
33
+
34
+
35
+ def read_obj_file(path: str | Path) -> vtkPolyData:
36
+ reader = vtkOBJReader()
37
+ reader.SetFileName(str(path))
38
+ reader.Update()
39
+ return reader.GetOutput()
40
+
41
+
42
+ def read_stl_file(path: str | Path) -> vtkPolyData:
43
+ reader = vtkSTLReader()
44
+ reader.SetFileName(str(path))
45
+ reader.Update()
46
+ return reader.GetOutput()
47
+
48
+
49
+ def transform_polydata(
50
+ polydata: vtkPolyData,
51
+ position=(0, 0, 0),
52
+ rotation=(0, 0, 0),
53
+ scale=(1, 1, 1),
54
+ ) -> vtkPolyData:
55
+ transform = vtkTransform()
56
+ transform.Translate(position)
57
+ transform.Scale(scale)
58
+ transform.RotateX(rotation[0])
59
+ transform.RotateY(rotation[1])
60
+ transform.RotateZ(rotation[2])
61
+ transform.Update()
62
+ transformation = vtkTransformPolyDataFilter()
63
+ transformation.SetTransform(transform)
64
+ transformation.SetInputData(polydata)
65
+ transformation.Update()
66
+ return transformation.GetOutput()
molde/utils/tree_info.py CHANGED
@@ -1,52 +1,52 @@
1
- from collections import namedtuple
2
-
3
- TreeItem = namedtuple("TreeItem", ["name", "data", "unity"])
4
- SEPARATOR = TreeItem("", "", "")
5
-
6
-
7
- class TreeInfo:
8
- def __init__(self, name: str) -> None:
9
- self.name = name
10
- self.items = list()
11
-
12
- def add_separator(self):
13
- self.items.append(TreeItem("", "", ""))
14
- return TreeItem("", "", "")
15
-
16
- def add_item(self, name, data, unity="") -> TreeItem:
17
- item = TreeItem(name, data, unity)
18
- self.items.append(item)
19
- return item
20
-
21
- def items_without_extra_separators(self):
22
- extra_separators = 0
23
- for item in reversed(self.items):
24
- if item != SEPARATOR:
25
- break
26
- extra_separators += 1
27
- return self.items[: len(self.items) - extra_separators]
28
-
29
- def __str__(self):
30
- title = self.name.upper()
31
- longest_name = max(0, *[len(item.name) for item in self.items])
32
- longest_data = max(0, *[len(str(item.data)) for item in self.items])
33
- spaces = longest_name + longest_data + 3
34
-
35
- text = f"{title} \n"
36
- pruned_items = self.items_without_extra_separators()
37
-
38
- for item in pruned_items[:-1]:
39
- if item == SEPARATOR:
40
- text += "│\n"
41
- continue
42
- spacer = " " * (spaces - len(item.name) - len(str(item.data)))
43
- unity = f"[{item.unity}]" if item.unity else ""
44
- text += f"├─ {item.name}: {spacer}{item.data} {unity}\n"
45
-
46
- # last item
47
- item = pruned_items[-1]
48
- spacer = " " * (spaces - len(item.name) - len(str(item.data)))
49
- unity = f"[{item.unity}]" if item.unity else ""
50
- text += f"╰─ {item.name}: {spacer}{item.data} {unity}\n"
51
- text += "\n"
52
- return text
1
+ from collections import namedtuple
2
+
3
+ TreeItem = namedtuple("TreeItem", ["name", "data", "unity"])
4
+ SEPARATOR = TreeItem("", "", "")
5
+
6
+
7
+ class TreeInfo:
8
+ def __init__(self, name: str) -> None:
9
+ self.name = name
10
+ self.items = list()
11
+
12
+ def add_separator(self):
13
+ self.items.append(TreeItem("", "", ""))
14
+ return TreeItem("", "", "")
15
+
16
+ def add_item(self, name, data, unity="") -> TreeItem:
17
+ item = TreeItem(name, data, unity)
18
+ self.items.append(item)
19
+ return item
20
+
21
+ def items_without_extra_separators(self):
22
+ extra_separators = 0
23
+ for item in reversed(self.items):
24
+ if item != SEPARATOR:
25
+ break
26
+ extra_separators += 1
27
+ return self.items[: len(self.items) - extra_separators]
28
+
29
+ def __str__(self):
30
+ title = self.name.upper()
31
+ longest_name = max(0, *[len(item.name) for item in self.items])
32
+ longest_data = max(0, *[len(str(item.data)) for item in self.items])
33
+ spaces = longest_name + longest_data + 3
34
+
35
+ text = f"{title} \n"
36
+ pruned_items = self.items_without_extra_separators()
37
+
38
+ for item in pruned_items[:-1]:
39
+ if item == SEPARATOR:
40
+ text += "│\n"
41
+ continue
42
+ spacer = " " * (spaces - len(item.name) - len(str(item.data)))
43
+ unity = f"[{item.unity}]" if item.unity else ""
44
+ text += f"├─ {item.name}: {spacer}{item.data} {unity}\n"
45
+
46
+ # last item
47
+ item = pruned_items[-1]
48
+ spacer = " " * (spaces - len(item.name) - len(str(item.data)))
49
+ unity = f"[{item.unity}]" if item.unity else ""
50
+ text += f"╰─ {item.name}: {spacer}{item.data} {unity}\n"
51
+ text += "\n"
52
+ return text