public static Rhino.Commands.Result AddNestedBlock(RhinoDoc doc) { var circle = new Circle(Point3d.Origin, 5); Curve[] curveList = { new ArcCurve(circle) }; var circleIndex = doc.InstanceDefinitions.Add("Circle", "Circle with radius of 5", Point3d.Origin, curveList); var transform = Transform.Identity; var irefId = doc.InstanceDefinitions[circleIndex].Id; var iref = new InstanceReferenceGeometry(irefId, transform); circle.Radius = circle.Radius * 2.0; GeometryBase[] blockList = { iref, new ArcCurve(circle) }; var circle2Index = doc.InstanceDefinitions.Add("TwoCircles", "Nested block test", Point3d.Origin, blockList); doc.Objects.AddInstanceObject(circle2Index, transform); doc.Views.Redraw(); return(Rhino.Commands.Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // Create a circle curve var circle = new Circle(Plane.WorldXY, 5.0); var curve0 = new ArcCurve(circle); // Add an instance defintion that uses the circle curve var attrib = doc.CreateDefaultAttributes(); var idef0_index = doc.InstanceDefinitions.Add("Circle", "Circle", Point3d.Origin, curve0, attrib); // Create a reference to the instance definition var idef0_id = doc.InstanceDefinitions[idef0_index].Id; var iref0 = new InstanceReferenceGeometry(idef0_id, Transform.Identity); // Create a polyline curve var rect = new Point3d[5]; rect[0] = new Point3d(-5.0, -5.0, 0.0); rect[1] = new Point3d(5.0, -5.0, 0.0); rect[2] = new Point3d(5.0, 5.0, 0.0); rect[3] = new Point3d(-5.0, 5.0, 0.0); rect[4] = rect[0]; var curve1 = new PolylineCurve(rect); // Add another instance definition that uses the polyline curve // and the instance reference var geometry = new GeometryBase[] { curve1, iref0 }; var attributes = new[] { attrib, attrib }; var idef1_index = doc.InstanceDefinitions.Add("Rectangle and Circle", "Rectangle and Circle", Point3d.Origin, geometry, attributes); // Add an instace of the new defintion to the document and redraw doc.Objects.AddInstanceObject(idef1_index, Transform.Identity); doc.Views.Redraw(); return(Result.Success); }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Application app = uiapp.Application; Document doc = uidoc.Document; View activeView = doc.ActiveView; //duplicated in the helper file! remember to change both double scale = 304.8; //string path = @"C:\Users\gbrog\Desktop\test.3dm"; string path = @"C:\Users\giovanni.brogiolo\Desktop\ST00-0221.3dm"; File3dm rhinoModel = File3dm.Read(path); List <Rhino.DocObjects.Layer> m_layers = rhinoModel.AllLayers.ToList(); List <string> layers = Get_RhinoLayerNames(rhinoModel); File3dmObject[] rhinoObjects = Get_RhinoObjects(rhinoModel); List <Rhino.Geometry.LineCurve> rh_lines = new List <Rhino.Geometry.LineCurve>(); List <Rhino.Geometry.ArcCurve> rh_arc = new List <Rhino.Geometry.ArcCurve>(); List <Rhino.Geometry.TextEntity> rh_text = new List <TextEntity>(); List <Rhino.Geometry.Leader> rh_textLeader = new List <Rhino.Geometry.Leader>(); List <Rhino.Geometry.LinearDimension> rh_linearDimension = new List <LinearDimension>(); List <List <Rhino.Geometry.Point3d> > rh_polylineCurvePoints = new List <List <Point3d> >(); List <Tuple <string, XYZ> > rh_Blocks = new List <Tuple <string, XYZ> >(); foreach (var item in rhinoObjects) { GeometryBase geo = item.Geometry; // check if geometry is a curve if (geo is Rhino.Geometry.LineCurve) { // add curve to list Rhino.Geometry.LineCurve ln = geo as Rhino.Geometry.LineCurve; rh_lines.Add(ln); } if (geo is Rhino.Geometry.ArcCurve) { // add curve to list Rhino.Geometry.ArcCurve arc = geo as Rhino.Geometry.ArcCurve; rh_arc.Add(arc); } if (!item.Attributes.IsInstanceDefinitionObject && geo is Rhino.Geometry.PolylineCurve) { PolylineCurve pc = geo as PolylineCurve; Polyline pl = pc.ToPolyline(); rh_polylineCurvePoints.Add(pl.ToList()); } if (geo is Rhino.Geometry.TextEntity) { TextEntity te = geo as Rhino.Geometry.TextEntity; rh_text.Add(te); } if (geo is Rhino.Geometry.Leader) { rh_textLeader.Add(geo as Rhino.Geometry.Leader); //var text = geo as Rhino.Geometry.Leader; //TaskDialog.Show("r", text.PlainText); } if (geo is Rhino.Geometry.AnnotationBase) { var text = geo as Rhino.Geometry.AnnotationBase; //TaskDialog.Show("r", text.PlainText); } if (geo is Rhino.Geometry.LinearDimension) { LinearDimension ld = geo as Rhino.Geometry.LinearDimension; rh_linearDimension.Add(ld); } if (geo is Rhino.Geometry.InstanceReferenceGeometry) { InstanceReferenceGeometry refGeo = (InstanceReferenceGeometry)geo; // Lookup the parent block definition System.Guid blockDefId = refGeo.ParentIdefId; InstanceDefinitionGeometry def = rhinoModel.AllInstanceDefinitions.FindId(blockDefId); // block definition name string defname = def.Name; //TaskDialog.Show("R", defname); // transform data for block instance Rhino.Geometry.Transform xform = refGeo.Xform; double x = refGeo.Xform.M03 / scale; double y = refGeo.Xform.M13 / scale; XYZ placementPt = new XYZ(x, y, 0); rh_Blocks.Add(new Tuple <string, XYZ>(defname, placementPt)); } } //TaskDialog.Show("r", rh_linearDimension.Count.ToString()); Rhynamo.clsGeometryConversionUtils rh_ds = new Rhynamo.clsGeometryConversionUtils(); using (Transaction t = new Transaction(doc, "Convert lines")) { t.Start(); rh_ds.Convert_rhLinesToRevitDetailCurve(doc, rh_lines, "3 Arup Continuous Line"); rh_ds.Convert_PolycurveToLines(doc, rh_polylineCurvePoints, "1 Arup Continuous Line"); rh_ds.Convert_ArcsToDS(doc, rh_arc); rh_ds.RhinoTextToRevitNote(doc, rh_text); rh_ds.RhinoLeaderToRevitNote(doc, rh_textLeader); rh_ds.RhinoToRevitDimension(doc, rh_linearDimension); rh_ds.Convert_rhBlocks(doc, rh_Blocks); t.Commit(); } TaskDialog.Show("r", "Done"); return(Result.Succeeded); }