Skip to content

Commit 8d9f5de

Browse files
author
Xing Han Lu
authored
Merge pull request #603 from plotly/update-vehicle-geometry
Add improvements to vehicle geometry Former-commit-id: 21abe9e
2 parents e4f30c4 + 5a3d487 commit 8d9f5de

File tree

1 file changed

+36
-24
lines changed
  • apps/dash-vehicle-geometry

1 file changed

+36
-24
lines changed

apps/dash-vehicle-geometry/app.py

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,11 @@
2121
# -----------------------------------------------------------------------------
2222

2323

24-
def _load_vtp(filepath, fieldname=None):
24+
def _load_vtp(filepath, fieldname=None, point_arrays=[], cell_arrays=[]):
2525
reader = vtk.vtkXMLPolyDataReader()
2626
reader.SetFileName(filepath)
2727
reader.Update()
28-
if fieldname is None:
29-
return to_mesh_state(reader.GetOutput())
30-
else:
31-
return to_mesh_state(reader.GetOutput(), fieldname)
28+
return to_mesh_state(reader.GetOutput(), fieldname, point_arrays, cell_arrays)
3229

3330

3431
# -----------------------------------------------------------------------------
@@ -45,13 +42,14 @@ def _load_vtp(filepath, fieldname=None):
4542
# vehicle geometry
4643
vehicle_vtk = []
4744
for filename in glob.glob(os.path.join(DATA_PATH, "vehicle") + "/*.vtp"):
48-
mesh = _load_vtp(filename)
45+
mesh = _load_vtp(filename, point_arrays=["U", "p"])
4946
part_name = filename.split("/")[-1].replace(".vtp", "")
5047
child = dash_vtk.GeometryRepresentation(
5148
id=f"{part_name}-rep",
5249
colorMapPreset="erdc_rainbow_bright",
5350
colorDataRange=[0, 100],
54-
property={"opacity": 1},
51+
actor={"visibility": 1},
52+
mapper={"scalarVisibility": False},
5553
children=[dash_vtk.Mesh(id=f"{part_name}-mesh", state=mesh,)],
5654
)
5755
vehicle_vtk.append(child)
@@ -64,7 +62,8 @@ def _load_vtp(filepath, fieldname=None):
6462
surf_name = filename.split("/")[-1].replace(".vtp", "")
6563
child = dash_vtk.GeometryRepresentation(
6664
id=f"{surf_name}-rep",
67-
property={"opacity": 0, "color": [1, 0, 0]},
65+
property={"color": [1, 0, 0]},
66+
actor={"visibility": 0},
6867
children=[dash_vtk.Mesh(id=f"{surf_name}-mesh", state=mesh,)],
6968
)
7069

@@ -112,6 +111,7 @@ def _load_vtp(filepath, fieldname=None):
112111
options=[
113112
{"label": "solid", "value": "solid"},
114113
{"label": "U", "value": "U"},
114+
{"label": "p", "value": "p"},
115115
],
116116
value="solid",
117117
),
@@ -165,12 +165,19 @@ def _load_vtp(filepath, fieldname=None):
165165
# Handle controls
166166
# -----------------------------------------------------------------------------
167167

168+
COLOR_RANGES = {
169+
"solid": [0, 1],
170+
"U": [0, 100],
171+
"p": [-4464, 1700],
172+
}
173+
168174

169175
@app.callback(
170176
[Output("vtk-view", "triggerRender")]
171-
+ [Output(item.id.replace("rep", "mesh"), "state") for item in vehicle_vtk]
172-
+ [Output(item.id, "property") for item in vehicle_vtk]
173-
+ [Output("cp-rep", "property")],
177+
+ [Output(item.id, "mapper") for item in vehicle_vtk]
178+
+ [Output(item.id, "actor") for item in vehicle_vtk]
179+
+ [Output(item.id, "colorDataRange") for item in vehicle_vtk]
180+
+ [Output("cp-rep", "actor")],
174181
[
175182
Input("geometry", "value"),
176183
Input("isosurfaces", "value"),
@@ -184,9 +191,9 @@ def update_scene(geometry, isosurfaces, surfcolor):
184191
geo_viz, iso_viz = [], []
185192
if triggered and "geometry" in triggered[0]["prop_id"]:
186193
geo_viz = [
187-
{"opacity": 1}
194+
{"visibility": 1}
188195
if part.id.replace("-rep", "").split("_")[0] in triggered[0]["value"]
189-
else {"opacity": 0}
196+
else {"visibility": 0}
190197
for part in vehicle_vtk
191198
]
192199
else:
@@ -195,26 +202,31 @@ def update_scene(geometry, isosurfaces, surfcolor):
195202
# update isosurface visibility
196203
if triggered and "isosurfaces" in triggered[0]["prop_id"]:
197204
if "cp" in triggered[0]["value"]:
198-
iso_viz = {"opacity": 1}
205+
iso_viz = {"visibility": 1}
199206
else:
200-
iso_viz = {"opacity": 0}
207+
iso_viz = {"visibility": 0}
201208
else:
202209
iso_viz = dash.no_update
203210

204211
# update surface coloring
205212
if triggered and "surfcolor" in triggered[0]["prop_id"]:
206-
surf_state = []
207-
208-
for filename in glob.glob(os.path.join(DATA_PATH, "vehicle") + "/*.vtp"):
209-
if triggered[0]["value"] == "solid":
210-
mesh = _load_vtp(filename)
211-
else:
212-
mesh = _load_vtp(filename, triggered[0]["value"])
213-
surf_state.append(mesh)
213+
color_range = COLOR_RANGES[triggered[0]["value"]]
214+
mapper = {
215+
"colorByArrayName": triggered[0]["value"],
216+
"scalarMode": 3,
217+
"interpolateScalarsBeforeMapping": True,
218+
"scalarVisibility": True,
219+
}
220+
if triggered[0]["value"] == "solid":
221+
mapper = {"scalarVisibility": False}
222+
223+
surf_state = [mapper for item in vehicle_vtk]
224+
color_ranges = [color_range for item in vehicle_vtk]
214225
else:
215226
surf_state = [dash.no_update for item in vehicle_vtk]
227+
color_ranges = [dash.no_update for item in vehicle_vtk]
216228

217-
return [random.random()] + surf_state + geo_viz + [iso_viz]
229+
return [random.random()] + surf_state + geo_viz + color_ranges + [iso_viz]
218230

219231

220232
# -----------------------------------------------------------------------------

0 commit comments

Comments
 (0)