예제 #1
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            ObjRef sRef;
            Result r = RhinoGet.GetOneObject("Pick closed curve", false, ObjectType.Curve, out sRef);

            if (r != Result.Success || null == sRef)
            {
                return(r);
            }

            RhinoObject obj = sRef.Object();

            obj.Attributes.SetUserString("Name", "Concrete");
            Curve selectedCurve = sRef.Curve();


            //if the curve is not closed do nothing
            if (!selectedCurve.IsClosed)
            {
                Rhino.RhinoApp.WriteLine("The curve was not closed!!");
                return(Result.Success);
            }

            List <Brep>  breps        = new List <Brep>();
            List <Curve> cuttedCurves = CurveAndBrepManipulation.cutCurve(selectedCurve, Plane.WorldXY, Axis.XAxis);

            foreach (Curve curve in cuttedCurves)
            {
                breps.AddRange(Brep.CreatePlanarBreps(curve));
            }


            DrawAndSaveUserAttr(breps, doc, obj);
            return(Result.Success);
        }
예제 #2
0
        private void CutWithReinforcement()
        {
            RhinoDoc doc = RhinoDoc.ActiveDoc;


            List <Reinforcement>   reinfList = new List <Reinforcement>();
            List <GeometrySegment> segList   = new List <GeometrySegment>();

            foreach (IBrepGeometry brepGeometry in GeometryList)
            {
                if (brepGeometry.GetType() == typeof(Reinforcement))
                {
                    reinfList.Add((Reinforcement)brepGeometry);
                }
                else
                {
                    segList.Add((GeometrySegment)brepGeometry);
                }
            }
            GeometryList = new List <IBrepGeometry>();
            Brep[] reinfBrepList = reinfList.Select(o => o.BrepGeometry).ToArray();

            foreach (GeometryLarge seg in GeometryLarges)
            {
                //if (seg.Material.GetType() == typeof(SteelMaterial)) continue;
                if (seg.Material.GetType() == typeof(ConcreteMaterial) || seg.Material.GetType() == typeof(SteelMaterial))
                {
                    Brep[] tempList = Brep.CreateBooleanDifference(new[] { seg.BaseBrep }, reinfBrepList, doc.ModelAbsoluteTolerance);

                    Brep cuttedBrep;
                    if (tempList == null || tempList.Length == 0)
                    {
                        cuttedBrep = seg.BaseBrep;
                    }
                    else
                    {
                        cuttedBrep = tempList[0];
                    }

                    List <Brep> slicedBrep = CurveAndBrepManipulation.CutBrep(cuttedBrep, Plane.WorldXY, Axis.XAxis);

                    //TODO update the correct material addition to here
                    foreach (Brep brep in slicedBrep)
                    {
                        GeometryList.Add(new GeometrySegment(brep, seg.Material));
                    }
                }
                else
                {
                    RhinoApp.WriteLine($"Cutting of material is not implemented for {seg.Material.GetType()}");
                }
            }
            GeometryList.AddRange(reinfList);
        }