예제 #1
0
        protected override void PreDrawObjects(Rhino.Display.DrawEventArgs e)
        {
            base.PreDrawObjects(e);

            RhinoObject foundObject = Rhino.RhinoDoc.ActiveDoc.Objects.Find(Id);

            Rhino.Geometry.BoundingBox bbox = foundObject.Geometry.GetBoundingBox(true);
            bbox.Inflate(2);
            e.Display.EnableDepthWriting(false);
            List <Rhino.Geometry.Point3d> bboxCorners = bbox.GetCorners().ToList();
            List <Rhino.Geometry.Line>    bboxEdges   = bbox.GetEdges().ToList();

            //e.Display.DrawBoxCorners(bbox, System.Drawing.Color.Red, 3, 4);


            Rhino.Display.RhinoView     myViewport = Rhino.RhinoDoc.ActiveDoc.Views.ActiveView;
            Rhino.Display.RhinoViewport viewport   = myViewport.ActiveViewport;

            e.Display.EnableDepthWriting(true);
            e.Display.EnableDepthWriting(false);
            switch (foundObject.ObjectType)
            {
            case Rhino.DocObjects.ObjectType.Point:
                e.Display.DrawPoint(((Rhino.Geometry.Point)foundObject.Geometry).Location, PointStyle.X, 2, myCol);
                break;

            case Rhino.DocObjects.ObjectType.Curve:
                e.Display.DrawCurve((Rhino.Geometry.Curve)foundObject.Geometry, myCol, 4);
                break;

            case Rhino.DocObjects.ObjectType.Extrusion:
                DisplayMaterial eMaterial = new DisplayMaterial(myCol, 0.5);
                e.Display.DrawBrepShaded(((Rhino.Geometry.Extrusion)foundObject.Geometry).ToBrep(), eMaterial);
                break;

            case Rhino.DocObjects.ObjectType.Brep:
                DisplayMaterial bMaterial = new DisplayMaterial(myCol, 0.5);
                e.Display.DrawBrepShaded((Brep)foundObject.Geometry, bMaterial);

                Mesh[] meshes     = Rhino.Geometry.Mesh.CreateFromBrep((Brep)foundObject.Geometry);
                Mesh   globalMesh = new Rhino.Geometry.Mesh();
                foreach (Mesh m in meshes)
                {
                    globalMesh.Append(m);
                }
                Polyline[] myPolys2 = globalMesh.GetOutlines(viewport);
                foreach (Polyline poly in myPolys2)
                {
                    e.Display.DrawCurve(poly.ToNurbsCurve(), Color.Black, 6);
                }
                break;

            case Rhino.DocObjects.ObjectType.Mesh:
                var mesh = foundObject.Geometry as Rhino.Geometry.Mesh;
                if (mesh.VertexColors.Count > 0)
                {
                    for (int i = 0; i < mesh.VertexColors.Count; i++)
                    {
                        mesh.VertexColors[i] = Color.FromArgb(100, mesh.VertexColors[i]);
                    }

                    e.Display.DrawMeshFalseColors(mesh);
                }
                else
                {
                    DisplayMaterial mMaterial = new DisplayMaterial(myCol, 0.5);
                    e.Display.DrawMeshShaded(mesh, mMaterial);
                }
                //e.Display.DrawMeshWires((Mesh)obj, Color.DarkGray);
                break;

            case Rhino.DocObjects.ObjectType.TextDot:
                //e.Display.Draw3dText( ((TextDot)obj).Text, Colors[count], new Plane(((TextDot)obj).Point));
                var textDot = (TextDot)foundObject.Geometry;
                e.Display.DrawDot(textDot.Point, textDot.Text, myCol, Color.White);

                break;

            case Rhino.DocObjects.ObjectType.Annotation:

                var textObj = (Rhino.Geometry.TextEntity)foundObject.Geometry;
                e.Display.Draw3dText(textObj.Text, Color.Black, textObj.Plane, textObj.TextHeight, Rhino.RhinoDoc.ActiveDoc.Fonts[textObj.FontIndex].FaceName);
                break;
            }
            e.Display.EnableDepthWriting(true);



            List <Rhino.Geometry.Line> myEdges = new List <Rhino.Geometry.Line>();

            if (Edges.Count > 0)
            {
                System.Drawing.Color colorKid = System.Drawing.Color.LightCoral;
                foreach (List <Guid> li in Edges)
                {
                    RhinoObject foundObject0 = Rhino.RhinoDoc.ActiveDoc.Objects.Find(li[0]);
                    RhinoObject foundObject1 = Rhino.RhinoDoc.ActiveDoc.Objects.Find(li[1]);
                }
            }
            Rhino.RhinoDoc.ActiveDoc.Views.Redraw();
        }