To aid with understanding the sequence of calls that are made for object overrides, plug-in writers can enable tracing on the MPxDrawOverride and MPxGeometryOverride classes.
In both cases, the interfaces are the same:
The first method can be overridden to return true. When this occurs, the call sequence is traced to record the location of various calls as strings. By default, these strings are output to the standard output. If the plug-in overrides the handleTraceMessage() method, then they can route the messages to different locations. For instance, the apiMeshShape (developer kit example) geometry override routes messages to the command window.
The following is a sample trace logged when an apiMeshShape object is created. Note that, for context, the path of the object is given when possible.
// apiMeshGeometryOverride: Geometry override DG update: apiMesh1 // // apiMeshGeometryOverride: Start geometry override render item update: |transform1|apiMesh1 // // apiMeshGeometryOverride: - Call API to update render items // // apiMeshGeometryOverride: End geometry override render item update: |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: StandardShadedItem. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: StandardShadedItem. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: FlatShadedItem. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: FlatShadedItem. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshWire. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshShadedTemplateWire. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshSelectedWireFrame. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshVertices. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshActiveVertices. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshVertexIds. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshVertexPositions. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshFaceCenterInWireframeMode. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshFaceCenterInShadedMode. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshAffectedEdges. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshAffectedFaces. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshEdgeSelection. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiMeshFaceSelection. |transform1|apiMesh1 // // apiMeshGeometryOverride: Geometry override dirty indexing check: apiShadedProxy. |transform1|apiMesh1 // // apiMeshGeometryOverride: Start geometry override update stream and indexing data: apiMesh1 // // apiMeshGeometryOverride: - Update render item: StandardShadedItem // // apiMeshGeometryOverride: End geometry override update stream and indexing data: apiMesh1 // // apiMeshGeometryOverride: Geometry override clean up: apiMesh1 //
The footPrintNode_GeometryOverride plug-in also enables tracing for MPxGeometryOverride. For geometry overrides, the drawing of render items is not logged as part of the trace as is with draw overrides (MPxDrawOverride). The following is an example trace from the rawfootPrintNode plug-in:
// rawFootPrintNode: Start draw override render item update for object: |transform1|rawfootPrint1 // // rawFootPrintNode: - call draw override prepareForDraw() // // rawFootPrintNode: End draw override render item update for object: |transform1|rawfootPrint1 // // rawFootPrintNode: Start draw override queuing of UI drawables for object: |transform1|rawfootPrint1 // // rawFootPrintNode: - call draw override addUIDrawables() // // rawFootPrintNode: End draw override queuing of UI drawables for object: |transform1|rawfootPrint1 // // rawFootPrintNode: Start draw override draw function: |transform1|rawfootPrint1 // // rawFootPrintNode: End draw override draw function: |transform1|rawfootPrint1 //