Worksets are a way to divide a set of elements in the Revit document into subsets for worksharing. There may be one or many worksets in a document.
The document contains a WorksetTable which is a table containing references to all the worksets contained in that document. There is one WorksetTable for each document. There will be at least one default workset in the table, even if worksharing has not been enabled in the document. The Document.IsWorkshared property can be used to determine if worksharing has been enabled in the document. The WorksetTable class can be used to get the active workset (as shown in the example below) and to set the active workset, by calling SetActiveWorksetId()
|
Code Region: Get Active Workset |
public Workset GetActiveWorkset(Document doc)
{
// Get the workset table from the document
WorksetTable worksetTable = doc.GetWorksetTable();
// Get the Id of the active workset
WorksetId activeId = worksetTable.GetActiveWorksetId();
// Find the workset with that Id
Workset workset = worksetTable.GetWorkset(activeId);
return workset;
}
|
|
Code Region: Filtering Worksets |
public void GetWorksetsInfo(Document doc)
{
String message = String.Empty;
// Enumerating worksets in a document and getting basic information for each
FilteredWorksetCollector collector = new FilteredWorksetCollector(doc);
// find all user worksets
collector.OfKind(WorksetKind.UserWorkset);
IList<Workset> worksets = collector.ToWorksets();
// get information for each workset
int count = 3; // show info for 3 worksets only
foreach (Workset workset in worksets)
{
message += "Workset : " + workset.Name;
message += "\nUnique Id : " + workset.UniqueId;
message += "\nOwner : " + workset.Owner;
message += "\nKind : " + workset.Kind;
message += "\nIs default : " + workset.IsDefaultWorkset;
message += "\nIs editable : " + workset.IsEditable;
message += "\nIs open : " + workset.IsOpen;
message += "\nIs visible by default : " + workset.IsVisibleByDefault;
TaskDialog.Show("GetWorksetsInfo", message);
if (0 == --count)
break;
}
}
|
The Workset class represents a workset in a Revit document. As is shown in the filtering worksets example above, the Workset class provides many properties to get information about a given workset, such as the owner and whether or not the workset is editable. These properties are read-only. To change the name of an existing workset, use the static method WorksetTable.RenameWorkset().
The static Workset.Create() method can be used to create a new workset in a given document with a specified name. Worksets can only be created in a document that has worksharing enabled and the name must be unique. The static method WorksetTable.IsWorksetNameUnique() will confirm if a given name is unique in the document. The following example demonstrates how to create a new workset.
|
Code Region: Create a new workset |
public Workset CreateWorkset(Document document)
{
Workset newWorkset = null;
// Worksets can only be created in a document with worksharing enabled
if (document.IsWorkshared)
{
string worksetName = "New Workset";
// Workset name must not be in use by another workset
if (WorksetTable.IsWorksetNameUnique(document, worksetName))
{
using (Transaction worksetTransaction = new Transaction(document, "Set preview view id"))
{
worksetTransaction.Start();
newWorkset = Workset.Create(document, worksetName);
worksetTransaction.Commit();
}
}
}
return newWorkset;
}
|