molde 0.1.12__py3-none-any.whl → 0.1.14__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 -12
- molde/__main__.py +81 -81
- molde/actors/__init__.py +5 -5
- molde/actors/common_symbols_actor.py +148 -148
- 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 +273 -150
- 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 +87 -87
- 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 -429
- molde/stylesheets/__init__.py +122 -122
- molde/stylesheets/common.qss +15 -15
- molde/stylesheets/create_color_page.py +61 -61
- molde/stylesheets/mainwindow.ui +646 -646
- molde/stylesheets/qcheckbox.qss +23 -23
- molde/stylesheets/qinputs.qss +81 -81
- molde/stylesheets/qlayouts.qss +23 -23
- molde/stylesheets/qmenubar.qss +12 -12
- molde/stylesheets/qprogressbar.qss +11 -11
- molde/stylesheets/qpushbutton.qss +89 -89
- 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 -28
- molde/stylesheets/qtoolbar.qss +63 -63
- 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.12.dist-info → molde-0.1.14.dist-info}/METADATA +1 -1
- molde-0.1.14.dist-info/RECORD +68 -0
- {molde-0.1.12.dist-info → molde-0.1.14.dist-info}/WHEEL +1 -1
- molde-0.1.12.dist-info/RECORD +0 -68
molde/__init__.py
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
from pathlib import Path
|
2
|
-
from qtpy.uic import loadUi
|
3
|
-
from .colors import Color
|
4
|
-
|
5
|
-
MOLDE_DIR = Path(__file__).parent
|
6
|
-
UI_DIR = MOLDE_DIR / "ui_files/"
|
7
|
-
|
8
|
-
def load_ui(uifile: str | Path, baseinstance, working_directory: str| Path = None):
|
9
|
-
from PySide6.QtCore import QDir
|
10
|
-
if working_directory is not None:
|
11
|
-
working_directory = QDir(working_directory)
|
12
|
-
return loadUi(uifile, baseinstance, working_directory)
|
1
|
+
from pathlib import Path
|
2
|
+
from qtpy.uic import loadUi
|
3
|
+
from .colors import Color
|
4
|
+
|
5
|
+
MOLDE_DIR = Path(__file__).parent
|
6
|
+
UI_DIR = MOLDE_DIR / "ui_files/"
|
7
|
+
|
8
|
+
def load_ui(uifile: str | Path, baseinstance, working_directory: str| Path = None):
|
9
|
+
from PySide6.QtCore import QDir
|
10
|
+
if working_directory is not None:
|
11
|
+
working_directory = QDir(working_directory)
|
12
|
+
return loadUi(uifile, baseinstance, working_directory)
|
molde/__main__.py
CHANGED
@@ -1,81 +1,81 @@
|
|
1
|
-
import os, sys
|
2
|
-
from PySide6.QtWidgets import QMainWindow, QApplication, QMessageBox, QLineEdit, QTableWidgetItem, QPushButton, QLabel, QSlider
|
3
|
-
from PySide6.QtGui import QColor, QFont
|
4
|
-
from PySide6.QtCore import Qt
|
5
|
-
from time import time
|
6
|
-
|
7
|
-
from vtkmodules.vtkFiltersSources import vtkCylinderSource
|
8
|
-
from vtkmodules.vtkRenderingCore import vtkPolyDataMapper, vtkActor
|
9
|
-
|
10
|
-
from molde import MOLDE_DIR, load_ui
|
11
|
-
from molde import stylesheets
|
12
|
-
from molde.render_widgets.common_render_widget import CommonRenderWidget
|
13
|
-
|
14
|
-
|
15
|
-
class Example(QMainWindow):
|
16
|
-
def __init__(self, parent=None) -> None:
|
17
|
-
super().__init__()
|
18
|
-
load_ui(MOLDE_DIR / "stylesheets/mainwindow.ui", self, MOLDE_DIR / "stylesheets")
|
19
|
-
self.current_theme = "light"
|
20
|
-
|
21
|
-
self.change_theme_button.clicked.connect(self.change_theme)
|
22
|
-
# self.render_widget: CommonRenderWidget
|
23
|
-
# self.render_widget.create_axes()
|
24
|
-
# self.render_widget.create_scale_bar()
|
25
|
-
# self.render_widget.create_color_bar()
|
26
|
-
# self.render_widget.set_info_text("Hola\nque\ntal?")
|
27
|
-
|
28
|
-
cylinder = vtkCylinderSource()
|
29
|
-
cylinder.SetResolution(8)
|
30
|
-
cylinder_mapper = vtkPolyDataMapper()
|
31
|
-
cylinder_mapper.SetInputConnection(cylinder.GetOutputPort())
|
32
|
-
cylinder_actor = vtkActor()
|
33
|
-
cylinder_actor.SetMapper(cylinder_mapper)
|
34
|
-
# self.render_widget.add_actors(cylinder_actor)
|
35
|
-
|
36
|
-
self.botao1 = QPushButton()
|
37
|
-
self.label = QLabel("Olha o sapooo")
|
38
|
-
self.label.setProperty("type", "logo")
|
39
|
-
# font = QFont()
|
40
|
-
# font.setFamily("Bauhaus 93")
|
41
|
-
# self.label.setFont(font)
|
42
|
-
print(self.label.fontInfo().family())
|
43
|
-
|
44
|
-
self.slider = QSlider(Qt.Orientation.Horizontal)
|
45
|
-
self.slider.setValue(50)
|
46
|
-
self.botao1.setText("Olha a faca")
|
47
|
-
self.toolbar_2.addWidget(self.label)
|
48
|
-
self.toolbar_2.setDisabled(False)
|
49
|
-
|
50
|
-
item = QTableWidgetItem("fr")
|
51
|
-
item.setBackground(QColor("#FF0000"))
|
52
|
-
self.tableWidget.setItem(0, 0, item)
|
53
|
-
self.show()
|
54
|
-
|
55
|
-
def change_theme(self):
|
56
|
-
if self.current_theme == "light":
|
57
|
-
self.current_theme = "dark"
|
58
|
-
else:
|
59
|
-
self.current_theme = "light"
|
60
|
-
|
61
|
-
# self.render_widget.set_theme(self.current_theme)
|
62
|
-
stylesheets.set_theme(self.current_theme)
|
63
|
-
|
64
|
-
def closeEvent(self, event):
|
65
|
-
close = QMessageBox.question(
|
66
|
-
self,
|
67
|
-
"QUIT",
|
68
|
-
"Would you like to close the application?",
|
69
|
-
QMessageBox.Yes | QMessageBox.No
|
70
|
-
)
|
71
|
-
QApplication.quit()
|
72
|
-
|
73
|
-
|
74
|
-
if __name__ == "__main__":
|
75
|
-
# Make the window scale evenly for every monitor
|
76
|
-
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
|
77
|
-
|
78
|
-
app = QApplication(sys.argv)
|
79
|
-
e = Example()
|
80
|
-
e.change_theme()
|
81
|
-
sys.exit(app.exec())
|
1
|
+
import os, sys
|
2
|
+
from PySide6.QtWidgets import QMainWindow, QApplication, QMessageBox, QLineEdit, QTableWidgetItem, QPushButton, QLabel, QSlider
|
3
|
+
from PySide6.QtGui import QColor, QFont
|
4
|
+
from PySide6.QtCore import Qt
|
5
|
+
from time import time
|
6
|
+
|
7
|
+
from vtkmodules.vtkFiltersSources import vtkCylinderSource
|
8
|
+
from vtkmodules.vtkRenderingCore import vtkPolyDataMapper, vtkActor
|
9
|
+
|
10
|
+
from molde import MOLDE_DIR, load_ui
|
11
|
+
from molde import stylesheets
|
12
|
+
from molde.render_widgets.common_render_widget import CommonRenderWidget
|
13
|
+
|
14
|
+
|
15
|
+
class Example(QMainWindow):
|
16
|
+
def __init__(self, parent=None) -> None:
|
17
|
+
super().__init__()
|
18
|
+
load_ui(MOLDE_DIR / "stylesheets/mainwindow.ui", self, MOLDE_DIR / "stylesheets")
|
19
|
+
self.current_theme = "light"
|
20
|
+
|
21
|
+
self.change_theme_button.clicked.connect(self.change_theme)
|
22
|
+
# self.render_widget: CommonRenderWidget
|
23
|
+
# self.render_widget.create_axes()
|
24
|
+
# self.render_widget.create_scale_bar()
|
25
|
+
# self.render_widget.create_color_bar()
|
26
|
+
# self.render_widget.set_info_text("Hola\nque\ntal?")
|
27
|
+
|
28
|
+
cylinder = vtkCylinderSource()
|
29
|
+
cylinder.SetResolution(8)
|
30
|
+
cylinder_mapper = vtkPolyDataMapper()
|
31
|
+
cylinder_mapper.SetInputConnection(cylinder.GetOutputPort())
|
32
|
+
cylinder_actor = vtkActor()
|
33
|
+
cylinder_actor.SetMapper(cylinder_mapper)
|
34
|
+
# self.render_widget.add_actors(cylinder_actor)
|
35
|
+
|
36
|
+
self.botao1 = QPushButton()
|
37
|
+
self.label = QLabel("Olha o sapooo")
|
38
|
+
self.label.setProperty("type", "logo")
|
39
|
+
# font = QFont()
|
40
|
+
# font.setFamily("Bauhaus 93")
|
41
|
+
# self.label.setFont(font)
|
42
|
+
print(self.label.fontInfo().family())
|
43
|
+
|
44
|
+
self.slider = QSlider(Qt.Orientation.Horizontal)
|
45
|
+
self.slider.setValue(50)
|
46
|
+
self.botao1.setText("Olha a faca")
|
47
|
+
self.toolbar_2.addWidget(self.label)
|
48
|
+
self.toolbar_2.setDisabled(False)
|
49
|
+
|
50
|
+
item = QTableWidgetItem("fr")
|
51
|
+
item.setBackground(QColor("#FF0000"))
|
52
|
+
self.tableWidget.setItem(0, 0, item)
|
53
|
+
self.show()
|
54
|
+
|
55
|
+
def change_theme(self):
|
56
|
+
if self.current_theme == "light":
|
57
|
+
self.current_theme = "dark"
|
58
|
+
else:
|
59
|
+
self.current_theme = "light"
|
60
|
+
|
61
|
+
# self.render_widget.set_theme(self.current_theme)
|
62
|
+
stylesheets.set_theme(self.current_theme)
|
63
|
+
|
64
|
+
def closeEvent(self, event):
|
65
|
+
close = QMessageBox.question(
|
66
|
+
self,
|
67
|
+
"QUIT",
|
68
|
+
"Would you like to close the application?",
|
69
|
+
QMessageBox.Yes | QMessageBox.No
|
70
|
+
)
|
71
|
+
QApplication.quit()
|
72
|
+
|
73
|
+
|
74
|
+
if __name__ == "__main__":
|
75
|
+
# Make the window scale evenly for every monitor
|
76
|
+
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
|
77
|
+
|
78
|
+
app = QApplication(sys.argv)
|
79
|
+
e = Example()
|
80
|
+
e.change_theme()
|
81
|
+
sys.exit(app.exec())
|
molde/actors/__init__.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
from .ghost_actor import GhostActor
|
2
|
-
from .lines_actor import LinesActor
|
3
|
-
from .round_points_actor import RoundPointsActor
|
4
|
-
from .square_points_actor import SquarePointsActor
|
5
|
-
from .common_symbols_actor import CommonSymbolsActorFixedSize, CommonSymbolsActorVariableSize
|
1
|
+
from .ghost_actor import GhostActor
|
2
|
+
from .lines_actor import LinesActor
|
3
|
+
from .round_points_actor import RoundPointsActor
|
4
|
+
from .square_points_actor import SquarePointsActor
|
5
|
+
from .common_symbols_actor import CommonSymbolsActorFixedSize, CommonSymbolsActorVariableSize
|
@@ -1,148 +1,148 @@
|
|
1
|
-
from dataclasses import dataclass
|
2
|
-
from typing import Callable
|
3
|
-
|
4
|
-
from vtkmodules.vtkCommonCore import (
|
5
|
-
vtkDoubleArray,
|
6
|
-
vtkIntArray,
|
7
|
-
vtkPoints,
|
8
|
-
vtkUnsignedCharArray,
|
9
|
-
)
|
10
|
-
from vtkmodules.vtkCommonDataModel import vtkPolyData
|
11
|
-
from vtkmodules.vtkRenderingCore import (
|
12
|
-
vtkActor,
|
13
|
-
vtkDistanceToCamera,
|
14
|
-
vtkGlyph3DMapper,
|
15
|
-
vtkRenderer,
|
16
|
-
)
|
17
|
-
|
18
|
-
from molde import Color
|
19
|
-
|
20
|
-
Triple = tuple[float, float, float]
|
21
|
-
|
22
|
-
|
23
|
-
@dataclass
|
24
|
-
class Symbol:
|
25
|
-
shape_function: Callable
|
26
|
-
position: Triple
|
27
|
-
orientation: Triple
|
28
|
-
color: Color
|
29
|
-
scale: float
|
30
|
-
|
31
|
-
|
32
|
-
class CommonSymbolsActor(vtkActor):
|
33
|
-
def __init__(self, *args, **kwargs):
|
34
|
-
self._symbols: list[Symbol] = list()
|
35
|
-
|
36
|
-
def add_symbol(
|
37
|
-
self,
|
38
|
-
shape_function: Callable,
|
39
|
-
position: Triple,
|
40
|
-
orientation: Triple,
|
41
|
-
color: Triple,
|
42
|
-
scale: float = 1,
|
43
|
-
):
|
44
|
-
symbol = Symbol(
|
45
|
-
shape_function,
|
46
|
-
position,
|
47
|
-
orientation,
|
48
|
-
color,
|
49
|
-
scale,
|
50
|
-
)
|
51
|
-
self._symbols.append(symbol)
|
52
|
-
|
53
|
-
def clear_symbols(self):
|
54
|
-
self._symbols.clear()
|
55
|
-
|
56
|
-
def common_build(self):
|
57
|
-
self.data = vtkPolyData()
|
58
|
-
points = vtkPoints()
|
59
|
-
|
60
|
-
self.mapper: vtkGlyph3DMapper = vtkGlyph3DMapper()
|
61
|
-
self.SetMapper(self.mapper)
|
62
|
-
|
63
|
-
sources = vtkIntArray()
|
64
|
-
sources.SetName("sources")
|
65
|
-
|
66
|
-
rotations = vtkDoubleArray()
|
67
|
-
rotations.SetNumberOfComponents(3)
|
68
|
-
rotations.SetName("rotations")
|
69
|
-
|
70
|
-
scales = vtkDoubleArray()
|
71
|
-
scales.SetName("scales")
|
72
|
-
|
73
|
-
colors = vtkUnsignedCharArray()
|
74
|
-
colors.SetNumberOfComponents(4)
|
75
|
-
colors.SetName("colors")
|
76
|
-
|
77
|
-
shape_function_to_index = dict()
|
78
|
-
for symbol in self._symbols:
|
79
|
-
if symbol.shape_function not in shape_function_to_index:
|
80
|
-
index = len(shape_function_to_index)
|
81
|
-
shape_function_to_index[symbol.shape_function] = index
|
82
|
-
self.mapper.SetSourceData(index, symbol.shape_function())
|
83
|
-
|
84
|
-
points.InsertNextPoint(symbol.position)
|
85
|
-
rotations.InsertNextTuple(symbol.orientation)
|
86
|
-
colors.InsertNextTuple(symbol.color.to_rgba())
|
87
|
-
scales.InsertNextValue(symbol.scale)
|
88
|
-
sources.InsertNextValue(shape_function_to_index[symbol.shape_function])
|
89
|
-
|
90
|
-
self.data.SetPoints(points)
|
91
|
-
self.data.GetPointData().AddArray(sources)
|
92
|
-
self.data.GetPointData().AddArray(rotations)
|
93
|
-
self.data.GetPointData().AddArray(scales)
|
94
|
-
self.data.GetPointData().SetScalars(colors)
|
95
|
-
|
96
|
-
def set_zbuffer_offsets(self, factor: float, units: float):
|
97
|
-
"""
|
98
|
-
This functions is usefull to make a object appear in front of the others.
|
99
|
-
If the object should never be hidden, the parameters should be set to
|
100
|
-
factor = 1 and offset = -66000.
|
101
|
-
"""
|
102
|
-
self.mapper.SetResolveCoincidentTopologyToPolygonOffset()
|
103
|
-
self.mapper.SetRelativeCoincidentTopologyLineOffsetParameters(factor, units)
|
104
|
-
self.mapper.SetRelativeCoincidentTopologyPolygonOffsetParameters(factor, units)
|
105
|
-
self.mapper.SetRelativeCoincidentTopologyPointOffsetParameter(units)
|
106
|
-
self.mapper.Update()
|
107
|
-
|
108
|
-
|
109
|
-
class CommonSymbolsActorFixedSize(CommonSymbolsActor):
|
110
|
-
def build(self):
|
111
|
-
self.common_build()
|
112
|
-
|
113
|
-
self.mapper.SetInputData(self.data)
|
114
|
-
self.mapper.SetSourceIndexArray("sources")
|
115
|
-
self.mapper.SetOrientationArray("rotations")
|
116
|
-
self.mapper.SetScaleArray("scales")
|
117
|
-
self.mapper.SourceIndexingOn()
|
118
|
-
self.mapper.ScalarVisibilityOn()
|
119
|
-
self.mapper.SetScaleModeToScaleByMagnitude()
|
120
|
-
self.mapper.SetScalarModeToUsePointData()
|
121
|
-
self.mapper.SetOrientationModeToDirection()
|
122
|
-
self.mapper.Update()
|
123
|
-
|
124
|
-
|
125
|
-
class CommonSymbolsActorVariableSize(CommonSymbolsActor):
|
126
|
-
def __init__(self, renderer: vtkRenderer):
|
127
|
-
super().__init__()
|
128
|
-
self.renderer = renderer
|
129
|
-
|
130
|
-
def build(self):
|
131
|
-
self.common_build()
|
132
|
-
|
133
|
-
distance_to_camera = vtkDistanceToCamera()
|
134
|
-
distance_to_camera.SetInputData(self.data)
|
135
|
-
distance_to_camera.SetScreenSize(40)
|
136
|
-
distance_to_camera.SetRenderer(self.renderer)
|
137
|
-
|
138
|
-
self.mapper.SetInputConnection(distance_to_camera.GetOutputPort())
|
139
|
-
self.mapper.SetSourceIndexArray("sources")
|
140
|
-
self.mapper.SetOrientationArray("rotations")
|
141
|
-
self.mapper.SetScaleArray("DistanceToCamera")
|
142
|
-
self.mapper.SourceIndexingOn()
|
143
|
-
self.mapper.ScalarVisibilityOn()
|
144
|
-
self.mapper.SetScaleModeToScaleByMagnitude()
|
145
|
-
self.mapper.SetScalarModeToUsePointData()
|
146
|
-
self.mapper.SetOrientationModeToDirection()
|
147
|
-
|
148
|
-
self.mapper.Update()
|
1
|
+
from dataclasses import dataclass
|
2
|
+
from typing import Callable
|
3
|
+
|
4
|
+
from vtkmodules.vtkCommonCore import (
|
5
|
+
vtkDoubleArray,
|
6
|
+
vtkIntArray,
|
7
|
+
vtkPoints,
|
8
|
+
vtkUnsignedCharArray,
|
9
|
+
)
|
10
|
+
from vtkmodules.vtkCommonDataModel import vtkPolyData
|
11
|
+
from vtkmodules.vtkRenderingCore import (
|
12
|
+
vtkActor,
|
13
|
+
vtkDistanceToCamera,
|
14
|
+
vtkGlyph3DMapper,
|
15
|
+
vtkRenderer,
|
16
|
+
)
|
17
|
+
|
18
|
+
from molde import Color
|
19
|
+
|
20
|
+
Triple = tuple[float, float, float]
|
21
|
+
|
22
|
+
|
23
|
+
@dataclass
|
24
|
+
class Symbol:
|
25
|
+
shape_function: Callable
|
26
|
+
position: Triple
|
27
|
+
orientation: Triple
|
28
|
+
color: Color
|
29
|
+
scale: float
|
30
|
+
|
31
|
+
|
32
|
+
class CommonSymbolsActor(vtkActor):
|
33
|
+
def __init__(self, *args, **kwargs):
|
34
|
+
self._symbols: list[Symbol] = list()
|
35
|
+
|
36
|
+
def add_symbol(
|
37
|
+
self,
|
38
|
+
shape_function: Callable,
|
39
|
+
position: Triple,
|
40
|
+
orientation: Triple,
|
41
|
+
color: Triple,
|
42
|
+
scale: float = 1,
|
43
|
+
):
|
44
|
+
symbol = Symbol(
|
45
|
+
shape_function,
|
46
|
+
position,
|
47
|
+
orientation,
|
48
|
+
color,
|
49
|
+
scale,
|
50
|
+
)
|
51
|
+
self._symbols.append(symbol)
|
52
|
+
|
53
|
+
def clear_symbols(self):
|
54
|
+
self._symbols.clear()
|
55
|
+
|
56
|
+
def common_build(self):
|
57
|
+
self.data = vtkPolyData()
|
58
|
+
points = vtkPoints()
|
59
|
+
|
60
|
+
self.mapper: vtkGlyph3DMapper = vtkGlyph3DMapper()
|
61
|
+
self.SetMapper(self.mapper)
|
62
|
+
|
63
|
+
sources = vtkIntArray()
|
64
|
+
sources.SetName("sources")
|
65
|
+
|
66
|
+
rotations = vtkDoubleArray()
|
67
|
+
rotations.SetNumberOfComponents(3)
|
68
|
+
rotations.SetName("rotations")
|
69
|
+
|
70
|
+
scales = vtkDoubleArray()
|
71
|
+
scales.SetName("scales")
|
72
|
+
|
73
|
+
colors = vtkUnsignedCharArray()
|
74
|
+
colors.SetNumberOfComponents(4)
|
75
|
+
colors.SetName("colors")
|
76
|
+
|
77
|
+
shape_function_to_index = dict()
|
78
|
+
for symbol in self._symbols:
|
79
|
+
if symbol.shape_function not in shape_function_to_index:
|
80
|
+
index = len(shape_function_to_index)
|
81
|
+
shape_function_to_index[symbol.shape_function] = index
|
82
|
+
self.mapper.SetSourceData(index, symbol.shape_function())
|
83
|
+
|
84
|
+
points.InsertNextPoint(symbol.position)
|
85
|
+
rotations.InsertNextTuple(symbol.orientation)
|
86
|
+
colors.InsertNextTuple(symbol.color.to_rgba())
|
87
|
+
scales.InsertNextValue(symbol.scale)
|
88
|
+
sources.InsertNextValue(shape_function_to_index[symbol.shape_function])
|
89
|
+
|
90
|
+
self.data.SetPoints(points)
|
91
|
+
self.data.GetPointData().AddArray(sources)
|
92
|
+
self.data.GetPointData().AddArray(rotations)
|
93
|
+
self.data.GetPointData().AddArray(scales)
|
94
|
+
self.data.GetPointData().SetScalars(colors)
|
95
|
+
|
96
|
+
def set_zbuffer_offsets(self, factor: float, units: float):
|
97
|
+
"""
|
98
|
+
This functions is usefull to make a object appear in front of the others.
|
99
|
+
If the object should never be hidden, the parameters should be set to
|
100
|
+
factor = 1 and offset = -66000.
|
101
|
+
"""
|
102
|
+
self.mapper.SetResolveCoincidentTopologyToPolygonOffset()
|
103
|
+
self.mapper.SetRelativeCoincidentTopologyLineOffsetParameters(factor, units)
|
104
|
+
self.mapper.SetRelativeCoincidentTopologyPolygonOffsetParameters(factor, units)
|
105
|
+
self.mapper.SetRelativeCoincidentTopologyPointOffsetParameter(units)
|
106
|
+
self.mapper.Update()
|
107
|
+
|
108
|
+
|
109
|
+
class CommonSymbolsActorFixedSize(CommonSymbolsActor):
|
110
|
+
def build(self):
|
111
|
+
self.common_build()
|
112
|
+
|
113
|
+
self.mapper.SetInputData(self.data)
|
114
|
+
self.mapper.SetSourceIndexArray("sources")
|
115
|
+
self.mapper.SetOrientationArray("rotations")
|
116
|
+
self.mapper.SetScaleArray("scales")
|
117
|
+
self.mapper.SourceIndexingOn()
|
118
|
+
self.mapper.ScalarVisibilityOn()
|
119
|
+
self.mapper.SetScaleModeToScaleByMagnitude()
|
120
|
+
self.mapper.SetScalarModeToUsePointData()
|
121
|
+
self.mapper.SetOrientationModeToDirection()
|
122
|
+
self.mapper.Update()
|
123
|
+
|
124
|
+
|
125
|
+
class CommonSymbolsActorVariableSize(CommonSymbolsActor):
|
126
|
+
def __init__(self, renderer: vtkRenderer):
|
127
|
+
super().__init__()
|
128
|
+
self.renderer = renderer
|
129
|
+
|
130
|
+
def build(self):
|
131
|
+
self.common_build()
|
132
|
+
|
133
|
+
distance_to_camera = vtkDistanceToCamera()
|
134
|
+
distance_to_camera.SetInputData(self.data)
|
135
|
+
distance_to_camera.SetScreenSize(40)
|
136
|
+
distance_to_camera.SetRenderer(self.renderer)
|
137
|
+
|
138
|
+
self.mapper.SetInputConnection(distance_to_camera.GetOutputPort())
|
139
|
+
self.mapper.SetSourceIndexArray("sources")
|
140
|
+
self.mapper.SetOrientationArray("rotations")
|
141
|
+
self.mapper.SetScaleArray("DistanceToCamera")
|
142
|
+
self.mapper.SourceIndexingOn()
|
143
|
+
self.mapper.ScalarVisibilityOn()
|
144
|
+
self.mapper.SetScaleModeToScaleByMagnitude()
|
145
|
+
self.mapper.SetScalarModeToUsePointData()
|
146
|
+
self.mapper.SetOrientationModeToDirection()
|
147
|
+
|
148
|
+
self.mapper.Update()
|
molde/actors/ghost_actor.py
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
from vtkmodules.vtkRenderingCore import vtkActor
|
2
|
-
|
3
|
-
|
4
|
-
class GhostActor(vtkActor):
|
5
|
-
def make_ghost(self):
|
6
|
-
self.GetProperty().LightingOff()
|
7
|
-
offset = -66000
|
8
|
-
mapper = self.GetMapper()
|
9
|
-
mapper.SetResolveCoincidentTopologyToPolygonOffset()
|
10
|
-
mapper.SetRelativeCoincidentTopologyLineOffsetParameters(0, offset)
|
11
|
-
mapper.SetRelativeCoincidentTopologyPolygonOffsetParameters(0, offset)
|
12
|
-
mapper.SetRelativeCoincidentTopologyPointOffsetParameter(offset)
|
1
|
+
from vtkmodules.vtkRenderingCore import vtkActor
|
2
|
+
|
3
|
+
|
4
|
+
class GhostActor(vtkActor):
|
5
|
+
def make_ghost(self):
|
6
|
+
self.GetProperty().LightingOff()
|
7
|
+
offset = -66000
|
8
|
+
mapper = self.GetMapper()
|
9
|
+
mapper.SetResolveCoincidentTopologyToPolygonOffset()
|
10
|
+
mapper.SetRelativeCoincidentTopologyLineOffsetParameters(0, offset)
|
11
|
+
mapper.SetRelativeCoincidentTopologyPolygonOffsetParameters(0, offset)
|
12
|
+
mapper.SetRelativeCoincidentTopologyPointOffsetParameter(offset)
|
molde/actors/lines_actor.py
CHANGED
@@ -1,31 +1,31 @@
|
|
1
|
-
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper
|
2
|
-
|
3
|
-
from molde.poly_data import LinesData
|
4
|
-
|
5
|
-
|
6
|
-
class LinesActor(vtkActor):
|
7
|
-
def __init__(self, lines_list) -> None:
|
8
|
-
super().__init__()
|
9
|
-
self.lines_list = lines_list
|
10
|
-
|
11
|
-
self.build()
|
12
|
-
|
13
|
-
def build(self):
|
14
|
-
data = LinesData(self.lines_list)
|
15
|
-
mapper = vtkPolyDataMapper()
|
16
|
-
mapper.SetInputData(data)
|
17
|
-
self.SetMapper(mapper)
|
18
|
-
self.GetProperty().SetLineWidth(3)
|
19
|
-
|
20
|
-
def set_width(self, width):
|
21
|
-
self.GetProperty().SetLineWidth(width)
|
22
|
-
|
23
|
-
def appear_in_front(self, cond: bool):
|
24
|
-
# this offset is the Z position of the camera buffer.
|
25
|
-
# if it is -66000 the object stays in front of everything.
|
26
|
-
offset = -66000 if cond else 0
|
27
|
-
mapper = self.GetMapper()
|
28
|
-
mapper.SetResolveCoincidentTopologyToPolygonOffset()
|
29
|
-
mapper.SetRelativeCoincidentTopologyLineOffsetParameters(0, offset)
|
30
|
-
mapper.SetRelativeCoincidentTopologyPolygonOffsetParameters(0, offset)
|
31
|
-
mapper.SetRelativeCoincidentTopologyPointOffsetParameter(offset)
|
1
|
+
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper
|
2
|
+
|
3
|
+
from molde.poly_data import LinesData
|
4
|
+
|
5
|
+
|
6
|
+
class LinesActor(vtkActor):
|
7
|
+
def __init__(self, lines_list) -> None:
|
8
|
+
super().__init__()
|
9
|
+
self.lines_list = lines_list
|
10
|
+
|
11
|
+
self.build()
|
12
|
+
|
13
|
+
def build(self):
|
14
|
+
data = LinesData(self.lines_list)
|
15
|
+
mapper = vtkPolyDataMapper()
|
16
|
+
mapper.SetInputData(data)
|
17
|
+
self.SetMapper(mapper)
|
18
|
+
self.GetProperty().SetLineWidth(3)
|
19
|
+
|
20
|
+
def set_width(self, width):
|
21
|
+
self.GetProperty().SetLineWidth(width)
|
22
|
+
|
23
|
+
def appear_in_front(self, cond: bool):
|
24
|
+
# this offset is the Z position of the camera buffer.
|
25
|
+
# if it is -66000 the object stays in front of everything.
|
26
|
+
offset = -66000 if cond else 0
|
27
|
+
mapper = self.GetMapper()
|
28
|
+
mapper.SetResolveCoincidentTopologyToPolygonOffset()
|
29
|
+
mapper.SetRelativeCoincidentTopologyLineOffsetParameters(0, offset)
|
30
|
+
mapper.SetRelativeCoincidentTopologyPolygonOffsetParameters(0, offset)
|
31
|
+
mapper.SetRelativeCoincidentTopologyPointOffsetParameter(offset)
|
@@ -1,7 +1,7 @@
|
|
1
|
-
from .square_points_actor import SquarePointsActor
|
2
|
-
|
3
|
-
|
4
|
-
class RoundPointsActor(SquarePointsActor):
|
5
|
-
def __init__(self, points) -> None:
|
6
|
-
super().__init__(points)
|
7
|
-
self.GetProperty().RenderPointsAsSpheresOn()
|
1
|
+
from .square_points_actor import SquarePointsActor
|
2
|
+
|
3
|
+
|
4
|
+
class RoundPointsActor(SquarePointsActor):
|
5
|
+
def __init__(self, points) -> None:
|
6
|
+
super().__init__(points)
|
7
|
+
self.GetProperty().RenderPointsAsSpheresOn()
|
@@ -1,32 +1,32 @@
|
|
1
|
-
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper
|
2
|
-
|
3
|
-
from molde.poly_data import VerticesData
|
4
|
-
|
5
|
-
|
6
|
-
class SquarePointsActor(vtkActor):
|
7
|
-
def __init__(self, points_list) -> None:
|
8
|
-
super().__init__()
|
9
|
-
self.points_list = points_list
|
10
|
-
self.build()
|
11
|
-
|
12
|
-
def build(self):
|
13
|
-
data = VerticesData(self.points_list)
|
14
|
-
mapper = vtkPolyDataMapper()
|
15
|
-
mapper.SetInputData(data)
|
16
|
-
self.SetMapper(mapper)
|
17
|
-
|
18
|
-
self.GetProperty().SetPointSize(20)
|
19
|
-
self.GetProperty().LightingOff()
|
20
|
-
|
21
|
-
def set_size(self, size):
|
22
|
-
self.GetProperty().SetPointSize(size)
|
23
|
-
|
24
|
-
def appear_in_front(self, cond: bool):
|
25
|
-
# this offset is the Z position of the camera buffer.
|
26
|
-
# if it is -66000 the object stays in front of everything.
|
27
|
-
offset = -66000 if cond else 0
|
28
|
-
mapper = self.GetMapper()
|
29
|
-
mapper.SetResolveCoincidentTopologyToPolygonOffset()
|
30
|
-
mapper.SetRelativeCoincidentTopologyLineOffsetParameters(0, offset)
|
31
|
-
mapper.SetRelativeCoincidentTopologyPolygonOffsetParameters(0, offset)
|
32
|
-
mapper.SetRelativeCoincidentTopologyPointOffsetParameter(offset)
|
1
|
+
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper
|
2
|
+
|
3
|
+
from molde.poly_data import VerticesData
|
4
|
+
|
5
|
+
|
6
|
+
class SquarePointsActor(vtkActor):
|
7
|
+
def __init__(self, points_list) -> None:
|
8
|
+
super().__init__()
|
9
|
+
self.points_list = points_list
|
10
|
+
self.build()
|
11
|
+
|
12
|
+
def build(self):
|
13
|
+
data = VerticesData(self.points_list)
|
14
|
+
mapper = vtkPolyDataMapper()
|
15
|
+
mapper.SetInputData(data)
|
16
|
+
self.SetMapper(mapper)
|
17
|
+
|
18
|
+
self.GetProperty().SetPointSize(20)
|
19
|
+
self.GetProperty().LightingOff()
|
20
|
+
|
21
|
+
def set_size(self, size):
|
22
|
+
self.GetProperty().SetPointSize(size)
|
23
|
+
|
24
|
+
def appear_in_front(self, cond: bool):
|
25
|
+
# this offset is the Z position of the camera buffer.
|
26
|
+
# if it is -66000 the object stays in front of everything.
|
27
|
+
offset = -66000 if cond else 0
|
28
|
+
mapper = self.GetMapper()
|
29
|
+
mapper.SetResolveCoincidentTopologyToPolygonOffset()
|
30
|
+
mapper.SetRelativeCoincidentTopologyLineOffsetParameters(0, offset)
|
31
|
+
mapper.SetRelativeCoincidentTopologyPolygonOffsetParameters(0, offset)
|
32
|
+
mapper.SetRelativeCoincidentTopologyPointOffsetParameter(offset)
|