int WritePolygons(OutputMesh mesh, int position) { int geometriesCount = this.curvedPolygonsNet.GetGeometriesCount(); CPNPolygon[][] polygons = tessellationOutput.GetPolygons(); int[][] polygonsProfile = tessellationOutput.GetPolygonsProfile(); int[][] polygonsVerticesProfile = tessellationOutput.GetPolygonsVerticesProfile(); for (int k = 0; k < geometriesCount; k++) { mesh.SetGeometry(k); CPNGeometry geometry = this.curvedPolygonsNet.GetGeometries()[k]; int geomPolygonsCount = subSet == null?geometry.GetPolygonsCount() : subSet.polygons[k].Length; for (int i = 0; i < geomPolygonsCount; i++) { int index = subSet == null ? i : subSet.polygons[k][i]; int countEffectiveSize = polygons[k][index].sideEdges.Length; CPNPolygon polygonData = polygons[k][index]; if (countEffectiveSize > 2 && countEffectiveSize < TESSELLATION_PROCESS_NET_INTERPOLATORS && !polygonData.skip) { polygonData.computeSideEdgesSizes(); ICPNetInterpolator netInterpolator = manager.GetSchema(polygonData.schemaIndex). interpolators[countEffectiveSize]; netInterpolator.UdpdateContent(mesh, polygonData, polygonsVerticesProfile[k][index], polygonsProfile[k][index]); } } position += polygonsVerticesProfile[k][geometry.GetPolygonsCount()]; int triangleIndex = polygonsProfile[k][geometry.GetPolygonsCount()]; int trianglesCount = geometry.GetTrianglesCount(); short[] triangles = geometry.GetTriangles(); for (int i = 0; i < trianglesCount; i++) { mesh.WriteTriangle(triangleIndex, triangles[3 * i], triangles[3 * i + 1], triangles[3 * i + 2]); triangleIndex++; } int quadsCount = geometry.GetQuadsCount(); short[] quads = geometry.GetQuads(); for (int i = 0; i < quadsCount; i++) { mesh.WriteQuad(triangleIndex, quads[3 * i], quads[3 * i + 1], quads[3 * i + 2], quads[3 * i + 3]); triangleIndex += 2; } } return(position); }