Revit 2025 API
IExport |
This method is called when a tessellated polymesh of a 3d face is being output.
Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 25.0.0.0 (25.0.0.0)
Syntax
void OnPolymesh( PolymeshTopology node )
Sub OnPolymesh ( node As PolymeshTopology )
void OnPolymesh( PolymeshTopology^ node )
abstract OnPolymesh : node : PolymeshTopology -> unit
Parameters
- node PolymeshTopology
- A node representing topology of the polymesh

/// <summary> /// This method is called up for every face that was processed and tessellated /// </summary> /// <remarks> /// The node provides all information about geometric topology if the mesh. /// It is assumed that a concrete exporter would consume the part it can /// understand and/or support (vertices, normals, UVs, etc.) and convert /// them into the final, export format. /// </remarks> public void OnPolymesh(PolymeshTopology node) { // Note: the current material will get applied to the polymesh. // If a stack of transformation is maintained by the context object, // the current combined transform will be applied to the points. Transform currentTransform = m_TransformationStack.Peek(); // basic properties of the mesh int numberOfFacet = node.NumberOfFacets; int numberOfPoints = node.NumberOfPoints; int numberOfUVs = node.NumberOfUVs; int numberOfNormal = node.NumberOfNormals; // Note: Normals are associated with either points or facets of the polymesh // The export code must account for different processing of these two cases. // A) process points of the polymesh if( node.DistributionOfNormals == DistributionOfNormals.AtEachPoint ) { ExportMeshPoints(node.GetPoints(), currentTransform, node.GetNormals() ); } else if( node.DistributionOfNormals == DistributionOfNormals.OnePerFace ) { ExportMeshPoints(node.GetPoints(), currentTransform, node.GetNormal(0) ); } else // DistributionOfNormals.OnEachFacet { // In this case, there is normal vector associated with each facet // Depending on the export, our format either support this case, // of we would have to determine what normals to apply at each // point by a way of combining normal of the surrounding facets. ExportMeshPoints(node.GetPoints(), currentTransform ); } // B Process facets of the polymesh if( node.DistributionOfNormals == DistributionOfNormals.OnEachFacet ) { ExportMeshFacets(node.GetFacets(), node.GetNormals() ); } else { ExportMeshFacets(node.GetFacets(), null ); } // B) Process UV coordinates if available (and applicable) if( node.NumberOfUVs > 0 ) { ExportMeshUVs( node.GetUVs() ); } } private void ExportMeshPoints(IList<XYZ> points, Transform trf, IList<XYZ> normals) { // process points with normals } private void ExportMeshPoints(IList<XYZ> points, Transform trf, XYZ normal) { // process points with only one normal vector (a planar face) } private void ExportMeshPoints(IList<XYZ> points, Transform trf) { // process points without normal (assuming normals are associated with facets instead) } private void ExportMeshFacets(IList<PolymeshFacet> facets, IList<XYZ> normals) { if (normals == null) { // process facets without normals (assuming normals are associated with points instead) } else { // process facets with normals } } private void ExportMeshUVs(IList<UV> UVs) { // process UVs }
' <summary> ' This method is called up for every face that was processed and tessellated ' </summary> ' <remarks> ' The node provides all information about geometric topology if the mesh. ' It is assumed that a concrete exporter would consume the part it can ' understand and/or support (vertices, normals, UVs, etc.) and convert ' them into the final, export format. ' </remarks> Public Sub OnPolymesh(node As PolymeshTopology) Implements IExportContext.OnPolymesh ' Note: the current material will get applied to the polymesh. ' If a stack of transformation is maintained by the context object, ' the current combined transform will be applied to the points. Dim currentTransform As Transform = m_TransformationStack.Peek() ' basic properties of the mesh Dim numberOfFacet As Integer = node.NumberOfFacets Dim numberOfPoints As Integer = node.NumberOfPoints Dim numberOfUVs As Integer = node.NumberOfUVs Dim numberOfNormal As Integer = node.NumberOfNormals ' Note: Normals are associated with either points or facets of the polymesh ' The export code must account for different processing of these two cases. ' A) process points of the polymesh If node.DistributionOfNormals = DistributionOfNormals.AtEachPoint Then ExportMeshPoints(node.GetPoints(), currentTransform, node.GetNormals()) ElseIf node.DistributionOfNormals = DistributionOfNormals.OnePerFace Then ExportMeshPoints(node.GetPoints(), currentTransform, node.GetNormal(0)) Else ' DistributionOfNormals.OnEachFacet ' In this case, there is normal vector associated with each facet ' Depending on the export, our format either support this case, ' of we would have to determine what normals to apply at each ' point by a way of combining normal of the surrounding facets. ExportMeshPoints(node.GetPoints(), currentTransform) End If ' B Process facets of the polymesh If node.DistributionOfNormals = DistributionOfNormals.OnEachFacet Then ExportMeshFacets(node.GetFacets(), node.GetNormals()) Else ExportMeshFacets(node.GetFacets(), Nothing) End If ' B) Process UV coordinates if available (and applicable) If node.NumberOfUVs > 0 Then ExportMeshUVs(node.GetUVs()) End If End Sub Private Sub ExportMeshPoints(points As IList(Of XYZ), trf As Transform, normals As IList(Of XYZ)) ' process points with normals End Sub Private Sub ExportMeshPoints(points As IList(Of XYZ), trf As Transform, normal As XYZ) ' process points with only one normal vector (a planar face) End Sub Private Sub ExportMeshPoints(points As IList(Of XYZ), trf As Transform) ' process points without normal (assuming normals are associated with facets instead) End Sub Private Sub ExportMeshFacets(facets As IList(Of PolymeshFacet), normals As IList(Of XYZ)) ' process facets without normals (assuming normals are associated with points instead) If normals Is Nothing Then ' process facets with normals Else End If End Sub Private Sub ExportMeshUVs(UVs As IList(Of UV)) ' process UVs End Sub
No code example is currently available or this language may not be supported.
No code example is currently available or this language may not be supported.
See Also