// add new property to existing category
        public InwOaPropertyVec AddNewPropertyToExtgCategory(InwGUIAttribute2 propertyCategory)
        {
            // COM state (document)
            InwOpState10 cdoc = ComApiBridge.State;
            // a new propertycategory object
            InwOaPropertyVec category = (InwOaPropertyVec)cdoc.ObjectFactory(
                nwEObjectType.eObjectType_nwOaPropertyVec, null, null);

            // retrieve existing propertydata (name & value) and add to category
            foreach (InwOaProperty property in propertyCategory.Properties())
            {
                // create a new Property (PropertyData)
                InwOaProperty extgProp = (InwOaProperty)cdoc.ObjectFactory(nwEObjectType.eObjectType_nwOaProperty,
                                                                           null, null);
                // set PropertyName
                extgProp.name = property.name;
                // set PropertyDisplayName
                extgProp.UserName = property.UserName;
                // set PropertyValue
                extgProp.value = property.value;
                // add to category
                category.Properties().Add(extgProp);
            }

            // create a new PropertyData and add to category
            InwOaProperty newProp = (InwOaProperty)cdoc.ObjectFactory(nwEObjectType.eObjectType_nwOaProperty,
                                                                      null, null);

            newProp.name     = "2021Champions_Internal";
            newProp.UserName = "******";
            newProp.value    = "Who Knows!!";
            category.Properties().Add(newProp);
            return(category);
        }
        public void HomeViewpoint_Set(out InwOpView oSV)
        //Get home viewpoint, reset appearences and set as current viewpoint
        {
            Document oDoc = Autodesk.Navisworks.Api.Application.ActiveDocument;

            //Reset appearences
            oDoc.Models.ResetAllPermanentMaterials();
            oDoc.Models.ResetAllHiddenToModelState();
            oDoc.SetGraduatedBackground(Autodesk.Navisworks.Api.Color.FromByteRGB(105, 140, 230),
                                        Autodesk.Navisworks.Api.Color.FromByteRGB(210, 240, 255));

            //Set properties for home view
            Viewpoint oVP = new Viewpoint
            {
                //Set quaternion for home view
                Rotation    = new Rotation3D(0.425, 0.176, 0.340, 0.821),
                Projection  = ViewpointProjection.Perspective,
                RenderStyle = ViewpointRenderStyle.Shaded
            };

            Autodesk.Navisworks.Api.Application.ActiveDocument.CurrentViewpoint.CopyFrom(oVP);


            // Get a hold of the state object (it is a singleton)
            InwOpState10 myState = ComApiBridge.State;

            //Set viewpoint to all model
            myState.ViewAll();

            // create a temporary saved viewpoint
            oSV = myState.ObjectFactory(nwEObjectType.eObjectType_nwOpView);

            //Set viewpoint
            oSV.anonview.ViewPoint = myState.CurrentView.ViewPoint.Copy();
        }
        public override int Execute(params string[] parameters)
        {
            // current document (.NET)
            Document doc = Application.ActiveDocument;
            // current document (COM)
            InwOpState10 cdoc = ComApiBridge.State;
            // current selected items
            ModelItemCollection items = doc.CurrentSelection.SelectedItems;

            if (items.Count > 0)
            {
                // input dialog
                InputDialog dialog = new InputDialog();
                dialog.ShowDialog();
                foreach (ModelItem item in items)
                {
                    // convert ModelItem to COM Path
                    InwOaPath citem = (InwOaPath)ComApiBridge.ToInwOaPath(item);
                    // Get item's PropertyCategoryCollection
                    InwGUIPropertyNode2 cpropcates = (InwGUIPropertyNode2)cdoc.GetGUIPropertyNode(citem, true);
                    // create a new Category (PropertyDataCollection)
                    InwOaPropertyVec newcate = (InwOaPropertyVec)cdoc.ObjectFactory(nwEObjectType.eObjectType_nwOaPropertyVec, null, null);
                    // create a new Property (PropertyData)
                    InwOaProperty newprop = (InwOaProperty)cdoc.ObjectFactory(nwEObjectType.eObjectType_nwOaProperty, null, null);
                    // set PropertyName
                    newprop.name = dialog.PropertyName + "_InternalName";
                    // set PropertyDisplayName
                    newprop.UserName = dialog.PropertyName;
                    // set PropertyValue
                    newprop.value = dialog.PropertyValue;
                    // add PropertyData to Category
                    newcate.Properties().Add(newprop);
                    // add CategoryData to item's CategoryDataCollection
                    cpropcates.SetUserDefined(0, dialog.CategoryName, dialog.CategoryName + "_InternalName", newcate);
                }
            }
            return(0);
        }