Beispiel #1
0
 public CurveConverter(PointConverter ptConv, PipeConverter <rg.Plane, ppg.Plane> planeConv)
 {
     //converting lines
     var lineConv = AddConverter(new PipeConverter <rg.Line, ppc.Line>(
                                     (rl) => {
         return(new ppc.Line(ptConv.ToPipe <rg.XYZ, ppg.Vec>(rl.GetEndPoint(0)),
                             ptConv.ToPipe <rg.XYZ, ppg.Vec>(rl.GetEndPoint(1))));
     },
                                     (ppl) => {
         return(rg.Line.CreateBound(ptConv.FromPipe <rg.XYZ, ppg.Vec>(ppl.StartPoint),
                                    ptConv.FromPipe <rg.XYZ, ppg.Vec>(ppl.EndPoint)));
     }
                                     ));
     //converting arcs
     var arcConv = AddConverter(new PipeConverter <rg.Arc, ppc.Arc>(
                                    (rarc) => {
         ppg.Vec startPt = ptConv.ToPipe <rg.XYZ, ppg.Vec>(rarc.GetEndPoint(0));
         ppg.Vec endPt   = ptConv.ToPipe <rg.XYZ, ppg.Vec>(rarc.GetEndPoint(1));
         ppg.Vec midPt   = ptConv.ToPipe <rg.XYZ, ppg.Vec>(rarc.Evaluate(0.5, true));
         return(new ppc.Arc(startPt, endPt, midPt));
     },
                                    (parc) => {
         return(rg.Arc.Create(planeConv.FromPipe <rg.Plane, ppg.Plane>(parc.Plane), parc.Radius,
                              parc.StartAngle, parc.EndAngle));
     }
                                    ));
     //converting nurbs curves
     var nurbsConv = AddConverter(new PipeConverter <rg.NurbSpline, ppc.NurbsCurve>(
                                      (rnc) => {
         return(new ppc.NurbsCurve(rnc.CtrlPoints.Select(
                                       (pt) => ptConv.ToPipe <rg.XYZ, ppg.Vec>(pt)).ToList(), rnc.Degree, rnc.Weights.Cast <double>().ToList(),
                                   rnc.Knots.Cast <double>().ToList(), rnc.isClosed));
     },
                                      null
                                      ));
     var nurbsConv2 = AddConverter(new PipeConverter <rg.Curve, ppc.NurbsCurve>(
                                       null,
                                       (pnc) => {
         if (pnc.IsClosed)
         {
             //revit doesn't support closed nurbs curves
             Utils.RevitPipeUtil.ShowMessage("Conversion failed", "Closed NurbSplines are not supported",
                                             "Revit doesn't support closed Nurbs curves. Revit's website says you can instead close one" +
                                             "Nurbs curve with another.");
             return(null);
         }
         var ptList = pnc.ControlPoints.Select((pt) => ptConv.FromPipe <rg.XYZ, ppg.Vec>(pt)).ToList();
         return(rg.NurbSpline.CreateCurve(ptList, pnc.Weights.ToList()));
     }
                                       ));
 }
Beispiel #2
0
 public PlaneConverter(Vector3DConverter vecConv, Point3dConverter ptConv) :
     base(
         (rhp) =>
 {
     pp.Vec origin = ptConv.ToPipe <rh.Point3d, pp.Vec>(rhp.Origin);
     pp.Vec x      = vecConv.ToPipe <rh.Vector3d, pp.Vec>(rhp.XAxis);
     pp.Vec y      = vecConv.ToPipe <rh.Vector3d, pp.Vec>(rhp.YAxis);
     //we won't convert the z-axis because we can simply cross the x and y
     return(new pp.Plane(origin, x, y));
 },
         (ppp) =>
 {
     rh.Point3d origin = ptConv.FromPipe <rh.Point3d, pp.Vec>(ppp.Origin);
     rh.Vector3d x     = vecConv.FromPipe <rh.Vector3d, pp.Vec>(ppp.X);
     rh.Vector3d y     = vecConv.FromPipe <rh.Vector3d, pp.Vec>(ppp.Y);
     return(new rh.Plane(origin, x, y));
 }
         ) { }