/// <summary>Retrieve the Transform of a Rhino Object relate to a Named Position.</summary> /// <param name="id"> /// The Guid of the Named Position /// </param> /// <param name="objId"> /// The Guid of the Rhino Object from which to retrieve the Transform. /// </param> /// <param name="xform"> /// The Transform to retrieve. /// </param> /// <returns> /// Transform of the RhinoObject related to the Named Position. /// </returns> /// <since>6.0</since> public bool ObjectXform(Guid id, Guid objId, ref Geometry.Transform xform) { var obj = m_doc.Objects.Find(objId); if (obj == null) { return(false); } return(ObjectXform(id, obj, ref xform)); }
private static int SaveObject(int serial, uint doc_serial, uint obj_serial, ref Geometry.Transform transform, IntPtr pArchive) { var client = FromSerialNumber(serial); if (client != null) { RhinoDoc doc = RhinoDoc.FromRuntimeSerialNumber(doc_serial); BinaryArchiveWriter archive = new BinaryArchiveWriter(pArchive); Rhino.DocObjects.RhinoObject obj = new DocObjects.RhinoObject(obj_serial); bool save_doc = client.SaveObject(doc, obj, ref transform, archive); return(save_doc ? 1 : 0); } return(0); }
private static void OnTransformUserData(int serialNumber, ref Geometry.Transform xform) { UserData ud = FromSerialNumber(serialNumber); if (ud != null) { try { ud.OnTransform(xform); } catch (Exception ex) { Runtime.HostUtils.ExceptionReport(ex); } } }
/// <summary> /// Constructs a Rhino_DotNet OnXform from a given RhinoCommon Transform. /// </summary> /// <param name="source">A RhinoCommon source transform.</param> /// <returns> /// Rhino_DotNet object on success. This will be an independent copy. /// </returns> /// <since>5.0</since> public static object ToOnXform(Geometry.Transform source) { object rc = null; Type on_type = GetRhinoDotNetType("RMA.OpenNURBS.OnXform"); if (null != on_type) { var vals = new double[16]; for (int row = 0; row < 4; row++) { for (int column = 0; column < 4; column++) { vals[4 * row + column] = source[row, column]; } } rc = Activator.CreateInstance(on_type, vals); } return(rc); }
internal static void WriteIntoSerializationInfo(IntPtr pRhCmnProfileContext, System.Runtime.Serialization.SerializationInfo info, string prefixStrip) { const int _string = 1; const int _multistring = 2; const int _uuid = 3; const int _color = 4; const int _int = 5; const int _double = 6; const int _rect = 7; const int _point = 8; const int _3dpoint = 9; const int _xform = 10; const int _3dvector = 11; const int _meshparams = 12; const int _buffer = 13; const int _bool = 14; int count = UnsafeNativeMethods.CRhCmnProfileContext_Count(pRhCmnProfileContext); using (StringHolder sectionholder = new StringHolder()) using (StringHolder entryholder = new StringHolder()) { IntPtr pStringSection = sectionholder.NonConstPointer(); IntPtr pStringEntry = entryholder.NonConstPointer(); for (int i = 0; i < count; i++) { int pctype = 0; UnsafeNativeMethods.CRhCmnProfileContext_Item(pRhCmnProfileContext, i, pStringSection, pStringEntry, ref pctype); string section = sectionholder.ToString(); string entry = entryholder.ToString(); if (string.IsNullOrEmpty(entry)) continue; string name = string.IsNullOrEmpty(section) ? entry : section + "\\" + entry; if (name.StartsWith(prefixStrip + "\\")) name = name.Substring(prefixStrip.Length + 1); name = name.Replace("\\", "::"); switch (pctype) { case _string: { UnsafeNativeMethods.CRhinoProfileContext_LoadString(pRhCmnProfileContext, section, entry, pStringEntry); string val = entryholder.ToString(); info.AddValue(name, val); } break; case _multistring: { IntPtr pStrings = UnsafeNativeMethods.ON_StringArray_New(); int array_count = UnsafeNativeMethods.CRhinoProfileContext_LoadStrings(pRhCmnProfileContext, section, entry, pStrings); string[] s = new string[array_count]; for( int j=0; j<array_count; j++ ) { UnsafeNativeMethods.ON_StringArray_Get(pStrings, j, pStringEntry); s[j] = entryholder.ToString(); } info.AddValue(name, s); } break; case _uuid: { Guid id = Guid.Empty; UnsafeNativeMethods.CRhinoProfileContext_LoadGuid(pRhCmnProfileContext, section, entry, ref id); info.AddValue(name, id); } break; case _color: { int abgr = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadColor(pRhCmnProfileContext, section, entry, ref abgr); System.Drawing.Color c = System.Drawing.ColorTranslator.FromWin32(abgr); //string s = System.Drawing.ColorTranslator.ToHtml(c); info.AddValue(name, c); } break; case _int: { int ival = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadInt(pRhCmnProfileContext, section, entry, ref ival); info.AddValue(name, ival); } break; case _double: { double dval = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadDouble(pRhCmnProfileContext, section, entry, ref dval); info.AddValue(name, dval); } break; case _rect: { int left = 0, top = 0, right = 0, bottom = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadRect(pRhCmnProfileContext, section, entry, ref left, ref top, ref right, ref bottom); System.Drawing.Rectangle r = System.Drawing.Rectangle.FromLTRB(left, top, right, bottom); info.AddValue(name, r); } break; case _point: { int x = 0, y = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadPoint(pRhCmnProfileContext, section, entry, ref x, ref y); System.Drawing.Point pt = new System.Drawing.Point(x, y); info.AddValue(name, pt); } break; case _3dpoint: { Rhino.Geometry.Point3d pt = new Geometry.Point3d(); UnsafeNativeMethods.CRhinoProfileContext_LoadPoint3d(pRhCmnProfileContext, section, entry, ref pt); info.AddValue(name, pt); } break; case _xform: { Rhino.Geometry.Transform xf = new Geometry.Transform(); UnsafeNativeMethods.CRhinoProfileContext_LoadXform(pRhCmnProfileContext, section, entry, ref xf); info.AddValue(name, xf); } break; case _3dvector: { Rhino.Geometry.Vector3d vec = new Geometry.Vector3d(); UnsafeNativeMethods.CRhinoProfileContext_LoadVector3d(pRhCmnProfileContext, section, entry, ref vec); info.AddValue(name, vec); } break; case _meshparams: { Rhino.Geometry.MeshingParameters mp = new Geometry.MeshingParameters(); UnsafeNativeMethods.CRhinoProfileContext_LoadMeshParameters(pRhCmnProfileContext, section, entry, mp.NonConstPointer()); info.AddValue(name, mp); mp.Dispose(); } break; case _buffer: { //not supported yet //int buffer_length = UnsafeNativeMethods.CRhinoProfileContext_BufferLength(pRhCmnProfileContext, section, entry); //byte[] buffer = new byte[buffer_length]; //UnsafeNativeMethods.CRhinoProfileContext_LoadBuffer(pRhCmnProfileContext, section, entry, buffer_length, buffer); //info.AddValue(name, buffer); } break; case _bool: { bool b = false; UnsafeNativeMethods.CRhinoProfileContext_LoadBool(pRhCmnProfileContext, section, entry, ref b); info.AddValue(name, b); } break; } } } }
/// <summary> /// Is called when the object associated with this data is transformed. If you override this /// function, make sure to call the base class if you want the stored Transform to be updated. /// </summary> /// <param name="transform">The transform being applied.</param> protected virtual void OnTransform(Geometry.Transform transform) { UnsafeNativeMethods.ON_UserData_OnTransform(m_native_pointer, ref transform); }
/// <summary>Retrieve the Transform of a Rhino Object relate to a Named Position.</summary> /// <param name="id"> /// The Guid of the Named Position /// </param> /// <param name="obj"> /// The Rhino Object from which to retrieve the Transform. /// </param> /// <param name="xform"> /// The Transform to retrieve. /// </param> /// <returns> /// Transform of the RhinoObject related to the Named Position. /// </returns> /// <since>6.0</since> public bool ObjectXform(Guid id, RhinoObject obj, ref Geometry.Transform xform) { var objPtr = Runtime.Interop.RhinoObjectConstPointer(obj); return(UnsafeNativeMethods.RhNamedPosition_ObjectXform(m_doc.RuntimeSerialNumber, id, objPtr, ref xform)); }
internal static void WriteIntoSerializationInfo(IntPtr pRhCmnProfileContext, System.Runtime.Serialization.SerializationInfo info, string prefixStrip) { const int _string = 1; const int _multistring = 2; const int _uuid = 3; const int _color = 4; const int _int = 5; const int _double = 6; const int _rect = 7; const int _point = 8; const int _3dpoint = 9; const int _xform = 10; const int _3dvector = 11; const int _meshparams = 12; const int _buffer = 13; const int _bool = 14; int count = UnsafeNativeMethods.CRhCmnProfileContext_Count(pRhCmnProfileContext); using (StringHolder sectionholder = new StringHolder()) using (StringHolder entryholder = new StringHolder()) { IntPtr pStringSection = sectionholder.NonConstPointer(); IntPtr pStringEntry = entryholder.NonConstPointer(); for (int i = 0; i < count; i++) { int pctype = 0; UnsafeNativeMethods.CRhCmnProfileContext_Item(pRhCmnProfileContext, i, pStringSection, pStringEntry, ref pctype); string section = sectionholder.ToString(); string entry = entryholder.ToString(); if (string.IsNullOrEmpty(entry)) continue; string name = string.IsNullOrEmpty(section) ? entry : section + "\\" + entry; if (name.StartsWith(prefixStrip + "\\")) name = name.Substring(prefixStrip.Length + 1); name = name.Replace("\\", "::"); switch (pctype) { case _string: { UnsafeNativeMethods.CRhinoProfileContext_LoadString(pRhCmnProfileContext, section, entry, pStringEntry); string val = entryholder.ToString(); info.AddValue(name, val); } break; case _multistring: { IntPtr pStrings = UnsafeNativeMethods.ON_StringArray_New(); int array_count = UnsafeNativeMethods.CRhinoProfileContext_LoadStrings(pRhCmnProfileContext, section, entry, pStrings); string[] s = new string[array_count]; for( int j=0; j<array_count; j++ ) { UnsafeNativeMethods.ON_StringArray_Get(pStrings, j, pStringEntry); s[j] = entryholder.ToString(); } info.AddValue(name, s); } break; case _uuid: { Guid id = Guid.Empty; UnsafeNativeMethods.CRhinoProfileContext_LoadGuid(pRhCmnProfileContext, section, entry, ref id); info.AddValue(name, id); } break; case _color: { int abgr = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadColor(pRhCmnProfileContext, section, entry, ref abgr); System.Drawing.Color c = Interop.ColorFromWin32(abgr); //string s = System.Drawing.ColorTranslator.ToHtml(c); info.AddValue(name, c); } break; case _int: { int ival = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadInt(pRhCmnProfileContext, section, entry, ref ival); info.AddValue(name, ival); } break; case _double: { double dval = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadDouble(pRhCmnProfileContext, section, entry, ref dval); info.AddValue(name, dval); } break; case _rect: { int left = 0, top = 0, right = 0, bottom = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadRect(pRhCmnProfileContext, section, entry, ref left, ref top, ref right, ref bottom); System.Drawing.Rectangle r = System.Drawing.Rectangle.FromLTRB(left, top, right, bottom); info.AddValue(name, r); } break; case _point: { int x = 0, y = 0; UnsafeNativeMethods.CRhinoProfileContext_LoadPoint(pRhCmnProfileContext, section, entry, ref x, ref y); System.Drawing.Point pt = new System.Drawing.Point(x, y); info.AddValue(name, pt); } break; case _3dpoint: { Rhino.Geometry.Point3d pt = new Geometry.Point3d(); UnsafeNativeMethods.CRhinoProfileContext_LoadPoint3d(pRhCmnProfileContext, section, entry, ref pt); info.AddValue(name, pt); } break; case _xform: { Rhino.Geometry.Transform xf = new Geometry.Transform(); UnsafeNativeMethods.CRhinoProfileContext_LoadXform(pRhCmnProfileContext, section, entry, ref xf); info.AddValue(name, xf); } break; case _3dvector: { Rhino.Geometry.Vector3d vec = new Geometry.Vector3d(); UnsafeNativeMethods.CRhinoProfileContext_LoadVector3d(pRhCmnProfileContext, section, entry, ref vec); info.AddValue(name, vec); } break; case _meshparams: { Rhino.Geometry.MeshingParameters mp = new Geometry.MeshingParameters(); UnsafeNativeMethods.CRhinoProfileContext_LoadMeshParameters(pRhCmnProfileContext, section, entry, mp.NonConstPointer()); info.AddValue(name, mp); mp.Dispose(); } break; case _buffer: { //not supported yet //int buffer_length = UnsafeNativeMethods.CRhinoProfileContext_BufferLength(pRhCmnProfileContext, section, entry); //byte[] buffer = new byte[buffer_length]; //UnsafeNativeMethods.CRhinoProfileContext_LoadBuffer(pRhCmnProfileContext, section, entry, buffer_length, buffer); //info.AddValue(name, buffer); } break; case _bool: { bool b = false; UnsafeNativeMethods.CRhinoProfileContext_LoadBool(pRhCmnProfileContext, section, entry, ref b); info.AddValue(name, b); } break; } } } }
private static int PrepareForObjectAnimation(int serial, uint pDoc_serial, uint obj_serial, ref Geometry.Transform transform, IntPtr pArchive_start, IntPtr pArchive_stop) { var client = FromSerialNumber(serial); if (client != null) { RhinoDoc doc = RhinoDoc.FromRuntimeSerialNumber(pDoc_serial); Rhino.DocObjects.RhinoObject obj = new DocObjects.RhinoObject(obj_serial); BinaryArchiveReader archive_start = new BinaryArchiveReader(pArchive_start); BinaryArchiveReader archive_stop = new BinaryArchiveReader(pArchive_stop); bool animate_doc = client.PrepareForObjectAnimation(doc, obj, ref transform, archive_start, archive_stop); return(animate_doc ? 1 : 0); } return(0); }
private static void ExtendBoundingBoxForObjectAnimation(int serial, uint pDoc_serial, uint obj_serial, ref Geometry.Transform transform, IntPtr pArchive_start, IntPtr pArchive_stop, ref Geometry.BoundingBox bbox) { var client = FromSerialNumber(serial); if (client != null) { RhinoDoc doc = RhinoDoc.FromRuntimeSerialNumber(pDoc_serial); Rhino.DocObjects.RhinoObject obj = new DocObjects.RhinoObject(obj_serial); BinaryArchiveReader archive_start = new BinaryArchiveReader(pArchive_start); BinaryArchiveReader archive_stop = new BinaryArchiveReader(pArchive_stop); client.ExtendBoundingBoxForObjectAnimation(doc, obj, ref transform, archive_start, archive_stop, ref bbox); } }
/// <since>5.0</since> public void SetPickTransform(Geometry.Transform transform) { IntPtr ptr_this = NonConstPointer(); UnsafeNativeMethods.CRhinoPickContext_SetPickTransform(ptr_this, ref transform); }