molde 0.1.3__py3-none-any.whl → 0.1.4__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.
- molde/__init__.py +12 -6
- molde/__main__.py +74 -74
- molde/actors/__init__.py +5 -5
- molde/actors/common_symbols_actor.py +164 -164
- molde/actors/ghost_actor.py +12 -12
- molde/actors/lines_actor.py +31 -31
- molde/actors/round_points_actor.py +7 -7
- molde/actors/square_points_actor.py +32 -32
- molde/colors/__init__.py +1 -1
- molde/colors/color.py +150 -120
- molde/colors/color_names.py +124 -124
- molde/interactor_styles/__init__.py +2 -2
- molde/interactor_styles/arcball_camera_style.py +288 -288
- molde/interactor_styles/box_selection_style.py +70 -70
- molde/main_window.ui +864 -864
- molde/pickers/__init__.py +2 -2
- molde/pickers/cell_area_picker.py +61 -61
- molde/pickers/cell_property_area_picker.py +84 -84
- molde/poly_data/__init__.py +13 -13
- molde/poly_data/lines_data.py +23 -23
- molde/poly_data/vertices_data.py +24 -24
- molde/render_widgets/__init__.py +2 -2
- molde/render_widgets/animated_render_widget.py +164 -164
- molde/render_widgets/common_render_widget.py +429 -433
- molde/stylesheets/__init__.py +120 -119
- molde/stylesheets/common.qss +16 -16
- molde/stylesheets/create_color_page.py +61 -61
- molde/stylesheets/mainwindow.ui +611 -611
- molde/stylesheets/qcheckbox.qss +23 -18
- molde/stylesheets/qinputs.qss +81 -78
- molde/stylesheets/qlayouts.qss +23 -22
- molde/stylesheets/qmenubar.qss +12 -12
- molde/stylesheets/qprogressbar.qss +11 -11
- molde/stylesheets/qpushbutton.qss +91 -91
- molde/stylesheets/qradiobutton.qss +30 -30
- molde/stylesheets/qscrollbar.qss +29 -29
- molde/stylesheets/qslider.qss +61 -61
- molde/stylesheets/qtablewidget.qss +27 -27
- molde/stylesheets/qtabwidget.qss +28 -29
- molde/stylesheets/qtoolbar.qss +52 -62
- molde/stylesheets/qtoolbuttons.qss +14 -14
- molde/stylesheets/qtreewidget.qss +25 -25
- molde/ui_files/messages/new_loading_window.ui +73 -73
- molde/utils/__init__.py +8 -8
- molde/utils/format_sequences.py +44 -44
- molde/utils/poly_data_utils.py +66 -66
- molde/utils/tree_info.py +52 -52
- molde/windows/loading_window.py +189 -189
- {molde-0.1.3.dist-info → molde-0.1.4.dist-info}/METADATA +6 -4
- molde-0.1.4.dist-info/RECORD +68 -0
- {molde-0.1.3.dist-info → molde-0.1.4.dist-info}/WHEEL +1 -1
- molde-0.1.3.dist-info/RECORD +0 -68
molde/utils/format_sequences.py
CHANGED
@@ -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
|
molde/utils/poly_data_utils.py
CHANGED
@@ -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
|