Adding a custom Task to Timeliner (or adding model selections to tasks)

Adding a custom Task to Timeliner (or adding model selections to tasks)

Anonymous
Not applicable
2,246 Views
3 Replies
Message 1 of 4

Adding a custom Task to Timeliner (or adding model selections to tasks)

Anonymous
Not applicable

Hi everybody!

I have to write a plugin, which adds some selection to every timeliner task. By selection i mean Autodesk.Navisworks.Api.Timeliner.TimelinerSelection class.

So, after user imports an MS Project file as a timeliner datasource, i get the timeliner object, i'm able to iterate through tasks and their children, BUT....

but i cannot write anything to a task or timeliner object - they are all read-only. I read about it in Developers Guide(collections returned by Navisworks are read-only, collections created programmatically are writeabe), i see ReadOnly == true in objects' properties, but i hope there is a solution for this.

So, does anybody know how to WRITE data to timeliner Tasks using .NET API?
 



This is how i get access to timeliner object:

public class navisTest :AddInPlugin
    {        static Document navDoc = Autodesk.Navisworks.Api.Application.ActiveDocument;

        static Autodesk.Navisworks.Api.DocumentParts.IDocumentTimeliner Itimeliner = navDoc.Timeliner;

        static DocumentTimeliner timeliner = (DocumentTimeliner)Itimeliner;

        TimelinerTask tsk = new TimelinerTask();

        foreach (TimelinerTask task in timeliner.Tasks)
        {
            foreach (TimelinerTask childTask in task.Children)
            {
                if (!childTask.Selection.IsClear)
                {
                    childTask.Selection.CopyFrom(newCollection);  //some  ModelItemCollection
                    //or CopyFrom(navDoc.CurrentSelection.SelectedItems.DescendantsAndSelf);
                    //anyway it crashes here - "object is readonly"
                }
            }
        }
    }

 


 

Also, i tried to create my own Task object and add it to timeliner - the same thing, it crashes:

TimelinerTask tsk = new TimelinerTask();
tsk.Selection.CopyFrom(navDoc.CurrentSelection.SelectedItems.DescendantsAndSelf);
timeliner.Tasks.Add(tsk);  //crashes here.

 

 

 

Thanks in advance,
Alexander.  Cat Happy
 

0 Likes
Accepted solutions (1)
2,247 Views
3 Replies
Replies (3)
Message 2 of 4

xiaodong_liang
Autodesk Support
Autodesk Support
Accepted solution

Hi,

 

The task cannot be manipulated directly. Please refer to the following code:

 

   Document navDoc = Autodesk.Navisworks.Api.Application.ActiveDocument;

          Autodesk.Navisworks.Api.DocumentParts.IDocumentTimeliner Itimeliner = navDoc.Timeliner;

          DocumentTimeliner timeliner = (DocumentTimeliner)Itimeliner;

          GroupItem root_copy = timeliner.TasksRoot.CreateCopy() as GroupItem; 

          TimelinerTask tsk = new TimelinerTask();

          try
          {
              tsk.Selection.CopyFrom(navDoc.CurrentSelection.SelectedItems.DescendantsAndSelf);
              root_copy.Children.Add(tsk);  //crashes here.
                // replace the timeliner tasks 
              timeliner.TasksCopyFrom(root_copy.Children); 
          }
          catch (Exception ex)
          {
          }

 

 

Message 3 of 4

Anonymous
Not applicable

Thanks a lot!

I've already found this solution yesterdeay, and you verified my guess!

 

Alexander.

0 Likes
Message 4 of 4

Anonymous
Not applicable

Hello @Anonymous I am facing a similar issue right now. I just want to ask you or Mr. @xiaodong_liang what exactly does this code do? You are just adding a task to the Timeliner? Or is there a way to add several in different point throughout the Timeliner?

 

Hope you can help,

 

Kind Regards

0 Likes