Exemple #1
0
        public ClipGumballBoxGetPoint(ClipGumballBox Box, RhinoDoc doc, DrawClippingPlanesConduit m_draw_clipping_plane,
                                      GumballDisplayConduit X_plus, GumballDisplayConduit X_minus,
                                      GumballDisplayConduit Y_plus, GumballDisplayConduit Y_minus,
                                      GumballDisplayConduit Z_plus, GumballDisplayConduit Z_minus)
        {
            m_Box             = Box;
            x_height_plus_dc  = X_plus;
            x_height_minus_dc = X_minus;
            y_height_plus_dc  = Y_plus;
            y_height_minus_dc = Y_minus;
            z_height_plus_dc  = Z_plus;
            z_height_minus_dc = Z_minus;


            m_clipping_plane = m_draw_clipping_plane;

            m_base_origin = Point3d.Unset;
            m_base_point  = Point3d.Unset;

            m_doc = doc;
        }
Exemple #2
0
        protected override void OnMouseMove(GetPointMouseEventArgs e)
        {
            if (m_base_origin.IsValid && m_base_point.IsValid)
            {
                Line world_line;
                if (e.Viewport.GetFrustumLine(e.WindowPoint.X, e.WindowPoint.Y, out world_line))
                {
                    var dir = e.Point - m_base_point;

                    var len = dir.Length;
                    if (m_base_origin.DistanceTo(e.Point) < m_base_origin.DistanceTo(m_base_point))
                    {
                        len = -len;
                    }

                    if (x_height_plus_dc.PickResult.Mode != GumballMode.None)
                    {
                        // update height_plus gumball
                        x_height_plus_dc.UpdateGumball(e.Point, world_line);

                        // update Box
                        Point3d[] NewCornerPoints = new Point3d[8];

                        var xvec = m_Box.Xvector;
                        xvec.Unitize();
                        xvec *= len;

                        NewCornerPoints[0] = m_Box.BaseCornerPoints[0];
                        NewCornerPoints[1] = m_Box.BaseCornerPoints[1] + xvec;
                        NewCornerPoints[2] = m_Box.BaseCornerPoints[2] + xvec;
                        NewCornerPoints[3] = m_Box.BaseCornerPoints[3];
                        NewCornerPoints[4] = m_Box.BaseCornerPoints[4];
                        NewCornerPoints[5] = m_Box.BaseCornerPoints[5] + xvec;
                        NewCornerPoints[6] = m_Box.BaseCornerPoints[6] + xvec;
                        NewCornerPoints[7] = m_Box.BaseCornerPoints[7];

                        m_Box.CornerPoints = NewCornerPoints;

                        m_clipping_plane.Enabled = false;
                        m_clipping_plane         = new DrawClippingPlanesConduit(m_Box);
                        m_clipping_plane.Enabled = true;
                        m_doc.Views.Redraw();
                    }

                    else if (x_height_minus_dc.PickResult.Mode != GumballMode.None)
                    {
                        // update height_plus gumball
                        x_height_minus_dc.UpdateGumball(e.Point, world_line);

                        // update Box
                        Point3d[] NewCornerPoints = new Point3d[8];

                        var reverseXvec = m_Box.Xvector * (-1);
                        reverseXvec.Unitize();
                        reverseXvec *= len;

                        NewCornerPoints[0] = m_Box.BaseCornerPoints[0] + reverseXvec;
                        NewCornerPoints[1] = m_Box.BaseCornerPoints[1];
                        NewCornerPoints[2] = m_Box.BaseCornerPoints[2];
                        NewCornerPoints[3] = m_Box.BaseCornerPoints[3] + reverseXvec;
                        NewCornerPoints[4] = m_Box.BaseCornerPoints[4] + reverseXvec;
                        NewCornerPoints[5] = m_Box.BaseCornerPoints[5];
                        NewCornerPoints[6] = m_Box.BaseCornerPoints[6];
                        NewCornerPoints[7] = m_Box.BaseCornerPoints[7] + reverseXvec;

                        m_Box.CornerPoints = NewCornerPoints;

                        m_clipping_plane.Enabled = false;
                        m_clipping_plane         = new DrawClippingPlanesConduit(m_Box);
                        m_clipping_plane.Enabled = true;
                        m_doc.Views.Redraw();
                    }

                    else if (y_height_plus_dc.PickResult.Mode != GumballMode.None)
                    {
                        // update height_plus gumball
                        y_height_plus_dc.UpdateGumball(e.Point, world_line);

                        // update Box
                        Point3d[] NewCornerPoints = new Point3d[8];

                        var yvec = m_Box.Yvector;
                        yvec.Unitize();
                        yvec *= len;

                        NewCornerPoints[0] = m_Box.BaseCornerPoints[0];
                        NewCornerPoints[1] = m_Box.BaseCornerPoints[1];
                        NewCornerPoints[2] = m_Box.BaseCornerPoints[2] + yvec;
                        NewCornerPoints[3] = m_Box.BaseCornerPoints[3] + yvec;
                        NewCornerPoints[4] = m_Box.BaseCornerPoints[4];
                        NewCornerPoints[5] = m_Box.BaseCornerPoints[5];
                        NewCornerPoints[6] = m_Box.BaseCornerPoints[6] + yvec;
                        NewCornerPoints[7] = m_Box.BaseCornerPoints[7] + yvec;

                        m_Box.CornerPoints = NewCornerPoints;

                        m_clipping_plane.Enabled = false;
                        m_clipping_plane         = new DrawClippingPlanesConduit(m_Box);
                        m_clipping_plane.Enabled = true;
                        m_doc.Views.Redraw();
                    }

                    else if (y_height_minus_dc.PickResult.Mode != GumballMode.None)
                    {
                        // update height_plus gumball
                        y_height_minus_dc.UpdateGumball(e.Point, world_line);

                        // update Box
                        Point3d[] NewCornerPoints = new Point3d[8];

                        var reverseYvec = m_Box.Yvector * (-1);
                        reverseYvec.Unitize();
                        reverseYvec *= len;

                        NewCornerPoints[0] = m_Box.BaseCornerPoints[0] + reverseYvec;
                        NewCornerPoints[1] = m_Box.BaseCornerPoints[1] + reverseYvec;
                        NewCornerPoints[2] = m_Box.BaseCornerPoints[2];
                        NewCornerPoints[3] = m_Box.BaseCornerPoints[3];
                        NewCornerPoints[4] = m_Box.BaseCornerPoints[4] + reverseYvec;
                        NewCornerPoints[5] = m_Box.BaseCornerPoints[5] + reverseYvec;
                        NewCornerPoints[6] = m_Box.BaseCornerPoints[6];
                        NewCornerPoints[7] = m_Box.BaseCornerPoints[7];

                        m_Box.CornerPoints = NewCornerPoints;

                        m_clipping_plane.Enabled = false;
                        m_clipping_plane         = new DrawClippingPlanesConduit(m_Box);
                        m_clipping_plane.Enabled = true;
                        m_doc.Views.Redraw();
                    }

                    else if (z_height_plus_dc.PickResult.Mode != GumballMode.None)
                    {
                        // update height_plus gumball
                        z_height_plus_dc.UpdateGumball(e.Point, world_line);

                        // update Box
                        Point3d[] NewCornerPoints = new Point3d[8];

                        var zvec = m_Box.Zvector;
                        zvec.Unitize();
                        zvec *= len;

                        NewCornerPoints[0] = m_Box.BaseCornerPoints[0];
                        NewCornerPoints[1] = m_Box.BaseCornerPoints[1];
                        NewCornerPoints[2] = m_Box.BaseCornerPoints[2];
                        NewCornerPoints[3] = m_Box.BaseCornerPoints[3];
                        NewCornerPoints[4] = m_Box.BaseCornerPoints[4] + zvec;
                        NewCornerPoints[5] = m_Box.BaseCornerPoints[5] + zvec;
                        NewCornerPoints[6] = m_Box.BaseCornerPoints[6] + zvec;
                        NewCornerPoints[7] = m_Box.BaseCornerPoints[7] + zvec;

                        m_Box.CornerPoints = NewCornerPoints;

                        m_clipping_plane.Enabled = false;
                        m_clipping_plane         = new DrawClippingPlanesConduit(m_Box);
                        m_clipping_plane.Enabled = true;
                        m_doc.Views.Redraw();
                    }

                    else if (z_height_minus_dc.PickResult.Mode != GumballMode.None)
                    {
                        // update height_plus gumball
                        z_height_minus_dc.UpdateGumball(e.Point, world_line);

                        // update Box
                        Point3d[] NewCornerPoints = new Point3d[8];

                        var reverseZvec = m_Box.Zvector * (-1);
                        reverseZvec.Unitize();
                        reverseZvec *= len;

                        NewCornerPoints[0] = m_Box.BaseCornerPoints[0] + reverseZvec;
                        NewCornerPoints[1] = m_Box.BaseCornerPoints[1] + reverseZvec;
                        NewCornerPoints[2] = m_Box.BaseCornerPoints[2] + reverseZvec;
                        NewCornerPoints[3] = m_Box.BaseCornerPoints[3] + reverseZvec;
                        NewCornerPoints[4] = m_Box.BaseCornerPoints[4];
                        NewCornerPoints[5] = m_Box.BaseCornerPoints[5];
                        NewCornerPoints[6] = m_Box.BaseCornerPoints[6];
                        NewCornerPoints[7] = m_Box.BaseCornerPoints[7];

                        m_Box.CornerPoints = NewCornerPoints;

                        m_clipping_plane.Enabled = false;
                        m_clipping_plane         = new DrawClippingPlanesConduit(m_Box);
                        m_clipping_plane.Enabled = true;
                        m_doc.Views.Redraw();
                    }
                }
            }

            base.OnMouseMove(e);
        }