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: 

Add Link to object via .net

19 REPLIES 19
SOLVED
Reply
Message 1 of 20
timbot
6419 Views, 19 Replies

Add Link to object via .net

is there a way to add a link to an object via .net? wanting to look thru all the mechanical equipment on our models and link them to their documentation automatically. thanks!

19 REPLIES 19
Message 2 of 20
xiaodong_liang
in reply to: timbot

Hi,

 

To add hyperlink to the object, COM API is the current way, i.e. use COM interop in the .NET  program. The code below adds some links to one object.

 

 private void AddURL()
  { 
  ComApi.InwOpState10 state;
  state = ComApiBridge.ComApiBridge.State;

  ComApi.InwURLOverride oMyURLOoverride = (ComApi.InwURLOverride)state.ObjectFactory(Autodesk.Navisworks.Api.Interop.ComApi.nwEObjectType.eObjectType_nwURLOverride, null, null);

  double[] coordinate = { 10, 10, 0, 20, 20, 0, 30, 30, 0 };

  for(int i = 0 ;i < 9; i +=3)
  {
  ComApi.InwURL2 oMyURL = (ComApi.InwURL2)state.ObjectFactory(Autodesk.Navisworks.Api.Interop.ComApi.nwEObjectType.eObjectType_nwURL, null, null);
  oMyURL.name = "MyURL" + i.ToString ();
  oMyURL.URL = "http://www.google.com";

  ComApi.InwLPos3f oNewP = (ComApi.InwLPos3f)state.ObjectFactory(Autodesk.Navisworks.Api.Interop.ComApi.nwEObjectType.eObjectType_nwLPos3f, null, null);

  oNewP.data1 = coordinate[i];
  oNewP.data2 = coordinate[i + 1];
  oNewP.data3 = coordinate[i + 2];
 
  oMyURL.AttachmentPoints().Add(oNewP);

 
  ComApi.InwURLColl oURLColl = oMyURLOoverride.URLs(); 
  oURLColl.Add(oMyURL);

   ModelItemCollection modelItemCollectionIn = new ModelItemCollection(Autodesk.Navisworks.Api.Application.ActiveDocument.CurrentSelection.SelectedItems);

  //convert to InwOpSelection of COM API
  ComApi.InwOpSelection comSelectionOut =
  ComApiBridge.ComApiBridge.ToInwOpSelection(modelItemCollectionIn);

 
  state.SetOverrideURL(comSelectionOut, oMyURLOoverride);
  state.URLsEnabled = true; 
  }
  return;
  }

 

Best regards,

 
autodesk_logo_signature.png

Xiaodong Liang

Developer Consultant

Autodesk Developer Technical Services

Message 3 of 20
tim-bot
in reply to: timbot

awesome! i just noticed this, but that's exactly what i was looking for B) thank you!

Message 4 of 20
dupuisj3
in reply to: xiaodong_liang

Hi,

 

Is there a way to find the coordinate of an element in Navisworks? I tried to find the coordinate of an element to put a label directly on it.  I know that it is possible to find the boundingbox of the element with the API but it seems that the element is not always in the center of the bounding box.

 

Thanks

 

JF Dupuis

Message 5 of 20
SCAF33
in reply to: xiaodong_liang

Hi Xiaodong,

    I am attemping to create the add links to object programatically using either vbscript or javascript for usage in the Integrated ActiveX control embedded in a HTML page. I have debugged the code and it runs through to the end but the featured selection in my model is not updated with a manual link I have created. Can you point out where I am going wrong. Both code samples are provided below: I believe the area it is falling down relates to the actual state.SetOverrideURL call using InwOpSelection paramter. I cannot recreate the ModelItemCollection in VBScript or Javascript so have tried  a number of approaches to pass CurrentSelection.SelectedItems

 

VBSCRIPT

 

public sub addURL()

 

Dim state

Set state = NWControl01.state

Dim oMyURLOoverride Set oMyURLOoverride = state.ObjectFactory(state.GetEnum ("eObjectType_nwURLOverride"))

 

 // Dim coordinate = "10, 10, 0, 20, 20, 0, 30, 30, 0"

Dim coordinate coordinate = "1"

 

Dim oMyURL    

Set oMyURL = state.ObjectFactory(state.GetEnum("eObjectType_nwURL"))  

oMyURL.name = "MyURL444"  

oMyURL.URL = "http://www.google.co.uk"

 

oMyURL.SetCategory "Hyperlink","LcOaURLCategoryHyperlink"        

 

 oMyURL.SetCategory "Label", "LcOaURLCategoryTag"

 

  Dim oNewP

  Set oNewP = state.ObjectFactory(state.GetEnum("eObjectType_nwLPos3f"))

 

  oNewP.data1 = "10"  

  oNewP.data2 = "10"  

  oNewP.data3 = "0"

    

oMyURL.AttachmentPoints().Add(oNewP)

 

 Dim oURLColl

  Set oURLColl = oMyURLOoverride.URLs   oURLColl.Add(oMyURL)

 

    //convert to InwOpSelection of COM API  

Dim comSelectionOut

 

 Set comSelectionOut = state.CurrentSelection

   

 

state.SetOverrideURL comSelectionOut, oMyURLOoverride  

 

state.URLsEnabled = true

state.ZoomInCurViewOnCurSel

end sub

-->

 

 

 

JAVASCRIPT&colon;

 

function addURL() {

var state = NWControl01.state;

var oMyURLOoverride = state.ObjectFactory( state.GetEnum( "eObjectType_nwURLOverride"),null, null);

 

  var coordinate = "10, 10, 0, 20, 20, 0, 30, 30, 0 ";

 

    var oMyURL = state.ObjectFactory(state.GetEnum("eObjectType_nwURL"),  null, null);  

 

oMyURL.name = "MyURL444";  

oMyURL.URL = "http://www.google.co.uk";

 

oMyURL.SetCategory("Hyperlink", "LcOaURLCategoryHyperlink");

 oMyURL.SetCategory("Label", "LcOaURLCategoryTag");

 

  var oNewP = state.ObjectFactory(state.GetEnum("eObjectType_nwLPos3f"), null, null);

  oNewP.data1 = "10";  

  oNewP.data2 = "10";  

  oNewP.data3 = "0";

 

    oMyURL.AttachmentPoints().Add(oNewP);

 

    var oURLColl = oMyURLOoverride.URLs();   oURLColl.Add(oMyURL);

 

    //convert to InwOpSelection of COM API  

var comSelectionOut = state.ObjectFactory(state.GetEnum("eObjectType_nwOpSelection"));

 

// state.CurrentSelection.SelectedItems;

 

    state.SetOverrideURL(comSelectionOut, oMyURLOoverride);  

state.URLsEnabled = true;

state.ZoomInCurViewOnCurSel();

}

 

 

 

Best Regards

 

Message 6 of 20
JohnHon
in reply to: xiaodong_liang

Hi all,

 

Is there any undates on adding url tags by Api, says, moving functions to .Net Api?

 

Thanks,

John

Message 7 of 20
xiaodong_liang
in reply to: JohnHon

Hi John,

 

Sorry, no any news. You still need to use COM API to work with hyperlink.

Message 8 of 20
GeomGym
in reply to: xiaodong_liang

I'm assuming it's still not possible to generate a hyperlink from the .net api.

 

Is there any way to get Navisworks to identify this using IFC property sets (or similar)?

Message 9 of 20
GeomGym
in reply to: GeomGym

I got the com code above to work, but it's not quite what I was looking for.

 

I'd like to add a link to an object equivalent to right clicking on the object (as per attached image).

 

Thanks in advance,

 

Jon

 

140303 add link to object.png

Message 10 of 20
xiaodong_liang
in reply to: GeomGym

Hi,

 

We still have to use COM API to work with hyperlink now.

 

about your question, I think my code above explains, but I also wrote a more detail blog on it. Could you take a look if it answers your question?

 

http://adndevblog.typepad.com/aec/2012/05/create-hyperlinks-for-model-objects-using-net-api.html

Message 11 of 20
GeomGym
in reply to: xiaodong_liang

Thanks for the reply.

 

I did get the .com code to create a hyperlink label (refer attached .nwd and image). 

But what I would really prefer to do is set a context menu hyperlink from the api

(I have done this  manually for the right panel).

 

140306 manual set context hyperlink.png

 

Can you please advise how to adjust the code to achieve this?

 

Thanks,

 

Jon

Message 12 of 20

Dear Colleagues

 

Is there a possibility with API that hyperlink assigned to any object open by double clicking the object?

 

Regards,

Abdur 

Message 13 of 20

Dear Colleagues

 

You might help me.

I am looking for a possibility to add a 'product manual webpage' by hyperlinking each individual object of a model in Navisworks. I know that through right clicking any object, i can assign / load any web link.

 

I want to generate a Macro/plugin window next to the 3D Model which

- asks to select any individual object and assign a web link to it.
- after selecting any individual object, gives an option of a button button which takes you to the webpage. 

 

Please help me in coding this. I am new to the programming and learning through this forum.

 

Please help me.

 

Regards,

Abdur Nasir

Message 14 of 20

Hi,

 

I wrote a blog for this requirement: Double click to open the hyperlink. Hope it helps:

 

http://adndevblog.typepad.com/aec/2015/07/double-click-to-open-the-hyperlink.html

Message 15 of 20
JohnHon
in reply to: xiaodong_liang

Hi Xiaodong,

 

It seems that the function, Double click to open the hyperlink, is only applied to the Plugins applications.

May I confirm that this function is not applied to control-based applications?

 

Best Regards,

John

Message 16 of 20
xiaodong_liang
in reply to: JohnHon

Hi John,

yes, as mentioned in the other thread, the interactive events of .NET control has not been exposed.

while the .NET control can load plugin
http://adndevblog.typepad.com/aec/2014/03/call-plugin-within-application-of-net-control.html

my testing shows, even though the InputPlugin can be loaded in the application of control, it does not work very well. you could try to check if you could make it working better, yet it is also not a supported scenario of us.

Message 17 of 20
JohnHon
in reply to: xiaodong_liang

Hi Xiaodong,

 

Thanks for pointing out we can use Plugin in .Net control.

 

What do you mean "not working very well"?

It cannot import the plugin everytime or it cannot work everytime ot etc?

 

Best Regards,

John

Message 18 of 20
xiaodong_liang
in reply to: JohnHon

It can be loaded, but when I played with this idea, sometimes it crashed my application, or no response with the interaction. So I did not even write a blog about it.

it looks somebody else is using such way, e.g.
http://forums.autodesk.com/t5/navisworks-api/capturing-mouse-wheel-events-in-toolplugin-2016-api/td-...

again, since it is not a native way exposed for .NET control, it would have to be at your own risk.
Message 19 of 20
JohnHon
in reply to: xiaodong_liang

Dear Xiaodong,

 

I see. Thanks for providing your experience on the plugin.

 

I will try myself to see whether it fits our application.

 

Best Regards,

John

Message 20 of 20

you code works well, however, it removes the old links. Is it possible to ADD a link, not replace the existing ones ?

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

Post to forums  

Rail Community


Autodesk Design & Make Report