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: 

Problem Removing Custom Attributes

5 REPLIES 5
Reply
Message 1 of 6
railrover
696 Views, 5 Replies

Problem Removing Custom Attributes

Hi all,

 

I am trying to remove all custom attributes from a document.

 

With a fairly small document (with about 700 instances of the custom attribute), my code works fine, but with larger models (say about 9000 instances, Navisworks becomes unresponsive.  Looking at the task manager, the code is still running, but it never exits.

 

ANy ideas?  The code is below:

 

                Dim nwstate As ComApi.InwOpState10

                nwstate = ComApiBridge.ComApiBridge.State


                Dim Search As New Search

                Search.Selection.SelectAll()

                Search.SearchConditions.Add(SearchCondition.HasCategoryByDisplayName("MyAttribute"))

                Dim items As ModelItemCollection = Search.FindAll(Application.ActiveDocument, True)

                Application.ActiveDocument.CurrentSelection.CopyFrom(items)


                Dim index As Integer
                
For Each nwpath As ComApi.InwOaPath In nwstate.CurrentSelection.Paths index = 0 Dim nwNode As ComApi.InwGUIPropertyNode2 = nwstate.GetGUIPropertyNode(nwpath, True) For Each nwAtt As ComApi.InwGUIAttribute2 In nwNode.GUIAttributes() If Not nwAtt.UserDefined Then Continue For index += 1 nwNode.RemoveUserDefined(index) Exit For Next GC.KeepAlive(nwNode) GC.KeepAlive(nwpath) Next GC.KeepAlive(nwstate) End If

 

Many thanks,

 

Mike

5 REPLIES 5
Message 2 of 6
xiaodong_liang
in reply to: railrover

Hi,

 

It is a bit hard to diagnose without such large sample. I would like to check if you could debug to see

 

1) if the code is still running within the loop? Is it possible a dead loop occured? 

2) are these objects in a good status? any strange detail?

3) if this problem occured from a specific instance? 

4) RemoveUserDefined always works without failure?

Message 3 of 6
railrover
in reply to: xiaodong_liang

Thanks for your repy...

 

The code DID finally finish running, but it took far too long to be useable.

 

Is there a better way to globally remove a custom attribute?

 

My problem is that I need to distribute two different NWD's; one of which only contains a sub-set of the custom attributes of the other.  I want to import all the attributes, create the first NWD, then remove the ones I dont want, and create the second NWD.

 

As I will have about 15 NWD's of each type, automating this process will be huge n terms of time svaings.

 

Cheers

 

Mike

Message 4 of 6
xiaodong_liang
in reply to: railrover

Hi,

 

The iteration is the only way currently. It is true it would be slow with more instances. And it looks you have used plug-in which runs in process that has better performance. And I believe you have made Navisworks invisible to run your plug-in.  So I have not a good idea at this moment.

 

I did not test, however, I am curious if it is also slow when you adding these attribute. If it is faster, probably you could call RemoveUserDefined (ndx=0) to remove all (I guess remove all may be faster), and add the attribute you need again?

 

In addition, ComApiBridge.ToInwOpSelection can translate from ModelItemCollection to InwOpSelection. Makes a copy of the underlying selection. So you do not need to call Application.ActiveDocument.CurrentSelection.CopyFrom(items), then iterate CurrentSelection. It would also cost time to set the current selection.

 

Message 5 of 6
railrover
in reply to: xiaodong_liang

We use iConstruct to import the data, which seems to run very quickly.

 

I presume they must be using a different method to create custom attributes, rather then interation.

 

I am fairly new to developing with the Navisworks API, and have not yet looked at how you can use the API to import data from external sources and create custom attributes using the imported data.

 

Cheers

 

Mike

Message 6 of 6
xiaodong_liang
in reply to: railrover

from our engineers: Not sure how iConstruct works;  It could be that they are using a custom property plugin (as opposed to creating a whole load of custom attributes), in which case there is no iteration over the model. I don’t know of any faster way to remove user-defined properties other than just iterating over all the items in the model and removing the attribute.

 

You can find the sample custom property plugin at \api\COM\examples\Plugin\PluginPropertyDatabaseExample. The sample self-explains.

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

Post to forums  

Rail Community


Autodesk Design & Make Report