# IRfMeshModifierSet Interface Reference

Inherits IRsObject.

List of all members.

## Public Member Functions
HRESULT | Attach ([in] IRsNode *pNode)
HRESULT | Detach ()
HRESULT | GetEditableShapeNodeSafe ([out, retval] IRsNode **ppMeshModNode)
HRESULT | BackTraceFilterNode ([in] const IID &iid,[out, retval] IRsNode **ppFoundNode)
HRESULT | InsertFilterNode ([in] IRsNode *pFilterNode)
HRESULT | RemoveFilterNode ([in] IRsNode *pFilterNode)
HRESULT | ConvertToEditableMesh ([out] IRsNode **ppNode)
HRESULT | CheckMeshChainEditable ()
HRESULT | CheckProceduralMesh ()
HRESULT | GetInputMeshSafe (IRsNode **ppMeshModNode)
HRESULT | GetEditableShape (IRsNode **ppMeshModNode)
HRESULT | CheckTopologyModifiers (IRsNode *pModifierNode)
HRESULT | CollapseModifiersPipeline (IRsNode *pModifierNode)
HRESULT | GetEditableMeshes (IRsObjectList *pSelection, IRsObjectList **ppEditableMeshes)
HRESULT | GetEditedSubObjects (IRsObjectList **ppEditableMeshes)
HRESULT | ActivateEditMode (RtBool bAddIdStreams, IRcUndoRedoGroup *pUndoRedo)
HRESULT | DeactivateEditMode (IRcUndoRedoGroup *pUndoRedo)
HRESULT | ShowHiddenGeometry (IRdMeshSelection **ppHiddenGeometry)
HRESULT | HideGeometry (IRdMeshSelection *pHiddenGeometry)
HRESULT | SetGeometryIdentificationStreams (IRcUndoRedoGroup *spUndoRedo)
HRESULT | AddGeometryIdentificationStreams (IRcUndoRedoGroup *spUndoRedo)
HRESULT | RemoveGeometryIdentificationStreams (IRcUndoRedoGroup *spUndoRedo)
HRESULT | UpdateGeometryIdentification (IRcUndoRedoGroup *spUndoRedo)
HRESULT | GetModifiersPipelineFlags (IRsNode *pFirstNode, RtMeshModifierFlags *pFlags)
HRESULT | GetHighlightMesh (IRdMatrixf *pMatrix, IRdMeshSelection *pSelection, IRdMesh *pMesh, IRdMesh **ppMesh)
HRESULT | ReplaceFilterNode ([in] GUID *gSourceNode,[in] IRsNode *pFilterNode)
HRESULT | GetConvertibleMeshes ([in] IRsObjectList *pListIn,[out, retval] IRsObjectList **ppListOut)
HRESULT | EnumMeshNodes ([in] VARIANT *pVt,[out, retval] IRsObjectList **ppMeshList)
HRESULT | GetEditableSubobjects (IRsObjectList **ppEditableMeshes)

## Detailed Description

Mesh modifiers set contains helper functions for handling editable meshes.

## Member Function Documentation

HRESULT IRfMeshModifierSet::Attach | ( | [in] IRsNode * | pNode | ) |

Attach node to this fn set

Parameters:

  | pNode | [in] Mesh node

HRESULT IRfMeshModifierSet::Detach | ( |  | ) |

Detach previously attached node

HRESULT IRfMeshModifierSet::GetEditableShapeNodeSafe | ( | [out, retval] IRsNode ** | ppMeshModNode | ) |

GetEditableShapeNodeSafe

Search for mesh pipeline editable shape node. Method works inside and outside edit mode.

Returns:
  ppMeshModNode [out,retval] Editable shape node

HRESULT IRfMeshModifierSet::BackTraceFilterNode | ( | [in] const IID & | iid,
|  | [out, retval] IRsNode ** | ppFoundNode |
| ) |  |  |

BackTraceFilterNode

Search for specified mesh modifier in editable mesh pipeline. Method works inside and outside edit mode.

Parameters:

  | iid | [in] Required mesh modifier GUID

Returns:
  ppFoundNode [our,retval] Mesh modifier node (if found)

HRESULT IRfMeshModifierSet::InsertFilterNode | ( | [in] IRsNode * | pFilterNode | ) |

InsertFilterNode

Insert mesh modifier to editable mesh pipeline.

- Filter node position is dependent on node priority.

Parameters:

  | pFilterNode | [in] Mesh modifier node to insert

HRESULT IRfMeshModifierSet::RemoveFilterNode | ( | [in] IRsNode * | pFilterNode | ) |

RemoveFilterNode

Remove mesh modifier node from editable mesh pipeline.

Parameters:

  | pFilterNode | [in] Mesh modifier node to remove (must present in mesh pipeline).

HRESULT IRfMeshModifierSet::ConvertToEditableMesh | ( | [out] IRsNode ** | ppNode | ) |

Convert attached mesh to editable.

Parameters:

  | ppNode | [out] Editable shape node.

HRESULT IRfMeshModifierSet::CheckMeshChainEditable | ( |  | ) |

CheckMeshChainEditable

Check, if mesh chain starts with editable mesh node.

Returns:
  S_OK if attached mesh is editable.

HRESULT IRfMeshModifierSet::CheckProceduralMesh | ( |  | ) |

CheckProceduralMesh

Check if mesh is proceduraly generated.

Returns:
  S_OK if attached mesh is procedural.

HRESULT IRfMeshModifierSet::GetInputMeshSafe | ( | IRsNode ** | ppMeshModNode | ) |

GetInputMeshSafe

Search for mesh pipeline input mesh node; editable or not.

Returns:
  ppMeshModNode [out, retval] mesh input shape node.

HRESULT IRfMeshModifierSet::GetEditableShape | ( | IRsNode ** | ppMeshModNode | ) |

GetEditableShape

Get editable shape node when in point edit mode. Outside PE this function fails.

Returns:
  ppMeshModNode [out, retval] Editable shape node

HRESULT IRfMeshModifierSet::CheckTopologyModifiers | ( | IRsNode * | pModifierNode | ) |

CheckTopologyModifiers

Check, if mesh modifiers before provided node are topology operations or not.

Parameters:

  | pModifierNode | [in] Start node for topology operations checking

HRESULT IRfMeshModifierSet::CollapseModifiersPipeline | ( | IRsNode * | pModifierNode | ) |

CollapseModifiersPipeline

Collapse modifiers before provided modifier and add editable shape instead of it.

Parameters:

  | pModifierNode | [in] Start node for mesh collapsing.

HRESULT IRfMeshModifierSet::GetEditableMeshes | ( | IRsObjectList * | pSelection,
|  | IRsObjectList ** | ppEditableMeshes |
| ) |  |  |

GetEditableMeshes

Convert selection to list of editable meshes. Function traverses hierarchy and collects all meshes that can be edited.

Parameters:

  | pSelection | [in] List of objects (hierarchy roots)
  | ppEditableMeshes | [out, retval] List of editable objects found inside provided objects

HRESULT IRfMeshModifierSet::GetEditedSubObjects | ( | IRsObjectList ** | ppEditableMeshes | ) |

GetEditedSubObjects

Get list of meshes that are being edited in current PE session.

Parameters:

  | ppEditableMeshes | [out, retval] List of edited subobjects.

HRESULT IRfMeshModifierSet::ActivateEditMode | ( | RtBool | bAddIdStreams,
|  | IRcUndoRedoGroup * | pUndoRedo |
| ) |  |  |

ActivateEditMode

Activate edit mode for attached node.

Parameters:

  | bAddIdStreams | [in] Set to true to add geometry identification streams to mesh pipeline.
  | pUndoRedo | [in] Activation undo/redo commands collector.

HRESULT IRfMeshModifierSet::DeactivateEditMode | ( | IRcUndoRedoGroup * | pUndoRedo | ) |

DeactivateEditMode

Deactivate edit mode for attached node.

Parameters:

  | pUndoRedo | [in] Undo/redo container for storing event commands.

HRESULT IRfMeshModifierSet::ShowHiddenGeometry | ( | IRdMeshSelection ** | ppHiddenGeometry | ) |

ShowHiddenGeometry

Show all hidden geometry and add it to editable mesh pipeline.

Parameters:

  | ppHiddenGeometry | [out, regval] Filled with selection containing hidden geometry.

HRESULT IRfMeshModifierSet::HideGeometry | ( | IRdMeshSelection * | pHiddenGeometry | ) |

HideGeometry

Hide geometry and remove it from editable mesh pipeline. Geometry to hide is defined by selection.

Parameters:

  | pHiddenGeometry | [in] Geometry to hide.

HRESULT IRfMeshModifierSet::SetGeometryIdentificationStreams | ( | IRcUndoRedoGroup * | spUndoRedo | ) |

SetGeometryIdentificationStreams

Add geometry identification streams to mesh pipeline if they are not present.

- If geometry identification is present but there are some degenerated unwrapped triangles, geometry ID stream is updated using UpdateGeometryIdentification.
- In case that ID stream is present, S_FALSE is returned and caller should not remove ID stream afterwards.

Remarks:
  Note, that mesh cannot have hidden parts during ID stream manipulations.
  - Mesh modifiers pipeline is notified that geometry identification stream has been added.
  - Undo/redo events are stored into spUndoRedo collector.

Parameters:

  | spUndoRedo | [in] Collector to store undo/redo commands for adding ID stream.

HRESULT IRfMeshModifierSet::AddGeometryIdentificationStreams | ( | IRcUndoRedoGroup * | spUndoRedo | ) |

AddGeometryIdentificationStreams

Add geometry identification streams to mesh pipeline if they are not present.

- In case that ID stream is present, S_FALSE is returned and caller should not remove ID stream afterwards.
- Method performs unhidding and hiding of mesh if some parts are hidden.

Parameters:

  | spUndoRedo | [in] Collector to store undo/redo commands for adding ID stream.

HRESULT IRfMeshModifierSet::RemoveGeometryIdentificationStreams | ( | IRcUndoRedoGroup * | spUndoRedo | ) |

RemoveGeometryIdentificationStreams

Remove geometry identification streams from mesh pipeline.

Remarks:
  Note, that mesh cannot have hidden parts during ID stream manipulations.
  - Mesh modifiers pipeline is notified that geometry identification stream has been removed.
  - Undo/redo events are stored into spUndoRedo collector.

Parameters:

  | spUndoRedo | [in] Collector to store undo/redo commands for removing ID stream.

HRESULT IRfMeshModifierSet::UpdateGeometryIdentification | ( | IRcUndoRedoGroup * | spUndoRedo | ) |

UpdateGeometryIdentification

Check if geometry identification stream contains degenerated triangles.

- If yes, unwrap is recalculated with mesh editor pipeline notified about this event.
- Mesh must be in edit mode and annot have hidden parts.

Parameters:

  | spUndoRedo | [in] Undo/redo container for handling undo/redo.

HRESULT IRfMeshModifierSet::GetModifiersPipelineFlags | ( | IRsNode * | pFirstNode,
|  | RtMeshModifierFlags * | pFlags |
| ) |  |  |

GetModifiersPipelineFlags

Return mesh modifier flags.

Parameters:

  | pFirstNode | [in] Node that starts pipeline. NULL will return flags of whole pipeline.
  | pFlags | [out, retval] Filled with union of mesh modifier flags.

HRESULT IRfMeshModifierSet::GetHighlightMesh | ( | IRdMatrixf * | pMatrix,
|  | IRdMeshSelection * | pSelection,
|  | IRdMesh * | pMesh,
|  | IRdMesh ** | ppMesh |
| ) |  |  |

GetHighlightMesh

Calculate highlight mesh for specified selection.

- Node need not be in an editable state.

Parameters:

  | pMatrix | [in] Local->world space transform matrix.
  | pMesh | [in] Mesh with selection streams injected.
  | pSelection | [in] Selection.
  | ppMesh | [out, retval] Calculated highlight mesh.

HRESULT IRfMeshModifierSet::ReplaceFilterNode | ( | [in] GUID * | gSourceNode,
|  | [in] IRsNode * | pFilterNode |
| ) |  |  |

ReplaceFilterNode

Replace mesh modifier node by provided node.

- Priority is ignored.

Parameters:

  | gSourceNode | [in] Class ID of node that is to be replaced.
  | pFilterNode | [in] Node that will be inserted instead of source node.

Returns:
  S_OK if succeeded, source node found and new node added.
  - Otherwise pFilterNode is not added into graph.

HRESULT IRfMeshModifierSet::GetConvertibleMeshes | ( | [in] IRsObjectList * | pListIn,
|  | [out, retval] IRsObjectList ** | ppListOut |
| ) |  |  |

GetConvertibleMeshes

Remove from list of meshes objects that are not editable:

- For example light is not editable if another mesh is present, but if it is stand alone it is editable.
- Function shows warnings if conversion must be performed or object is not genuine mesh.

Parameters:

  | pListIn | [in] List of objects to check.

Returns:
  ppListOut [out,retval] Filtered list of objects that user agrees to be edited.

  S_OK if succeeded and user accepts conversion.

HRESULT IRfMeshModifierSet::EnumMeshNodes | ( | [in] VARIANT * | pVt,
|  | [out, retval] IRsObjectList ** | ppMeshList |
| ) |  |  |

EnumMeshNodes

Enumerates editable mesh nodes with of specified selection.

Parameters:

  | pVt | [in] List of object nodes separated with ';', specify "" for current selection.

Returns:
  ppMeshList [out,retval] List of mesh objects

HRESULT IRfMeshModifierSet::GetEditableSubobjects | ( | IRsObjectList ** | ppEditableMeshes | ) |

GetEditableSubobjects

Get editable subobjests for currently attached node.

Parameters:

  | ppEditableMeshes | [out, retval] List filled with the list of editable subobjects.