private static void Report(IIfcPolygonalFaceSet obj, TextHighliter sb) { // - Coordinates Ifc4.GeometricModelResource.IfcCartesianPointList3D from: IfcTessellatedFaceSet // - Closed Ifc4.MeasureResource.IfcBoolean(Nullable) // - Faces Ifc4.GeometricModelResource.IfcIndexedPolygonalFace(IItemSet) // - PnIndex Ifc4.MeasureResource.IfcPositiveInteger(IOptionalItemSet) // sb.Append($"-LAYER M {bound.Points.Count} ", Brushes.Black); if (obj.PnIndex != null && obj.PnIndex.Any()) { // todo: implement PnIndex behaviour sb.Append("; Warning: PnIndex not implemented in mesher yet.", Brushes.Red); } foreach (var face in obj.Faces) { sb.Append("3DPOLY", Brushes.Black); foreach (var index in face.CoordIndex) { if (index > int.MaxValue) { sb.Append($";value too long for int in face", Brushes.Black); continue; } int asInt = (int)index; var pt = obj.Coordinates.CoordList[asInt - 1]; WritePointCoord(sb, pt); } sb.Append($"", Brushes.Black); sb.Append($"-HYPERLINK I O l #{face.EntityLabel}", Brushes.Black); sb.Append($"", Brushes.Black); sb.Append($"", Brushes.Black); } }
private static void Report(IIfcPolyline bound, TextHighliter sb) { sb.Append($"-LAYER M {bound.Points.Count} ", Brushes.Black); sb.Append("3DPOLY", Brushes.Black); var first = bound.Points.FirstOrDefault(); IIfcCartesianPoint last = null; foreach (var ifcCartesianPoint in bound.Points) { WritePointCoord(sb, ifcCartesianPoint); last = ifcCartesianPoint; } if (false && last != null) { if (!last.Equals(first)) { sb.Append($";open polyloop", Brushes.Black); } } sb.Append($"", Brushes.Black); sb.Append($"-HYPERLINK I O l #{bound.EntityLabel}", Brushes.Black); sb.Append($"", Brushes.Black); sb.Append($"", Brushes.Black); }
private static void Report(IIfcTessellatedFaceSet obj, TextHighliter sb) { if (obj is IIfcPolygonalFaceSet) { Report((IIfcPolygonalFaceSet)obj, sb); } else { sb.Append($"{obj.GetType().Name} not implemented in IIfcTessellatedFaceSet.", Brushes.Red); } }
private static void Report(IIfcTessellatedItem obj, TextHighliter sb) { if (obj is IIfcTessellatedFaceSet faceset) { Report(faceset, sb); } else { sb.Append($"{obj.GetType().Name} not implemented in IIfcTessellatedItem.", Brushes.Red); } }
private static void Report(IIfcSolidModel obj, TextHighliter sb) { if (obj is IIfcSweptDiskSolid swept) { Report(swept, sb); } else { sb.Append($"{obj.GetType().Name} not implemented in IIfcSolidModel.", Brushes.Red); } }
private static void Report(IIfcLoop bound, TextHighliter sb) { if (bound is IIfcPolyLoop) { Report((IIfcPolyLoop)bound, sb); } else { sb.Append($"{bound.GetType().Name} not implemented in IIfcLoop.", Brushes.Red); } }
private static void Report(IIfcFaceBound ifcFaceBound, TextHighliter sb) { if (ifcFaceBound is IIfcFaceOuterBound) { Report((IIfcFaceOuterBound)ifcFaceBound, sb); } else { sb.Append($"{ifcFaceBound.GetType().Name} not implemented in IIfcFaceBound.", Brushes.Red); } }
private static void SetUcs(TextHighliter sb, IIfcAxis2Placement pos = null) { if (pos == null) { sb.Append("UCS w", Brushes.Black); } else if (pos is IIfcAxis2Placement3D) { var as1 = pos as IIfcAxis2Placement3D; sb.Append("UCS", Brushes.Black); WritePointCoord(sb, as1.Location); WritePointCoord(sb, as1.Axis); WritePointCoord(sb, as1.RefDirection); sb.Append("UCS X 90", Brushes.Black); sb.Append("UCS Y 90", Brushes.Black); } else { sb.Append($"{pos.GetType().Name} not implemented in IIfcCurve.", Brushes.Red); } }
private static void Report(IIfcGeometricRepresentationItem obj, TextHighliter sb) { if (obj is IIfcCurve crv) { Report(crv, sb); } else if (obj is IIfcSolidModel solid) { Report(solid, sb); } else if (obj is IIfcTessellatedItem tess) { Report(tess, sb); } else { sb.Append($"{obj.GetType().Name} not implemented in IIfcGeometricRepresentationItem.", Brushes.Red); } }
private static void Report(IIfcCurve obj, TextHighliter sb) { if (obj is IIfcCompositeCurve) { Report((IIfcCompositeCurve)obj, sb); } else if (obj is IIfcTrimmedCurve) { Report((IIfcTrimmedCurve)obj, sb); } else if (obj is IIfcCircle) { Report((IIfcCircle)obj, sb); } else if (obj is IIfcLine) { Report((IIfcLine)obj, sb); } else { sb.Append($"{obj.GetType().Name} not implemented in IIfcCurve.", Brushes.Red); } }
private static void WritePointCoord(TextHighliter sb, double x, double y, double z, bool relative = false) { var rel = relative ? "@" : ""; sb.Append($"{rel}{x},{y},{z}", Brushes.Black); }