private static void SetValues(ModelItem m, string CategoryName, string PropertyName, string value) { state = ComApiBridge.State; InwOaPath oPath = ComApiBridge.ToInwOaPath(m); // get properties collection of the path InwGUIPropertyNode2 propertyNode = state.GetGUIPropertyNode(oPath, true) as InwGUIPropertyNode2; // creating tab (Category), property null variables as placeholders InwGUIAttribute2 existingCategory = null; //Index of userDefined Tab int index = 1; //Case 1: Look for an existing category with the same CategoryName foreach (Autodesk.Navisworks.Api.Interop.ComApi.InwGUIAttribute2 attribute in propertyNode.GUIAttributes()) { if (attribute.UserDefined) { if (attribute.ClassUserName == CategoryName) { existingCategory = attribute; NavisProperties properties = new NavisProperties(PropertyName, value, existingCategory); setProperty(properties, index, propertyNode); return; } index++; } } //Case 2: Category doesn´t exist, create category and property if (existingCategory == null) { NavisProperties properties = new NavisProperties(PropertyName, value, CategoryName); setCategoryAndProperty(properties, propertyNode); return; } }
private static void setProperty(NavisProperties properties, int index, InwGUIPropertyNode2 propertyNode) { propertyNode.SetUserDefined(index, properties.CategoryName, properties.CategoryName, properties.PropertyVec); }
private static void setCategoryAndProperty(NavisProperties properties, InwGUIPropertyNode2 propertyNode) { try { propertyNode.SetUserDefined(0, properties.CategoryName, properties.CategoryName, properties.PropertyVec); } catch (Exception exception) { MessageBox.Show(exception.Message); } }