static void OnDrawRhinoObjectProc(Guid am_id, IntPtr pConstRhinoObject, IntPtr pRhinoDisplayPipeline) { VisualAnalysisMode mode = FindLocal(am_id); if (mode != null) { var rhobj = Rhino.DocObjects.RhinoObject.CreateRhinoObjectHelper(pConstRhinoObject); DisplayPipeline dp = new DisplayPipeline(pRhinoDisplayPipeline); try { Rhino.DocObjects.BrepObject brep = rhobj as Rhino.DocObjects.BrepObject; if (brep != null) { mode.DrawBrepObject(brep, dp); return; } Rhino.DocObjects.CurveObject curve = rhobj as Rhino.DocObjects.CurveObject; if (curve != null) { mode.DrawCurveObject(curve, dp); return; } Rhino.DocObjects.MeshObject mesh = rhobj as Rhino.DocObjects.MeshObject; if (mesh != null) { mode.DrawMeshObject(mesh, dp); return; } Rhino.DocObjects.PointCloudObject pointcloud = rhobj as Rhino.DocObjects.PointCloudObject; if (pointcloud != null) { mode.DrawPointCloudObject(pointcloud, dp); return; } Rhino.DocObjects.PointObject pointobj = rhobj as Rhino.DocObjects.PointObject; if (pointobj != null) { mode.DrawPointObject(pointobj, dp); return; } } catch (Exception) { } } }
/// <summary> /// Draws one brep. Override this method to add your custom behavior. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="brep">A brep object.</param> /// <param name="pipeline">The current display pipeline.</param> protected virtual void DrawBrepObject(Rhino.DocObjects.BrepObject brep, DisplayPipeline pipeline) { }
private bool AddNodePoint(RhinoDoc doc, double offsetVal, double spacingVal) { bool result = false; try { int nodeLayerIndex = doc.Layers.Find("Nodes", true); if (nodeLayerIndex > -1) { Rhino.DocObjects.RhinoObject[] rhobjs = doc.Objects.FindByLayer("A-FLOR"); for (int i = 0; i < rhobjs.Length; i++) { if (rhobjs[i] is Rhino.DocObjects.BrepObject) { Rhino.DocObjects.BrepObject brepObj = rhobjs[i] as Rhino.DocObjects.BrepObject; Brep brep = brepObj.BrepGeometry; foreach (BrepFace face in brep.Faces) { if (face.NormalAt(0, 0).Z == 1) { Surface offsetSurface = face.Offset(offsetVal, doc.ModelAbsoluteTolerance); BoundingBox bb = offsetSurface.GetBoundingBox(true); int colNum = (int)Math.Floor((bb.Max.X - bb.Min.X) / spacingVal); int rowNum = (int)Math.Floor((bb.Max.Y - bb.Min.Y) / spacingVal); double remainderX = ((bb.Max.X - bb.Min.X) - (colNum * spacingVal)) / 2; double remainderY = ((bb.Max.Y - bb.Min.Y) - (rowNum * spacingVal)) / 2; int nodeNum = 0; List <Guid> ids = new List <Guid>(); for (int col = 0; col < colNum; col++) { double xVal = bb.Min.X + remainderX + spacingVal * (col + 0.5); for (int row = 0; row < rowNum; row++) { double yVal = bb.Min.Y + remainderY + spacingVal * (row + 0.5); Point3d point = new Point3d(xVal, yVal, offsetVal); Rhino.DocObjects.ObjectAttributes attributes = new Rhino.DocObjects.ObjectAttributes(); attributes.Name = "Node_" + nodeNum; attributes.LayerIndex = nodeLayerIndex; Guid guid = doc.Objects.AddPoint(point, attributes); ids.Add(guid); nodeNum++; } } int index = doc.Groups.Add(ids); break; } } } } } } catch (Exception ex) { RhinoApp.WriteLine("Cannot add node points. " + ex.Message); } return(result); }