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); }
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); }