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) { MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select object to move"); go.EnableSubObjectSelect(false); go.GetObjects(1, 1); if (go.CommandResult() != IRhinoCommand.result.success) { return(go.CommandResult()); } MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Point to move from"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) { return(gp.CommandResult()); } On3dPoint pointFrom = gp.Point(); gp.SetCommandPrompt("Point to move to"); gp.SetBasePoint(pointFrom); gp.DrawLineFromPoint(pointFrom, true); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) { return(gp.CommandResult()); } On3dPoint pointTo = gp.Point(); On3dVector dir = new On3dVector(pointTo - pointFrom); if (dir.IsTiny()) { return(IRhinoCommand.result.nothing); } OnXform xform = new OnXform(); xform.Translation(dir); MRhinoObjRef objectRef = go.Object(0); context.m_doc.TransformObject(ref objectRef, xform); context.m_doc.Redraw(); return(IRhinoCommand.result.success); }
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); }
///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select rectangular light"); go.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.light_object); go.GetObjects(1, 1); if (go.CommandResult() != IRhinoCommand.result.success) { return(go.CommandResult()); } IOnLight light = go.Object(0).Light(); if (null == light) { return(IRhinoCommand.result.failure); } if (!light.IsRectangularLight()) { RhUtil.RhinoApp().Print("Not a rectangular light.\n"); return(IRhinoCommand.result.nothing); } On3dPoint origin = light.Location(); On3dVector xaxis = light.Length(); On3dVector yaxis = light.Width(); OnPlane plane = new OnPlane(origin, xaxis, yaxis); OnInterval x_interval = new OnInterval(0.0, xaxis.Length()); OnInterval y_interval = new OnInterval(0.0, yaxis.Length()); OnMesh mesh = RhUtil.RhinoMeshPlane(plane, x_interval, y_interval, 2, 2); if (null != mesh) { mesh.ConvertQuadsToTriangles(); context.m_doc.AddMeshObject(mesh); context.m_doc.Redraw(); } return(IRhinoCommand.result.cancel); }
///<summary> This gets called when when the user runs this command.</summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select object to move"); go.EnableSubObjectSelect(false); go.GetObjects(1, 1); if (go.CommandResult() != IRhinoCommand.result.success) return go.CommandResult(); MRhinoGetPoint gp = new MRhinoGetPoint(); gp.SetCommandPrompt("Point to move from"); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) return gp.CommandResult(); On3dPoint pointFrom = gp.Point(); gp.SetCommandPrompt("Point to move to"); gp.SetBasePoint(pointFrom); gp.DrawLineFromPoint(pointFrom, true); gp.GetPoint(); if (gp.CommandResult() != IRhinoCommand.result.success) return gp.CommandResult(); On3dPoint pointTo = gp.Point(); On3dVector dir = new On3dVector(pointTo - pointFrom); if (dir.IsTiny()) return IRhinoCommand.result.nothing; OnXform xform = new OnXform(); xform.Translation(dir); MRhinoObjRef objectRef = go.Object(0); context.m_doc.TransformObject(ref objectRef, xform); context.m_doc.Redraw(); return IRhinoCommand.result.success; }
/// <summary> /// This gets called when when the user runs this command. /// </summary> public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { // Select objects to animate MRhinoGetObject go = new MRhinoGetObject(); go.SetCommandPrompt("Select objects to animate"); go.GetObjects(1, 0); if (go.CommandResult() != IRhinoCommand.result.success) { return(go.CommandResult()); } // Select path curve MRhinoGetObject gc = new MRhinoGetObject(); gc.SetCommandPrompt("Select path curve"); gc.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.curve_object); gc.SetGeometryAttributeFilter(IRhinoGetObject.GEOMETRY_ATTRIBUTE_FILTER.open_curve); gc.EnableDeselectAllBeforePostSelect(false); gc.GetObjects(1, 1); if (gc.CommandResult() != IRhinoCommand.result.success) { return(gc.CommandResult()); } // Get the curve IOnCurve crv = gc.Object(0).Curve(); if (null == crv) { return(IRhinoCommand.result.failure); } // Create an array of normalized curve parameters List <double> slist = new List <double>(m_max_steps); for (int i = 0; i < m_max_steps; i++) { double s = (double)i / ((double)m_max_steps - 1); slist.Add(s); } // Get the real parameters along the curve double[] tlist = new double[m_max_steps]; if (!crv.GetNormalizedArcLengthPoints(slist.ToArray(), ref tlist)) { return(IRhinoCommand.result.failure); } // Create the display conduit SampleCsAnimatorConduit conduit = new SampleCsAnimatorConduit(); // Get points along curve On3dPoint start = new On3dPoint(crv.PointAtStart()); List <On3dPoint> plist = new List <On3dPoint>(tlist.Length); for (int i = 0; i < m_max_steps; i++) { On3dPoint pt = new On3dPoint(crv.PointAt(tlist[i])); plist.Add(pt); } // Hide objects and add them to conduit's object array for (int i = 0; i < go.ObjectCount(); i++) { MRhinoObjRef objref = go.Object(i); context.m_doc.HideObject(objref); conduit.m_objects.Add(objref.Object()); } // Do animation... conduit.Enable(); for (int i = 0; i < m_max_steps; i++) { On3dVector v = plist[i] - start; conduit.m_xform.Translation(v); context.m_doc.Redraw(); Thread.Sleep(100); } for (int i = m_max_steps - 1; i >= 0; i--) { On3dVector v = plist[i] - start; conduit.m_xform.Translation(v); if (0 != i) { context.m_doc.Redraw(); Thread.Sleep(100); } } conduit.Disable(); // Show hidden objects for (int i = 0; i < go.ObjectCount(); i++) { MRhinoObjRef objref = go.Object(i); context.m_doc.ShowObject(objref); } context.m_doc.Redraw(); return(IRhinoCommand.result.success); }
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; }
public void SetBrep(IOnBrep brep) { if (null == brep || !brep.IsValid()) { return; } m_brep = brep; int face_count = m_brep.m_F.Count(); m_points.Reserve(face_count * SURFACE_ARROW_COUNT * SURFACE_ARROW_COUNT); m_normals.Reserve(face_count * SURFACE_ARROW_COUNT * SURFACE_ARROW_COUNT); m_points.SetCount(0); m_normals.SetCount(0); for (int i = 0; i < face_count; i++) { IOnBrepFace face = m_brep.m_F[i]; IOnBrepLoop loop = face.OuterLoop(); if (null == loop) { continue; } OnInterval udomain = face.Domain(0); OnInterval vdomain = face.Domain(1); if (loop.m_pbox.IsValid()) { OnInterval domain = new OnInterval(); domain.Set(loop.m_pbox.m_min.x, loop.m_pbox.m_max.x); domain.Intersection(udomain); if (domain.IsIncreasing()) { udomain.Set(domain.Min(), domain.Max()); } domain.Set(loop.m_pbox.m_min.y, loop.m_pbox.m_max.y); domain.Intersection(vdomain); if (domain.IsIncreasing()) { vdomain.Set(domain.Min(), domain.Max()); } } bool bUntrimmed = m_brep.FaceIsSurface(i); ArrayOnInterval intervals = new ArrayOnInterval(); bool bRev = face.m_bRev; for (double u = 0.0; u < SURFACE_ARROW_COUNT; u += 1.0) { double d = u / (SURFACE_ARROW_COUNT - 1.0); double s = udomain.ParameterAt(d); intervals.SetCount(0); if (bUntrimmed || RhUtil.RhinoGetIsoIntervals(face, 1, s, intervals) > 0) { for (double v = 0.0; v < SURFACE_ARROW_COUNT; v += 1.0) { d = v / (SURFACE_ARROW_COUNT - 1.0); double t = vdomain.ParameterAt(d); bool bAdd = bUntrimmed; for (int k = 0; !bAdd && k < intervals.Count(); k++) { if (intervals[k].Includes(t)) { bAdd = true; } } if (bAdd) { On3dPoint pt = new On3dPoint(); On3dVector du = new On3dVector(); On3dVector dv = new On3dVector(); On3dVector dir = new On3dVector(); if (face.EvNormal(s, t, ref pt, ref du, ref dv, ref dir)) { m_points.Append(pt); if (bRev) { dir.Reverse(); } m_normals.Append(dir); } } } } } } }
public void SetBrep(IOnBrep brep) { if (null == brep || !brep.IsValid()) return; m_brep = brep; int face_count = m_brep.m_F.Count(); m_points.Reserve(face_count * SURFACE_ARROW_COUNT * SURFACE_ARROW_COUNT); m_normals.Reserve(face_count * SURFACE_ARROW_COUNT * SURFACE_ARROW_COUNT); m_points.SetCount(0); m_normals.SetCount(0); for (int i = 0; i < face_count; i++) { IOnBrepFace face = m_brep.m_F[i]; IOnBrepLoop loop = face.OuterLoop(); if (null == loop) continue; OnInterval udomain = face.Domain(0); OnInterval vdomain = face.Domain(1); if (loop.m_pbox.IsValid()) { OnInterval domain = new OnInterval(); domain.Set(loop.m_pbox.m_min.x, loop.m_pbox.m_max.x); domain.Intersection(udomain); if (domain.IsIncreasing()) udomain.Set(domain.Min(), domain.Max()); domain.Set(loop.m_pbox.m_min.y, loop.m_pbox.m_max.y); domain.Intersection(vdomain); if (domain.IsIncreasing()) vdomain.Set(domain.Min(), domain.Max()); } bool bUntrimmed = m_brep.FaceIsSurface(i); ArrayOnInterval intervals = new ArrayOnInterval(); bool bRev = face.m_bRev; for (double u = 0.0; u < SURFACE_ARROW_COUNT; u += 1.0) { double d = u / (SURFACE_ARROW_COUNT - 1.0); double s = udomain.ParameterAt(d); intervals.SetCount(0); if (bUntrimmed || RhUtil.RhinoGetIsoIntervals(face, 1, s, intervals) > 0) { for (double v = 0.0; v < SURFACE_ARROW_COUNT; v += 1.0) { d = v / (SURFACE_ARROW_COUNT - 1.0); double t = vdomain.ParameterAt(d); bool bAdd = bUntrimmed; for (int k = 0; !bAdd && k < intervals.Count(); k++) { if (intervals[k].Includes(t)) bAdd = true; } if (bAdd) { On3dPoint pt = new On3dPoint(); On3dVector du = new On3dVector(); On3dVector dv = new On3dVector(); On3dVector dir = new On3dVector(); if (face.EvNormal(s, t, ref pt, ref du, ref dv, ref dir)) { m_points.Append(pt); if (bRev) dir.Reverse(); m_normals.Append(dir); } } } } } } }
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; }