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.
Solved! Go to Solution.
Solved by xiaodong_liang. Go to 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) { }
Thanks a lot!
I've already found this solution yesterdeay, and you verified my guess!
Alexander.
Hello @tkachenko_truboprovod 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