protected override void OnDuplicate(Rhino.DocObjects.Custom.UserData source) { var src = source as SampleCsCustomUserData; if (null != src) { Data.Create(src.Data); } }
/// <summary> /// Clones the user data. /// </summary> /// <param name="source">The source data.</param> protected override void OnDuplicate(UserData source) { UserDictionary dict = source as UserDictionary; if (dict != null) { m_dictionary = dict.m_dictionary.Clone(); m_dictionary.SetParentUserData(this); } }
/// <summary> /// Remove the userdata from this list /// </summary> /// <param name="userdata"></param> /// <returns>true if the user data was successfully removed</returns> public bool Remove(UserData userdata) { IntPtr const_ptr_onobject = m_parent.ConstPointer(); IntPtr ptr_userdata = userdata.NonConstPointer(false); bool rc = UnsafeNativeMethods.ON_Object_DetachUserData(const_ptr_onobject, ptr_userdata); if( rc ) UserData.RemoveFromRuntimeList(userdata); return rc; }
/// <summary> /// If the userdata is already in a different UserDataList, it /// will be removed from that list and added to this list. /// </summary> /// <param name="userdata">Data element.</param> /// <returns>Whether this operation succeeded.</returns> public bool Add(UserData userdata) { if (!(userdata is SharedUserDictionary)) { Type t = userdata.GetType(); System.Reflection.ConstructorInfo constructor = t.GetConstructor(Type.EmptyTypes); if (!t.IsPublic || constructor == null) throw new ArgumentException("userdata must be a public class and have a parameterless constructor"); } IntPtr const_ptr_onobject = m_parent.ConstPointer(); IntPtr ptr_userdata = userdata.NonConstPointer(true); const bool detach_if_needed = true; bool rc = UnsafeNativeMethods.ON_Object_AttachUserData(const_ptr_onobject, ptr_userdata, detach_if_needed); if (rc) UserData.StoreInRuntimeList(userdata); return rc; }
internal static void RemoveFromRuntimeList(UserData ud) { g_attached_custom_user_datas.Remove(ud.m_serial_number); }
internal static void StoreInRuntimeList(UserData ud) { g_attached_custom_user_datas[ud.m_serial_number] = ud; }
/// <summary> /// Is called when the object is being duplicated. /// </summary> /// <param name="source">The source data.</param> protected virtual void OnDuplicate(UserData source) { }
internal static void RemoveFromRuntimeList(UserData ud) { g_attached_custom_user_datas.TryRemove(ud.m_serial_number, out ud); }
internal static void StoreInRuntimeList(UserData ud) { g_attached_custom_user_datas[ud.m_serial_number] = ud; }
/// <summary> /// Is called when the object is being duplicated. /// </summary> /// <param name="source">The source data.</param> protected virtual void OnDuplicate(UserData source) { }
/// <summary> /// Clones the user data. /// </summary> /// <param name="source">The source data.</param> protected override void OnDuplicate(UserData source) { UserDictionary dict = source as UserDictionary; if (dict != null) m_dictionary = dict.m_dictionary.Clone(); }