예제 #1
0
        public override bool ExecConduit(ref MRhinoDisplayPipeline dp, uint nChannel, ref bool bTerminate)
        {
            if (nChannel == MSupportChannels.SC_DRAWOVERLAY)
            {
                if (null != m_brep)
                {
                    MRhinoViewport vp          = dp.GetRhinoVP();
                    OnColor        saved_color = vp.SetDrawColor(RhUtil.RhinoApp().AppSettings().TrackingColor());
                    for (int i = 0; i < m_points.Count(); i++)
                    {
                        if (i % 100 == 0 && vp.InterruptDrawing())
                        {
                            break;
                        }

                        On3dPoint  pt  = m_points[i];
                        On3dVector dir = new On3dVector(m_normals[i]);
                        if (m_bFlip)
                        {
                            dir.Reverse();
                        }

                        vp.DrawDirectionArrow(pt, dir);
                    }
                    vp.SetDrawColor(saved_color);
                }
            }
            return(true);
        }
예제 #2
0
        ///<summary> This gets called when when the user runs this command.</summary>
        public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
        {
            MRhinoView view = RhUtil.RhinoApp().ActiveView();

            if (null == view)
            {
                return(IRhinoCommand.result.failure);
            }

            MRhinoViewport             vp = view.ActiveViewport();
            MRhinoDisplayPipeline      dp = view.DisplayPipeline();
            MDisplayPipelineAttributes da = view.DisplayAttributes();

            // Prevent capturing of the frame buffer on every update
            MRhinoDisplayPipeline.EnableFrameBufferCapture(false);
            // Prevent the draw list from updating on every frame
            dp.FreezeDrawing(true);

            int    dir         = 0; // 0 = Right, 1 = Left, 2 = Down, and 3 = Up
            int    frame_count = 100;
            double delta_angle = 5.0 * (Math.PI / 180.0);

            for (int i = 0; i < frame_count; i++)
            {
                switch (dir)
                {
                case 0:
                    vp.LeftRightRotate(delta_angle);
                    break;

                case 1:
                    vp.LeftRightRotate(-delta_angle);
                    break;

                case 2:
                    vp.DownUpRotate(delta_angle);
                    break;

                case 3:
                    vp.DownUpRotate(-delta_angle);
                    break;
                }
                //dp.DrawFrameBuffer(da);
                view.Redraw();
                RhUtil.RhinoApp().Wait(0);
            }

            dp.FreezeDrawing(false);
            MRhinoDisplayPipeline.EnableFrameBufferCapture(true);

            view.Redraw();

            return(IRhinoCommand.result.success);
        }
 /////////////////////////////////////////////////////////////////////////
 // Overridden MRhinoGetPoint::DynamicDraw
 public override void DynamicDraw(IntPtr hdc, MRhinoViewport vp, IOn3dPoint pt)
 {
     MRhinoDisplayPipeline dp = vp.DisplayPipeline();
       if (dp != null)
       {
     dp.PushObjectColor(0);
     dp.DrawObjects(m_list.m_objects, m_xform);
     dp.DrawObjects(m_list.m_grip_owners);
     dp.PopObjectColor();
     base.DynamicDraw(hdc, vp, pt);
       }
 }
        /////////////////////////////////////////////////////////////////////////
        // Overridden MRhinoGetPoint::DynamicDraw
        public override void DynamicDraw(IntPtr hdc, MRhinoViewport vp, IOn3dPoint pt)
        {
            MRhinoDisplayPipeline dp = vp.DisplayPipeline();

            if (dp != null)
            {
                dp.PushObjectColor(0);
                dp.DrawObjects(m_list.m_objects, m_xform);
                dp.DrawObjects(m_list.m_grip_owners);
                dp.PopObjectColor();
                base.DynamicDraw(hdc, vp, pt);
            }
        }
        public override bool CalculateTransform(MRhinoViewport vp, IOn3dPoint point, ref OnXform xform)
        {
            bool       bResult = false;
            On3dVector v       = new On3dVector();
            On3dPoint  pt      = new On3dPoint(point);

            v = pt - m_base;
            if (!v.IsZero())
            {
                xform.Translation(v);
                bResult = xform.IsValid();
            }
            return(bResult);
        }
예제 #6
0
 bool CalculateCircle(MRhinoViewport vp, ref OnCircle circle)
 {
     if (null != vp)
     {
         double pixels_per_unit = 1.0;
         if (vp.m_v.m_vp.GetWorldToScreenScale(m_circle.Center(), ref pixels_per_unit))
         {
             double units_per_pixel = 1.0 / pixels_per_unit;
             circle.Create(m_circle.plane, m_circle.radius / pixels_per_unit);
             return(circle.IsValid());
         }
     }
     return(false);
 }
        /////////////////////////////////////////////////////////////////////////
        // Overridden MRhinoGetPoint::OnMouseMove
        public override void OnMouseMove(MRhinoViewport vp, uint flags, IOn3dPoint pt, System.Drawing.Point view_wnd_point)
        {
            m_bHaveXform = CalculateTransform(vp, pt, ref m_xform);
            if (!m_bHaveXform)
            {
                m_xform.Identity();
            }

            for (int i = 0; i < m_list.m_grips.Length; i++)
            {
                m_list.m_grips[i].MoveGrip(m_xform);
            }

            base.OnMouseMove(vp, flags, pt, view_wnd_point);
        }
예제 #8
0
 public override bool ExecConduit(ref MRhinoDisplayPipeline dp, uint nChannel, ref bool bTerminate)
 {
     if (nChannel == MSupportChannels.SC_CALCBOUNDINGBOX)
     {
         MRhinoViewport vp     = dp.GetRhinoVP();
         OnCircle       circle = new OnCircle();
         if (CalculateCircle(vp, ref circle))
         {
             m_pChannelAttrs.m_BoundingBox.Union(circle.BoundingBox());
         }
     }
     else if (nChannel == MSupportChannels.SC_DRAWOVERLAY)
     {
         MRhinoViewport vp     = dp.GetRhinoVP();
         OnCircle       circle = new OnCircle();
         if (CalculateCircle(vp, ref circle))
         {
             vp.DrawCircle(circle);
         }
     }
     return(true);
 }
 /////////////////////////////////////////////////////////////////////////
 // STEP 4: Override this abstract function to provide your own custom
 //         transformation method. Call this function to retrieve
 //         the final transformation.
 public abstract bool CalculateTransform(MRhinoViewport vp, IOn3dPoint point, ref OnXform xform);
 public override bool CalculateTransform(MRhinoViewport vp, IOn3dPoint point, ref OnXform xform)
 {
     bool bResult = false;
       On3dVector v = new On3dVector();
       On3dPoint pt = new On3dPoint(point);
       v = pt - m_base;
       if (!v.IsZero())
       {
     xform.Translation(v);
     bResult = xform.IsValid();
       }
       return bResult;
 }
        /////////////////////////////////////////////////////////////////////////
        // Overridden MRhinoGetPoint::OnMouseMove
        public override void OnMouseMove(MRhinoViewport vp, uint flags, IOn3dPoint pt, System.Drawing.Point view_wnd_point)
        {
            m_bHaveXform = CalculateTransform(vp, pt, ref m_xform);
              if (!m_bHaveXform)
            m_xform.Identity();

              for (int i = 0; i < m_list.m_grips.Length; i++)
            m_list.m_grips[i].MoveGrip(m_xform);

              base.OnMouseMove(vp, flags, pt, view_wnd_point);
        }
 /////////////////////////////////////////////////////////////////////////
 // STEP 4: Override this abstract function to provide your own custom
 //         transformation method. Call this function to retrieve
 //         the final transformation.
 public abstract bool CalculateTransform(MRhinoViewport vp, IOn3dPoint point, ref OnXform xform);
예제 #13
0
        ///<summary> This gets called when when the user runs this command.</summary>
        public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
        {
            MRhinoView rhino_view = RhUtil.RhinoApp().ActiveView();

            if (null == rhino_view)
            {
                return(IRhinoCommand.result.failure);
            }

            On3dmView saved_view = SampleCsSaveView.Instance.PopView();

            if (null == saved_view)
            {
                RhUtil.RhinoApp().Print("No saved views to restore.\n");
                return(IRhinoCommand.result.nothing);
            }

            MRhinoViewport viewport = rhino_view.ActiveViewport();

            int scr_left = 0, scr_right = 0, scr_bottom = 0, scr_top = 0;

            viewport.VP().GetScreenPort(ref scr_left, ref scr_right, ref scr_bottom, ref scr_top);

            On3dmView new_view = new On3dmView(saved_view);

            new_view.m_vp.SetScreenPort(scr_left, scr_right, scr_bottom, scr_top);

            double aspect = 0.0;

            if (new_view.m_vp.GetScreenPortAspect(ref aspect))
            {
                new_view.m_vp.SetFrustumAspect(aspect);
            }

            // Some optional parameters that you might want to control
            // when restoring a saved view
            bool bSavedViewSetsConstructionPlane = true;
            bool bSavedViewSetsProjection        = true;
            bool bSavedViewSetsTraceImage        = true;

            // Keep existing construction plane?
            if (!bSavedViewSetsConstructionPlane)
            {
                new_view.m_cplane = new On3dmConstructionPlane(viewport.ConstructionPlane());
            }

            // Keep existing projection?
            if (!bSavedViewSetsProjection)
            {
                new_view.m_vp.SetProjection(viewport.VP().Projection());
            }

            // Copy parameters from existing view that you might want to keep
            // from current view
            new_view.m_position        = new On3dmViewPosition(viewport.View().m_position);
            new_view.m_trace_image     = new On3dmViewTraceImage(viewport.View().m_trace_image);
            new_view.m_wallpaper_image = new On3dmWallpaperImage(viewport.View().m_wallpaper_image);
            new_view.m_clipping_planes = new ArrayOnClippingPlaneInfo(viewport.View().m_clipping_planes);
            new_view.m_display_mode    = viewport.DisplayMode();
            new_view.m_display_mode_id = viewport.View().m_display_mode_id;

            // Do the view restoration
            viewport.SetView(new_view);

            // Keep existing trace image?
            if (!bSavedViewSetsTraceImage)
            {
                viewport.SetTraceImage(saved_view.m_trace_image);
            }

            // Append the current view onto Rhino's view stack
            viewport.PushViewProjection();

            // Redraw
            rhino_view.Redraw();

            return(IRhinoCommand.result.success);
        }
 bool CalculateCircle(MRhinoViewport vp, ref OnCircle circle)
 {
     if (null != vp)
       {
     double pixels_per_unit = 1.0;
     if (vp.m_v.m_vp.GetWorldToScreenScale(m_circle.Center(), ref pixels_per_unit))
     {
       double units_per_pixel = 1.0 / pixels_per_unit;
       circle.Create(m_circle.plane, m_circle.radius / pixels_per_unit);
       return circle.IsValid();
     }
       }
       return false;
 }