예제 #1
0
    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);
    }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }