1+ # Standard library imports
2+ import os
3+
4+ # Third party imports
5+ import vtk
6+
7+ # Local application imports
8+ from opengeodeweb_viewer .utils_functions import get_schemas_dict , validate_schema
9+ from opengeodeweb_viewer .vtk_protocol import VtkView
10+
11+ class VtkObjectView (VtkView ):
12+ def __init__ (self ):
13+ super ().__init__ ()
14+
15+ def registerObject (self , id , file_name , reader , filter , mapper ):
16+ actor = vtk .vtkActor ()
17+ self .register_object (id , reader , filter , actor , mapper , {})
18+
19+ reader .SetFileName (os .path .join (self .DATA_FOLDER_PATH , file_name ))
20+
21+ actor .SetMapper (mapper )
22+ mapper .SetColorModeToMapScalars ()
23+ mapper .SetResolveCoincidentTopologyLineOffsetParameters (1 , - 0.1 )
24+ mapper .SetResolveCoincidentTopologyPolygonOffsetParameters (2 , 0 )
25+ mapper .SetResolveCoincidentTopologyPointOffsetParameter (- 2 )
26+
27+ renderWindow = self .getView ("-1" )
28+ renderer = renderWindow .GetRenderers ().GetFirstRenderer ()
29+ renderer .AddActor (actor )
30+ renderer .ResetCamera ()
31+ renderWindow .Render ()
32+ self .render ()
33+
34+ def deregisterObject (self , id ):
35+ actor = self .get_object (id )["actor" ]
36+ renderWindow = self .getView ("-1" )
37+ renderer = renderWindow .GetRenderers ().GetFirstRenderer ()
38+ renderer .RemoveActor (actor )
39+ self .deregister_object (id )
40+ self .render ()
41+
42+ def applyTextures (self , id , textures ):
43+ textures_array = []
44+ images_reader_array = []
45+
46+ data = self .get_object (id )
47+ mapper = data ["mapper" ]
48+ actor = data ["actor" ]
49+ reader = data ["reader" ]
50+
51+ polydata_mapper = mapper .GetPolyDataMapper ()
52+ poly_data = reader .GetPolyDataOutput ()
53+
54+ for index , value in enumerate (textures ):
55+ texture_name = value ["texture_name" ]
56+ texture_file_name = value ["texture_file_name" ]
57+ print (f"{ texture_name = } { texture_file_name = } " , flush = True )
58+
59+ new_texture = vtk .vtkTexture ()
60+ image_reader = vtk .vtkXMLImageDataReader ()
61+ image_reader .SetFileName (
62+ os .path .join (self .DATA_FOLDER_PATH , texture_file_name )
63+ )
64+
65+ shader_texture_name = f"VTK_TEXTURE_UNIT_{ index } "
66+ polydata_mapper .MapDataArrayToMultiTextureAttribute (
67+ shader_texture_name ,
68+ texture_name ,
69+ vtk .vtkDataObject .FIELD_ASSOCIATION_POINTS ,
70+ )
71+
72+ if index == 0 :
73+ new_texture .SetBlendingMode (
74+ vtk .vtkTexture .VTK_TEXTURE_BLENDING_MODE_REPLACE
75+ )
76+ else :
77+ new_texture .SetBlendingMode (
78+ vtk .vtkTexture .VTK_TEXTURE_BLENDING_MODE_ADD
79+ )
80+
81+ images_reader_array .append (image_reader )
82+ new_texture .SetInputConnection (image_reader .GetOutputPort ())
83+
84+ actor .GetProperty ().SetTexture (shader_texture_name , new_texture )
85+
86+ textures_array .append (new_texture )
87+ images_reader_array .append (image_reader )
88+
89+ self .render ()
90+
91+
92+ def SetVisibility (self , id , visibility ):
93+ actor = self .get_object (id )["actor" ]
94+ actor .SetVisibility (visibility )
95+ self .render ()
96+
97+ def SetOpacity (self , id , opacity ):
98+ actor = self .get_object (id )["actor" ]
99+ actor .GetProperty ().SetOpacity (opacity )
100+ self .render ()
101+
102+ def SetColor (self , id , red , green , blue ):
103+ reader = self .get_object (id )["reader" ]
104+ mapper = self .get_object (id )["mapper" ]
105+ mapper .ScalarVisibilityOff ()
106+ actor = self .get_object (id )["actor" ]
107+ actor .GetProperty ().SetColor ([red , green , blue ])
108+ self .render ()
109+
110+ def SetEdgeVisibility (self , id , visibility ):
111+ actor = self .get_object (id )["actor" ]
112+ actor .GetProperty ().SetEdgeVisibility (visibility )
113+ self .render ()
114+
115+ def SetVertexVisibility (self , id , visibility ):
116+ actor = self .get_object (id )["actor" ]
117+ actor .GetProperty ().SetVertexVisibility (visibility )
118+ self .render ()
119+
120+ def SetPointSize (self , id , size ):
121+ actor = self .get_object (id )["actor" ]
122+ actor .GetProperty ().SetPointSize (size )
123+ self .render ()
0 commit comments