public GeometryConverter(PointConverter ptConv, PipeConverter <rg.Plane, ppg.Plane> planeConv) { //converting various types of curves CurveConverter = new CurveConverter(ptConv, planeConv); AddConverter(CurveConverter); MeshConverter = new MeshConverter(ptConv); AddConverter(MeshConverter); SolidConverter = new SolidConverter(MeshConverter); AddConverter(SolidConverter); /* * Commenting out the Revit Polyline conversion because revit does not treat polylines as geometry * that means it has to be added as a set of lines, and that makes change tracking and updating * gemetry difficult so I am not supporting polylines until I can think of a better strategy. */ //converting polylines: for some reasons polyline class doesn't inherit from curves in revit //var polylineConv = AddConverter(new PipeConverter<rg.PolyLine, ppc.Polyline>( // (rpl) => // { // List<rg.XYZ> pts = rpl.GetCoordinates().ToList(); // return new ppc.Polyline(pts.Select((pt) => ptConv.ToPipe<rg.XYZ, ppg.Vec>(pt)).ToList()); // }, // (ppl) => // { // return rg.PolyLine.Create(ppl.Points.Select((pt) => ptConv.FromPipe<rg.XYZ, ppg.Vec>(pt)).ToList()); // } //)); }
public SolidConverter(MeshConverter meshConv) : base( (rs) => { //return meshConv.ToPipe<rg.Mesh, ppg.Mesh>(rf.Triangulate()); ppg.Mesh mesh = null; foreach (rg.Face face in rs.Faces) { var faceMesh = meshConv.ToPipe <rg.Mesh, ppg.Mesh>(face.Triangulate()); if (mesh == null) { mesh = faceMesh; } else { mesh.MergeMesh(faceMesh); } } return(mesh); }, null ) { }