Ejemplo n.º 1
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var gp = new GetPoint();

            gp.SetCommandPrompt("Start point");
            gp.AddOptionEnumList("Justification", m_justification);
            gp.ConstrainToConstructionPlane(false);
            for (;;)
            {
                var res = gp.Get();
                if (res == GetResult.Option)
                {
                    var option = gp.Option();
                    if (null != option)
                    {
                        var list = Enum.GetValues(typeof(TextJustification)).Cast <TextJustification>().ToList();
                        m_justification = list[option.CurrentListOptionIndex];
                    }
                    continue;
                }
                if (res != GetResult.Point)
                {
                    return(Result.Cancel);
                }
                break;
            }

            var point = gp.Point();

            var plane = gp.View().ActiveViewport.ConstructionPlane();

            plane.Origin = point;

            var text = new TextEntity
            {
                Plane         = plane,
                Justification = m_justification
            };

            text.PlainText = text.Justification.ToString();

            var attr = new ObjectAttributes
            {
                ColorSource = ObjectColorSource.ColorFromObject,
                ObjectColor = Color.FromArgb(0, 0, 255)
            };

            var object_id = doc.Objects.AddText(text, attr);

            RhinoApp.WriteLine("{0}", object_id.ToString());

            doc.Views.Redraw();

            return(Result.Success);
        }
Ejemplo n.º 2
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            GetPoint gp = new GetPoint();

            gp.SetCommandPrompt("Start point");
            gp.AddOptionEnumList("Justification", m_justification);
            gp.ConstrainToConstructionPlane(false);
            for (;;)
            {
                GetResult res = gp.Get();
                if (res == GetResult.Option)
                {
                    CommandLineOption option = gp.Option();
                    if (null != option)
                    {
                        List <TextJustification> list = Enum.GetValues(typeof(TextJustification)).Cast <TextJustification>().ToList();
                        m_justification = list[option.CurrentListOptionIndex];
                    }
                    continue;
                }
                else if (res != GetResult.Point)
                {
                    return(Result.Cancel);
                }
                break;
            }

            Point3d point = gp.Point();

            Plane plane = gp.View().ActiveViewport.ConstructionPlane();

            plane.Origin = point;

            TextEntity text = new TextEntity();

            text.Plane         = plane;
            text.Justification = m_justification;
            text.Text          = text.Justification.ToString();

            doc.Objects.AddPoint(point);
            doc.Objects.AddText(text);
            doc.Views.Redraw();

            return(Result.Success);
        }
Ejemplo n.º 3
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var gp = new GetPoint();

            gp.SetCommandPrompt("Center of circle");
            gp.Get();
            if (gp.CommandResult() != Result.Success)
            {
                return(gp.CommandResult());
            }

            var view = gp.View();

            if (null == view)
            {
                return(Result.Failure);
            }

            var plane = view.ActiveViewport.ConstructionPlane();

            plane.Origin = gp.Point();

            var gr = new GetRadiusPoint(plane);

            gr.SetCommandPrompt("Radius");
            gr.Get();
            if (gr.CommandResult() != Result.Success)
            {
                return(gr.CommandResult());
            }

            if (gr.CalculateCircle(gr.Point()))
            {
                doc.Objects.AddCircle(gr.Circle);
                doc.Views.Redraw();
            }

            return(Result.Success);
        }
Ejemplo n.º 4
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var gp = new GetPoint();

            gp.SetCommandPrompt("Pick a point");
            gp.Get();
            if (gp.CommandResult() != Result.Success)
            {
                return(gp.CommandResult());
            }

            var point = gp.Point();

            var format   = string.Format("F{0}", doc.DistanceDisplayPrecision);
            var provider = CultureInfo.InvariantCulture;

            var x = point.X.ToString(format, provider);
            var y = point.Y.ToString(format, provider);
            var z = point.Z.ToString(format, provider);

            RhinoApp.WriteLine("World coordinates: {0},{1},{2}", x, y, z);

            var view = gp.View();

            if (null != view)
            {
                var plane = view.ActiveViewport.ConstructionPlane();
                var xform = Transform.ChangeBasis(Plane.WorldXY, plane);

                point.Transform(xform);

                x = point.X.ToString(format, provider);
                y = point.Y.ToString(format, provider);
                z = point.Z.ToString(format, provider);
                RhinoApp.WriteLine("CPlane coordinates: {0},{1},{2}", x, y, z);
            }

            return(Result.Success);
        }
        /// <summary>
        /// Runs the command
        /// </summary>
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            // Select objects to orient
            var go = new GetObject();

            go.SetCommandPrompt("Select objects to orient");
            go.SubObjectSelect = false;
            go.GroupSelect     = true;
            go.GetMultiple(1, 0);
            if (go.CommandResult() != Result.Success)
            {
                return(go.CommandResult());
            }

            // Point to orient from
            var gp = new GetPoint();

            gp.SetCommandPrompt("Point to orient from");
            gp.Get();
            if (gp.CommandResult() != Result.Success)
            {
                return(gp.CommandResult());
            }

            // Define source plane
            var view = gp.View();

            if (view == null)
            {
                view = doc.Views.ActiveView;
                if (view == null)
                {
                    return(Result.Failure);
                }
            }

            var plane = view.ActiveViewport.ConstructionPlane();

            plane.Origin = gp.Point();

            // Curve to orient on
            var gc = new GetObject();

            gc.SetCommandPrompt("Curve to orient on");
            gc.GeometryFilter = ObjectType.Curve;
            gc.EnablePreSelect(false, true);
            gc.DeselectAllBeforePostSelect = false;
            gc.Get();
            if (gc.CommandResult() != Result.Success)
            {
                return(gc.CommandResult());
            }

            var objref = gc.Object(0);
            var obj    = objref.Object();
            var curve  = objref.Curve();

            if (obj == null || curve == null)
            {
                return(Result.Failure);
            }

            // Unselect curve
            obj.Select(false);

            // Point on surface to orient to
            var gx = new GetOrientPerpendicularPoint(curve, plane, go.Object(0).Object());

            gx.SetCommandPrompt("New base point on curve");
            gx.Get();
            if (gx.CommandResult() != Result.Success)
            {
                return(gx.CommandResult());
            }

            // One final calculation
            var xform = new Transform(1);

            if (gx.CalculateTransform(gx.View().ActiveViewport, gx.Point(), ref xform))
            {
                doc.Objects.Transform(go.Object(0).Object(), xform, true);
                doc.Views.Redraw();
            }

            return(Result.Success);
        }
        /// <summary>
        /// Called by Rhino to 'run' this command
        /// </summary>
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            // Select objects to orient
            var go = new GetObject();

            go.SetCommandPrompt("Select objects to orient");
            go.SubObjectSelect = false;
            go.EnableIgnoreGrips(true);
            go.GetMultiple(1, 0);
            if (go.CommandResult() != Result.Success)
            {
                return(go.CommandResult());
            }

            // Point to move from
            var gp = new GetPoint();

            gp.SetCommandPrompt("Point to move from");
            gp.Get();
            if (gp.CommandResult() != Result.Success)
            {
                return(gp.CommandResult());
            }

            // Calculate source plane
            var plane = gp.View().ActiveViewport.ConstructionPlane();

            plane.Origin = gp.Point();

            // Mesh to orient on
            var gm = new GetObject();

            gm.SetCommandPrompt("Mesh to orient on");
            gm.GeometryFilter = ObjectType.Mesh;
            gm.EnablePreSelect(false, true);
            gm.DeselectAllBeforePostSelect = false;
            gm.Get();
            if (gm.CommandResult() != Result.Success)
            {
                return(gm.CommandResult());
            }

            var mesh = gm.Object(0).Mesh();

            if (null == mesh)
            {
                return(Result.Failure);
            }

            // Point on mesh to orient to
            var gpm = new GetPointOnMesh(mesh, plane);

            gpm.SetCommandPrompt("Point on mesh to orient to");
            gpm.AppendObjects(go);
            gpm.Get();
            if (gpm.CommandResult() != Result.Success)
            {
                return(gpm.CommandResult());
            }

            // One final calculation
            var xform = new Transform(1);

            if (gpm.CalculateTransform(gpm.View().ActiveViewport, gpm.Point(), ref xform))
            {
                foreach (var objRef in go.Objects())
                {
                    var obj = objRef.Object();
                    if (null != obj)
                    {
                        doc.Objects.Transform(obj, xform, true);
                    }
                }
                doc.Views.Redraw();
            }

            return(Result.Success);
        }
Ejemplo n.º 7
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            GetPoint gp = new GetPoint();

            gp.SetCommandPrompt("Base of cylinder");
            gp.Get();
            if (gp.CommandResult() != Result.Success)
            {
                return(gp.CommandResult());
            }

            Point3d   center = gp.Point();
            Plane     plane  = Plane.WorldXY;
            RhinoView view   = gp.View();

            if (null != view)
            {
                plane = view.ActiveViewport.ConstructionPlane();
            }
            plane.Origin = center;

            var cylinder = new SampleCsGumballCylinder(plane, m_radius, m_height);

            var radius_go = new GumballObject();
            var height_go = new GumballObject();

            var radius_dc = new GumballDisplayConduit();
            var height_dc = new GumballDisplayConduit();

            var radius_gas = RadiusGumballAppearanceSettings();
            var height_gas = HeightGumballAppearanceSettings();

            while (true)
            {
                radius_go.SetFromPlane(cylinder.RadiusPlane);
                height_go.SetFromPlane(cylinder.HeightPlane);

                radius_dc.SetBaseGumball(radius_go, radius_gas);
                height_dc.SetBaseGumball(height_go, height_gas);

                radius_dc.Enabled = true;
                height_dc.Enabled = true;

                var gx = new SampleCsGumballCylinderGetPoint(cylinder, radius_dc, height_dc);
                gx.SetCommandPrompt("Drag gumball. Press Enter when done");
                gx.AcceptNothing(true);
                gx.MoveGumball();

                radius_dc.Enabled = false;
                height_dc.Enabled = false;

                if (gx.CommandResult() != Result.Success)
                {
                    break;
                }

                var res = gx.Result();
                if (res == GetResult.Point)
                {
                    var radius = cylinder.Radius;
                    var height = cylinder.Height;
                    cylinder = new SampleCsGumballCylinder(plane, radius, height);
                    continue;
                }
                if (res == GetResult.Nothing)
                {
                    m_radius = cylinder.Radius;
                    m_height = cylinder.Height;
                    cylinder = new SampleCsGumballCylinder(plane, m_radius, m_height);
                    var brep = cylinder.ToBrep;
                    if (null != brep)
                    {
                        doc.Objects.AddBrep(brep);
                    }
                }

                break;
            }

            doc.Views.Redraw();

            return(Result.Success);
        }
Ejemplo n.º 8
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            //pick objects to expand
            Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject();
            go.SetCommandPrompt("Select objects to expand");
            go.GroupSelect     = true;
            go.SubObjectSelect = false;
            go.EnableClearObjectsOnEntry(false);
            go.EnableUnselectObjectsOnExit(false);
            go.DeselectAllBeforePostSelect = false;
            go.GetMultiple(1, 0);

            //Compute center
            Point3d centersAdd = new Point3d();

            for (int i = 0; i < go.ObjectCount; i++)
            {
                BoundingBox bbObj       = go.Object(i).Geometry().GetBoundingBox(true);
                Point3d     bbObjCenter = bbObj.Center;
                centers.Add(bbObjCenter);
                centersAdd += bbObjCenter;

                Rhino.DocObjects.ObjRef objref = go.Object(i);
                // get selected surface object
                Rhino.DocObjects.RhinoObject obj = objref.Object();
                goList.Add(obj);
            }
            Point3d allCenter = centersAdd / centers.Count;

            //pick center
            GetPoint gp = new GetPoint();

            gp.SetCommandPrompt("Basepoint. Press Enter for automatic.");
            gp.AcceptNothing(true);
            var resgp = gp.Get();

            if (resgp == GetResult.Nothing)
            {
                scaleCenter = allCenter;
            }
            else
            {
                scaleCenter = gp.Point();
            }

            //Expansion factor
            GetPoint gp2 = new GetPoint();

            gp2.SetCommandPrompt("Expansion factor or first reference point <" + factor + ">");
            gp2.DrawLineFromPoint(scaleCenter, true);
            gp2.AcceptNumber(true, true);
            GetResult gr = gp2.Get();

            Rhino.Display.RhinoView view = gp2.View();
            plane2D = view.ActiveViewport.ConstructionPlane();

            if (gr == GetResult.Number)
            {
                factor = gp2.Number();
            }
            if (gr == GetResult.Point)
            {
                scaleRefPoint = gp2.Point();
                Line line1     = new Line(scaleCenter, scaleRefPoint);
                Guid tempLine  = doc.Objects.AddLine(line1);
                Guid tempPoint = doc.Objects.AddPoint(scaleRefPoint);
                if (scaleCenter == gp2.Point())
                {
                    return(Rhino.Commands.Result.Cancel);
                }
                GetPoint gp3 = new GetPoint();
                gp3.SetCommandPrompt("Secondt reference point");
                gp3.AddOptionList("ScaleDimension", dimensions, 0);
                gp3.DrawLineFromPoint(scaleCenter, true);
                gp3.DynamicDraw += RefObjDraw;

                while (true)
                {
                    GetResult res = gp3.Get();
                    if (res == GetResult.Option)
                    {
                        dimensionIndex = gp3.Option().CurrentListOptionIndex;
                        continue;
                    }
                    else if (res == GetResult.Point)
                    {
                        Point3d scaleRefPoint2 = gp3.Point();
                        factor = (scaleCenter.DistanceTo(scaleRefPoint2)) / (scaleCenter.DistanceTo(scaleRefPoint));
                        doc.Objects.Delete(tempLine, true);
                        doc.Objects.Delete(tempPoint, true);
                    }
                    break;
                }
            }
            RhinoApp.WriteLine("Expantion factor: " + factor);

            //Compute translation

            //Translate 3d
            if (dimensionIndex == 0)
            {
                for (int i = 0; i < go.ObjectCount; i++)
                {
                    Vector3d vec   = (centers[i] - scaleCenter) * (factor - 1);
                    var      xform = Transform.Translation(vec);
                    doc.Objects.Transform(go.Object(i), xform, true);
                }
            }
            //Translate 2d
            else if (dimensionIndex == 1)
            {
                for (int i = 0; i < go.ObjectCount; i++)
                {
                    Rhino.Geometry.Vector3d vec = (centers[i] - scaleCenter) * (factor - 1);
                    Vector3d planeNormal        = plane2D.Normal;
                    if (planeNormal[0] != 0)
                    {
                        vec.X = 0;
                    }
                    else if (planeNormal[1] != 0)
                    {
                        vec.Y = 0;
                    }
                    else if (planeNormal[2] != 0)
                    {
                        vec.Z = 0;
                    }
                    var xform = Rhino.Geometry.Transform.Translation(vec);
                    doc.Objects.Transform(go.Object(i), xform, true);
                }
            }
            //Translate 1d
            else if (dimensionIndex == 2)
            {
                for (int i = 0; i < go.ObjectCount; i++)
                {
                    Vector3d vecEach       = (centers[i] - scaleCenter);
                    double   vecEachLength = vecEach.Length * (factor - 1);
                    Vector3d vec           = (scaleRefPoint - scaleCenter);
                    double   angleVec      = Vector3d.VectorAngle(vecEach, vec);
                    int      pol           = 1;
                    if (angleVec > 1.57)
                    {
                        pol = -1;
                    }
                    vec.Unitize();
                    vec = vec * vecEachLength * pol;

                    var xform = Transform.Translation(vec);
                    doc.Objects.Transform(go.Object(i), xform, true);
                }
            }

            goList         = new List <Object>();
            centers        = new List <Point3d>();
            dimensionIndex = 0;
            plane2D        = new Plane();

            doc.Views.Redraw();
            return(Result.Success);
        }
Ejemplo n.º 9
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            // Locals
            Plane     plane;
            Point3d   base_point = Point3d.Unset;
            Point3d   ref_point  = Point3d.Unset;
            GetResult res        = GetResult.Nothing;
            Result    rc         = Result.Nothing;


            // Select objects to rotate
            TransformObjectList list = new TransformObjectList();

            rc = SelectObjects("Select objects to rotate", list);
            if (rc != Result.Success)
            {
                return(rc);
            }

            GetPoint gp = new GetPoint();

            gp.SetCommandPrompt("Center of rotation");
            gp.Get();
            if (gp.CommandResult() != Result.Success)
            {
                return(gp.CommandResult());
            }

            RhinoView view = gp.View();

            if (null == view)
            {
                return(Result.Failure);
            }

            base_point   = gp.Point();
            plane        = view.ActiveViewport.ConstructionPlane();
            plane.Origin = base_point;


            // Angle or first reference point
            GetReferencePoint gr = new GetReferencePoint(base_point);

            gr.SetCommandPrompt("Angle or first reference point");
            res = gr.Get();
            if (res == GetResult.Point)
            {
                view = gr.View();
                rc   = (null != view) ? Result.Success : Result.Failure;
                if (rc == Result.Success)
                {
                    plane        = view.ActiveViewport.ConstructionPlane();
                    plane.Origin = base_point;
                    ref_point    = plane.ClosestPoint(gr.Point());
                    if (base_point.DistanceTo(ref_point) <= RhinoMath.ZeroTolerance)
                    {
                        rc = Result.Nothing;
                    }
                }
                if (rc != Result.Success)
                {
                    return(rc);
                }
            }
            else if (res == GetResult.Number)
            {
                Transform xform = Transform.Rotation(Rhino.RhinoMath.ToRadians(gr.Number()), plane.Normal, base_point);
                rc = (xform.IsValid) ? Result.Success : Result.Failure;
                if (rc == Result.Success)
                {
                    TransformObjects(list, xform, false, false);
                    doc.Views.Redraw();
                }
                return(rc);
            }
            else
            {
                return(Result.Cancel);
            }


            // Second reference point
            GetRotationTransform gx = new GetRotationTransform(plane, base_point, ref_point);

            gx.SetCommandPrompt("Second reference point");
            gx.AddTransformObjects(list);
            res = gx.GetXform();
            if (res == GetResult.Point)
            {
                view = gx.View();
                rc   = (null != view) ? Result.Success : Result.Failure;
                if (rc == Result.Success)
                {
                    Transform xform = gx.CalculateTransform(view.ActiveViewport, gx.Point());
                    rc = (xform.IsValid) ? Result.Success : Result.Failure;
                    if (rc == Result.Success)
                    {
                        TransformObjects(list, xform, false, false);
                        doc.Views.Redraw();
                    }
                }
            }
            else if (res == GetResult.Number)
            {
                Transform xform = Transform.Rotation(Rhino.RhinoMath.ToRadians(gx.Number()), plane.Normal, base_point);
                rc = (xform.IsValid) ? Result.Success : Result.Failure;
                if (rc == Result.Success)
                {
                    TransformObjects(list, xform, false, false);
                    doc.Views.Redraw();
                }
            }
            else
            {
                rc = Result.Cancel;
            }

            return(rc);
        }
Ejemplo n.º 10
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            var myTypes = ObjectType.AnyObject ^ ObjectType.BrepLoop;


            //pick objects to expand
            Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject();
            go.SetCommandPrompt("Select objects to scale");
            go.GeometryFilter = myTypes;
            //go.GroupSelect = true;
            go.SubObjectSelect = true;
            //go.EnableClearObjectsOnEntry(false);
            //go.EnableUnselectObjectsOnExit(false);
            //go.DeselectAllBeforePostSelect = false;
            go.GetMultiple(1, 0);

            //Compute center
            Point3d centersAdd = new Point3d();

            for (int i = 0; i < go.ObjectCount; i++)
            {
                BoundingBox bbObj       = go.Object(i).Geometry().GetBoundingBox(true);
                Point3d     bbObjCenter = bbObj.Center;
                centers.Add(bbObjCenter);
                centersAdd += bbObjCenter;

                Rhino.DocObjects.ObjRef objref = go.Object(i);
                // get selected surface object
                Rhino.DocObjects.RhinoObject obj = objref.Object();
                dynRef.Add(objref);
            }
            Point3d allCenter = centersAdd / centers.Count;

            //pick center
            GetPoint gp = new GetPoint();

            gp.SetCommandPrompt("Basepoint. Press Enter for automatic.");
            gp.AcceptNothing(true);
            var resgp = gp.Get();

            if (resgp == GetResult.Nothing)
            {
                scaleCenter = allCenter;
            }
            else
            {
                scaleCenter = gp.Point();
            }

            Rhino.Display.RhinoView view = gp.View();
            plane2D = view.ActiveViewport.ConstructionPlane();

            //Expansion factor
            GetPoint gp2 = new GetPoint();

            gp2.SetCommandPrompt("Scale factor or first reference point <" + factor + ">");
            gp2.DrawLineFromPoint(scaleCenter, true);
            gp2.AcceptNumber(true, true);
            GetResult gr = gp2.Get();



            if (gr == GetResult.Number)
            {
                factor = gp2.Number();
            }
            if (gr == GetResult.Point)
            {
                scaleRefPoint = gp2.Point();
                Line line1     = new Line(scaleCenter, scaleRefPoint);
                Guid tempLine  = doc.Objects.AddLine(line1);
                Guid tempPoint = doc.Objects.AddPoint(scaleRefPoint);
                if (scaleCenter == gp2.Point())
                {
                    return(Rhino.Commands.Result.Cancel);
                }
                GetPoint gp3 = new GetPoint();
                gp3.SetCommandPrompt("Secondt reference point");
                gp3.AddOptionList("ScaleDimension", dimensions, 0);
                gp3.DrawLineFromPoint(scaleCenter, true);
                gp3.DynamicDraw += RefObjDraw;

                while (true)
                {
                    GetResult res = gp3.Get();
                    if (res == GetResult.Option)
                    {
                        dimensionIndex = gp3.Option().CurrentListOptionIndex;
                        continue;
                    }
                    else if (res == GetResult.Point)
                    {
                        Point3d scaleRefPoint2 = gp3.Point();

                        factor = (scaleCenter.DistanceTo(scaleRefPoint2)) / (scaleCenter.DistanceTo(scaleRefPoint));
                        doc.Objects.Delete(tempLine, true);
                        doc.Objects.Delete(tempPoint, true);
                    }
                    break;
                }
            }
            RhinoApp.WriteLine("Scale factor: " + factor);

            //Compute translation

            //Translate 3d
            if (dimensionIndex == 0)
            {
                for (int i = 0; i < go.ObjectCount; i++)
                {
                    var xform  = Transform.Scale(centers[i], factor);
                    var objref = go.Object(i);
                    var brep   = objref.Brep();
                    var index  = objref.GeometryComponentIndex.Index;
                    if (index > 0)
                    {
                        brep.TransformComponent(new[] { objref.GeometryComponentIndex }, xform, doc.ModelAbsoluteTolerance, 0, true);
                        doc.Objects.Replace(objref.ObjectId, brep);
                    }
                    else
                    {
                        doc.Objects.Transform(go.Object(i), xform, true);
                    }
                }
            }
            //Translate 2d
            else if (dimensionIndex == 1)
            {
                for (int i = 0; i < go.ObjectCount; i++)
                {
                    plane2D.Origin = centers[i];
                    var xform  = Rhino.Geometry.Transform.Scale(plane2D, factor, factor, 1);
                    var objref = go.Object(i);
                    var brep   = objref.Brep();
                    var index  = objref.GeometryComponentIndex.Index;
                    if (index > 0)
                    {
                        brep.TransformComponent(new[] { objref.GeometryComponentIndex }, xform, doc.ModelAbsoluteTolerance, 0, true);
                        doc.Objects.Replace(objref.ObjectId, brep);
                    }
                    else
                    {
                        doc.Objects.Transform(go.Object(i), xform, true);
                    }
                }
            }
            //Translate 1d
            else if (dimensionIndex == 2)
            {
                for (int i = 0; i < go.ObjectCount; i++)
                {
                    Vector3d vec        = (scaleRefPoint - scaleCenter);
                    Plane    scalePlane = new Plane(centers[i], vec);
                    var      xform      = Transform.Scale(scalePlane, 1, 1, factor);
                    var      objref     = go.Object(i);
                    var      brep       = objref.Brep();
                    var      index      = objref.GeometryComponentIndex.Index;
                    if (index > 0)
                    {
                        brep.TransformComponent(new[] { objref.GeometryComponentIndex }, xform, doc.ModelAbsoluteTolerance, 0, true);
                        doc.Objects.Replace(objref.ObjectId, brep);
                    }
                    else
                    {
                        doc.Objects.Transform(go.Object(i), xform, true);
                    }
                }
            }

            centers        = new List <Point3d>();
            dimensionIndex = 0;
            plane2D        = new Plane();
            dynRef         = new List <Rhino.DocObjects.ObjRef>();

            doc.Views.Redraw();
            return(Result.Success);
        }