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