Community
Navisworks API
Welcome to Autodesk’s Navisworks API Forums. Share your knowledge, ask questions, and explore popular Navisworks API topics.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to get category Index to update category to model item

2 REPLIES 2
Reply
Message 1 of 3
ctci20299
440 Views, 2 Replies

How to get category Index to update category to model item

Hi, Everyone,

     In my in-house NW Plug-in, I need add user defined properties to a specify category,

             After first time, I need get category index to update it (code as below), If somebody can

             help , I am very appreciated.

 

Lee, Wenhan

 

Code as below :

 

            Navisworks.ModelItemCollection mic = new Navisworks.ModelItemCollection();
            mic.Add(model);

 

            ComApi.InwOpSelection comSels = ComApiBridge.ComApiBridge.ToInwOpSelection(mic);

            ComApi.InwSelectionPathsColl oPaths = comSels.Paths();

            ComApi.InwOaPath3 oPath = oPaths.Last() as ComApi.InwOaPath3;

            ComApi.InwGUIPropertyNode2 pNode = (ComApi.InwGUIPropertyNode2)state.

                    GetGUIPropertyNode(oPath, true);

            

            ComApi.InwOaPropertyVec newPvec = state.ObjectFactory

                    (ComApi.nwEObjectType.eObjectType_nwOaPropertyVec, null, null) as ComApi.InwOaPropertyVec;

            

            ComApi.InwOaProperty newP;

 

            foreach (DataRow dr in prps)
            {
                        newP = state.ObjectFactory(ComApi.nwEObjectType.eObjectType_nwOaProperty, null, null)

                                as ComApi.InwOaProperty;


                        newP.name = dr["PName"] as string;
                        newP.UserName = dr["PName"] as string;
                        newP.value = dr["PValue"] as string;
                        newPvec.Properties().Add(newP);
                        //MessageBox.Show(dr["PName"] + " " + dr["PValue"], strModel);
            }

 

            int idx = getIndexCategory(model, catName);
                    
            pNode.SetUserDefined(idx, catName, catName, newPvec); // idx 0: Append, othesr is replace

2 REPLIES 2
Message 2 of 3
ctci20299
in reply to: ctci20299

 

 

        int idx = getIndexCategory(pNode, catName);

 

        private int getIndexCategory(ComApi.InwGUIPropertyNode2 pNode, string catName)
        {
            int idx = 0, rst = 0;

            foreach (ComApi.InwGUIAttribute2 attribute in pNode.GUIAttributes())
            {
                if (attribute.UserDefined)
                {
                    idx++;

                    if (attribute.ClassUserName == catName)
                    {
                        rst = idx;
                        break;
                    }
                }
            }           
           
            return rst;
        }

Message 3 of 3
xiaodong_liang
in reply to: ctci20299

Hi ctci20299 ,

 

yes, what you are doing is the only way. The API does not provide the index for the catergory or property. You will need to iterate the collection and calculate the index. I would suggest storing the information.thus you can re-use them next time.

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Rail Community


Autodesk Design & Make Report