Attach Search or SelectionSet to a Timeliner Task

By Xiaodong Liang

TimelinerSelection.CopyFrom allows you copy explicit selected items, a Search, a Selection, SelectionSourceCollection. SelectionSourceCollection is a collection of SelectionSources, while SelectionSource represents a reference to a source that can generate a selection on demand, generally a kind of middleware when you want to attach SelectionSet to Timeliner task.

The following code demos the two scenarios. It assumes the document has two Timeliner tasks, current search is available, and at least one SelectionSet exists. The code checks the tasks in first level only. It will attach current Search to the first task, and attach first SelectionSet to the second task.

 


using Nw = Autodesk.Navisworks.Api;
using Tl = Autodesk.Navisworks.Api.Timeliner;
public override int Execute(params string[] parameters)
{
Document oDoc = Autodesk.Navisworks.Api.Application.ActiveDocument;
try
{
Nw.Document doc = Nw.Application.ActiveDocument;
Nw.DocumentParts.IDocumentTimeliner tl = doc.Timeliner;
Tl.DocumentTimeliner tl_doc = (Tl.DocumentTimeliner)tl;
//assume we check the tasks in first level only
SavedItem parentItem = tl_doc.TasksRoot;
if (tl_doc.Tasks.Count > 1)
{
//test with the first and second tasks only
//first task, attach a Search Set
Tl.TimelinerTask oTask1 = tl_doc.Tasks[0] as Tl.TimelinerTask;
if (!doc.CurrentSearch.ToSearch().IsClear)
{
//if a current search exists
SelectionSet oMySet = new SelectionSet(oDoc.CurrentSearch.ToSearch());
//attach selection set to the task
Tl.TimelinerTask oCopyTask1 = oTask1.CreateCopy();
oCopyTask1.Selection.CopyFrom(doc.CurrentSearch.ToSearch());
tl_doc.TaskReplaceWithCopy((GroupItem)parentItem, 0, oCopyTask1);
}
//second task, attach a Selection Set
Tl.TimelinerTask oTask2 = tl_doc.Tasks[1] as Tl.TimelinerTask;
if (doc.SelectionSets.RootItem.Children.Count > 0)
{
SelectionSet oOneSet = doc.SelectionSets.RootItem.Children[0] as SelectionSet ;
SelectionSourceCollection oSetSourceColl = new SelectionSourceCollection();
SelectionSource oSetSource =doc.SelectionSets.CreateSelectionSource(oOneSet);
oSetSourceColl.Add(oSetSource);
//attach selection set to the task
Tl.TimelinerTask oCopyTask2 = oTask2.CreateCopy();
oCopyTask2.Selection.CopyFrom(oSetSourceColl);
tl_doc.TaskReplaceWithCopy((GroupItem)parentItem, 1, oCopyTask2);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return 0;
}</pre 
>

Comments

One response to “Attach Search or SelectionSet to a Timeliner Task”

  1. I’d like to thank the author for writing such an insightful and informative blog post about search timeliner that is not just useful to the readers but also revealing.

Leave a Reply to Technostruct LLCCancel reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading