[Transaction(TransactionMode.Manual)]
public class PublishCoordinatesCommand : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var uiapp = commandData.Application;
var uidoc = uiapp.ActiveUIDocument;
var doc = uidoc.Document;
var linkInstance = uidoc
.Selection
.GetElementIds()
.Select(doc.GetElement)
.OfType<RevitLinkInstance>()
.FirstOrDefault();
if (linkInstance == null)
return Result.Cancelled;
var sharedSiteId = new LinkElementId(linkInstance.Id, FindProjectLocation(linkInstance.GetLinkDocument()));
using (var transaction = new Transaction(doc, "publish coordinates"))
{
transaction.Start();
doc.PublishCoordinates(sharedSiteId);
transaction.Commit();
}
return Result.Succeeded;
}
private static ElementId FindProjectLocation(Document document)
{
var collector = new FilteredElementCollector(document);
return collector
.OfClass(typeof (ProjectLocation))
.FirstElementId();
}
}