/// <summary> /// Delegate function used to turn custom grips on /// </summary> public void TurnOnGrips(RhinoObject rhObject) { if (rhObject == null) { return; } var polyline_curve = rhObject.Geometry as PolylineCurve; if (polyline_curve == null) { return; } if (!SampleCsRectangleHelper.IsRectangle(polyline_curve)) { return; } var rectangle_grips = new SampleCsRectangleGrips(); if (!rectangle_grips.CreateGrips(polyline_curve)) { return; } rhObject.EnableCustomGrips(rectangle_grips); }
/// <summary> /// Creates grips /// </summary> public bool CreateGrips(PolylineCurve polylineCurve) { if (!SampleCsRectangleHelper.IsRectangle(polylineCurve)) { return(false); } if (GripCount > 0) { return(false); } Plane plane; if (!polylineCurve.TryGetPlane(out plane)) { return(false); } m_plane = plane; m_active_rectangle = new Point3d[5]; for (var i = 0; i < polylineCurve.PointCount; i++) { m_active_rectangle[i] = polylineCurve.Point(i); } m_original_rectangle = new Point3d[5]; Array.Copy(m_active_rectangle, m_original_rectangle, 5); var line = new Line(); for (var i = 0; i < 4; i++) { var gi = 2 * i; line.From = m_active_rectangle[i]; line.To = m_active_rectangle[i + 1]; m_sample_cs_rectangle_grips[gi].OriginalLocation = line.From; m_sample_cs_rectangle_grips[gi + 1].OriginalLocation = 0.5 * line.From + 0.5 * line.To; m_sample_cs_rectangle_grips[gi].Active = true; m_sample_cs_rectangle_grips[gi + 1].Active = true; } for (var i = 0; i < 8; i++) { AddGrip(m_sample_cs_rectangle_grips[i]); } return(true); }
/// <summary> /// Override to provide fancy object filtering /// </summary> public override bool CustomGeometryFilter(RhinoObject rhObject, GeometryBase geometry, ComponentIndex componentIndex) { return(SampleCsRectangleHelper.IsRectangle(geometry)); }