internal override IntPtr _InternalGetConstPointer() { if (null != m_shallow_parent) { return(m_shallow_parent.ConstPointer()); } #if RHINO_SDK ObjRef obj_ref = m__parent as ObjRef; if (null != obj_ref) { return(obj_ref.GetGeometryConstPointer(this)); } RhinoObject parent_object = ParentRhinoObject(); if (parent_object == null) { FileIO.File3dmObject fileobject = m__parent as FileIO.File3dmObject; if (null != fileobject) { return(fileobject.GetGeometryConstPointer()); } } uint serial_number = 0; IntPtr ptr_parent_rhinoobject = IntPtr.Zero; if (null != parent_object) { serial_number = parent_object.m_rhinoobject_serial_number; ptr_parent_rhinoobject = parent_object.m_pRhinoObject; if (IntPtr.Zero == ptr_parent_rhinoobject && parent_object.m__parent != null && parent_object.m__parent is ObjRef) { ObjRef objref = parent_object.m__parent as ObjRef; IntPtr constPtrObjRef = objref.ConstPointer(); ptr_parent_rhinoobject = UnsafeNativeMethods.CRhinoObjRef_Object(constPtrObjRef); } } ComponentIndex ci = new ComponentIndex(); // There are a few cases (like in ReplaceObject callback) where the parent // rhino object temporarily holds onto the CRhinoObject* because the object // is not officially in the document yet. if (ptr_parent_rhinoobject != IntPtr.Zero) { return(UnsafeNativeMethods.CRhinoObject_Geometry(ptr_parent_rhinoobject, ci)); } return(UnsafeNativeMethods.CRhinoObject_Geometry2(serial_number, ci)); #else var fileobject = m__parent as Rhino.FileIO.File3dmObject; if (null != fileobject) { return(fileobject.GetGeometryConstPointer()); } return(IntPtr.Zero); #endif }