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); }
///<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); } }
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); }
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); }
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); }
///<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; }