OnPolymesh Method


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: 2015.0.0.0 (2015.0.0.0)
Since: 2014

Syntax

C#
void OnPolymesh(
	PolymeshTopology node
)
Visual Basic
Sub OnPolymesh ( _
	node As PolymeshTopology _
)
Visual C++
void OnPolymesh(
	PolymeshTopology^ node
)

Parameters

node
Type: Autodesk.Revit.DB PolymeshTopology
A node representing topology of the polymesh

Examples

Copy C#
/// <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
}
Copy VB.NET
' <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

See Also