Exemplo n.º 1
0
        public static Brep GetTrimmedBrep(pps.Surface surface, SurfaceConverter surfConv, CurveConverter curveConv)
        {
            var rhSurf = surfConv.FromPipe <Surface, pps.Surface>(surface);
            var brep   = Brep.CreateFromSurface(rhSurf);

            //if (!brep.IsValid) { brep.Repair(Rhino.RhinoMath.ZeroTolerance); }
            if (typeof(pps.NurbsSurface).IsAssignableFrom(surface.GetType()) &&
                ((pps.NurbsSurface)surface).TrimCurves.Count > 0)
            {
                List <ppc.Curve> trims = ((pps.NurbsSurface)surface).TrimCurves;
                List <ppc.Curve> loops = brep.Faces.First().Loops.Select((l) =>
                                                                         curveConv.ToPipe <Curve, ppc.Curve>(l.To3dCurve())).ToList();

                if (!PipeDataUtil.EqualIgnoreOrder(loops, trims))
                {
                    var rhTrims     = trims.Select((c) => curveConv.FromPipe <Curve, ppc.Curve>(c)).ToList();
                    var faceToSplit = brep.Faces.First();
                    var brep2       = faceToSplit.Split(rhTrims, Rhino.RhinoMath.ZeroTolerance);
                    //if (brep2 != null && !brep2.IsValid) { brep2.Repair(Rhino.RhinoMath.ZeroTolerance); }
                    if (brep2 != null && brep2.IsValid)
                    {
                        brep = GetEnclosedFacesAsBrep(brep2, rhTrims) ?? brep2;
                    }
                }
            }

            return(brep);
        }
Exemplo n.º 2
0
 public bool Equals(Mesh otherMesh)
 {
     return PipeDataUtil.EqualIgnoreOrder(_vertices, otherMesh.Vertices) &&
         PipeDataUtil.Equal(_faces, otherMesh.Faces, (f1, f2) => PipeDataUtil.EqualIgnoreOrder(f1, f2));
 }