Skip to content

Commit

Permalink
[VTK] Implement Glyph3Dmapper serialization (#2002)
Browse files Browse the repository at this point in the history
  • Loading branch information
xavArtley committed Feb 24, 2021
1 parent e97c2fc commit fd9e09c
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 21 deletions.
5 changes: 5 additions & 0 deletions panel/models/vtk/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,11 @@ if (vtk) {
vtkns.Follower.newInstance,
vtkObjectManager.genericUpdater
)
vtkObjectManager.setTypeMapping(
"vtkOpenGLGlyph3DMapper",
vtkns.Glyph3DMapper.newInstance,
vtkObjectManager.genericUpdater
)
}

declare type RGBnode = {
Expand Down
10 changes: 7 additions & 3 deletions panel/pane/vtk/synchronizable_deserializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def poly_data_builder(state, zf, register):
data_arr = ARRAY_TYPES[dataset['dataType']]()
fill_array(data_arr, dataset, zf)
location = getattr(instance, 'Get' + capitalize(dataset['location']))()
getattr(location, capitalize(dataset['registration']))(data_arr)
getattr(location, capitalize(dataset.get("registration", "addArray")))(data_arr)

def volume_mapper_builder(state, zf, register):
instance = generic_builder(state, zf, register)
Expand Down Expand Up @@ -120,7 +120,10 @@ def generic_builder(state, zf, register=None):
else:
method = METHODS_RENAME[capitalize(call[0])]
if method is None: continue
getattr(instance, method)(*args)
if method == "SetInputData" and len(args)==2:
getattr(instance, method + "Object")(*args[::-1])
else:
getattr(instance, method)(*args)
arrays = state.get('arrays', None)
if arrays:
for array_meta in arrays:
Expand Down Expand Up @@ -156,7 +159,8 @@ def make_type_handlers():
'vtkActor': ['vtkOpenGLActor', 'vtkPVLODActor'],
'vtkLight': ['vtkOpenGLLight', 'vtkPVLight'],
'vtkTexture': ['vtkOpenGLTexture'],
'vtkVolumeMapper': ['vtkFixedPointVolumeRayCastMapper', 'vtkSmartVolumeMapper']
'vtkVolumeMapper': ['vtkFixedPointVolumeRayCastMapper', 'vtkSmartVolumeMapper'],
"vtkGlyph3DMapper": ["vtkOpenGLGlyph3DMapper"],
}

type_handlers = {
Expand Down
55 changes: 37 additions & 18 deletions panel/pane/vtk/synchronizable_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,8 @@ def initializeSerializers():
'vtkSmartVolumeMapper', genericVolumeMapperSerializer)
registerInstanceSerializer(
'vtkOpenGLImageSliceMapper', imageSliceMapperSerializer)
registerInstanceSerializer(
'vtkOpenGLGlyph3DMapper', glyph3DMapperSerializer)

# LookupTables/TransferFunctions
registerInstanceSerializer('vtkLookupTable', lookupTableSerializer)
Expand Down Expand Up @@ -677,25 +679,25 @@ def genericMapperSerializer(parent, mapper, mapperId, context, depth):
calls = []
dependencies = []

if hasattr(mapper, 'GetInputDataObject'):
dataObject = mapper.GetInputDataObject(0, 0)
else:
if not hasattr(mapper, 'GetInputDataObject'):
if context.debugAll:
print('This mapper does not have GetInputDataObject method')

if dataObject:
dataObjectId = '%s-dataset' % mapperId
if parent.IsA('vtkActor') and not mapper.IsA('vtkTexture'):
# vtk-js actors can render only surfacic datasets
# => we ensure to convert the dataset in polydata
dataObjectInstance = mergeToPolydataSerializer(
mapper, dataObject, dataObjectId, context, depth + 1)
else:
dataObjectInstance = serializeInstance(
mapper, dataObject, dataObjectId, context, depth + 1)
if dataObjectInstance:
dependencies.append(dataObjectInstance)
calls.append(['setInputData', [wrapId(dataObjectId)]])
print('This mapper does not have GetInputDataObject method')
else:
for port in range(mapper.GetNumberOfInputPorts()): # Glyph3DMapper can define input data objects on 2 ports (input, source)
dataObject = mapper.GetInputDataObject(port, 0)
if dataObject:
dataObjectId = '%s-dataset-%d' % (mapperId, port)
if parent.IsA('vtkActor') and not mapper.IsA('vtkTexture'):
# vtk-js actors can render only surfacic datasets
# => we ensure to convert the dataset in polydata
dataObjectInstance = mergeToPolydataSerializer(
mapper, dataObject, dataObjectId, context, depth + 1)
else:
dataObjectInstance = serializeInstance(
mapper, dataObject, dataObjectId, context, depth + 1)
if dataObjectInstance:
dependencies.append(dataObjectInstance)
calls.append(['setInputData', [wrapId(dataObjectId), port]])

lookupTable = None

Expand Down Expand Up @@ -771,6 +773,23 @@ def genericVolumeMapperSerializer(parent, mapper, mapperId, context, depth):
# -----------------------------------------------------------------------------


def glyph3DMapperSerializer(parent, mapper, mapperId, context, depth):
instance = genericMapperSerializer(parent, mapper, mapperId, context, depth)

if not instance: return
instance['type'] = mapper.GetClassName()
instance['properties'].update({
'orient': mapper.GetOrient(),
'orientationMode': mapper.GetOrientationMode(),
'scaling': mapper.GetScaling(),
'scaleFactor': mapper.GetScaleFactor(),
'scaleMode': mapper.GetScaleMode(),
})
return instance

# -----------------------------------------------------------------------------


def textureSerializer(parent, texture, textureId, context, depth):
instance = genericMapperSerializer(parent, texture, textureId, context, depth)

Expand Down

0 comments on commit fd9e09c

Please sign in to comment.