Доброго времени суток!
Создал команду для вставки внешней ссылки. Все работает отлично, но только из метода Execute (из кнопки на вкладке REVIT). Вот ее код:
namespace RevitAddin1
{
[Transaction(TransactionMode.Manual)]
public sealed partial class LinkAttach : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Result result = Result.Failed;
UIApplication uiApplication = commandData.Application;
UIDocument uiDocument = uiApplication.ActiveUIDocument;
Document document = uiDocument.Document;
List<string> links = new List<string>
{
@"D:\1 temp\link1.rvt",
@"D:\1 temp\link2.rvt"
};
List<RevitLinkInstance> revitLinkInstances = new FilteredElementCollector(document)
.OfClass(typeof(RevitLinkInstance))
.Cast<RevitLinkInstance>()
.ToList();
foreach (RevitLinkInstance revitLinkInstance in revitLinkInstances)
{
Document linkDocument = revitLinkInstance.GetLinkDocument();
RevitLinkType linkType = document.GetElement(revitLinkInstance.GetTypeId()) as RevitLinkType;
}
using (Transaction tr = new Transaction(document))
{
tr.Start("Подключение ссылок");
try
{
foreach (string link in links)
{
ModelPath linkpath = ModelPathUtils.ConvertUserVisiblePathToModelPath(link);
RevitLinkOptions options = new RevitLinkOptions(false);
LinkLoadResult linkLoadResult = RevitLinkType.Create(document, linkpath, options);
RevitLinkInstance.Create(document, linkLoadResult.ElementId);
}
tr.Commit();
return Result.Succeeded;
}
catch (Exception ex)
{
tr.RollBack();
TaskDialog.Show("Revit", ex.Message);
}
}
return result;
}
}
}
Теперь мне нужно перенести этот код в отдельный метод.
После переноса кода в отдельный метод внешние ссылки вставляются на мгновение и тут же исчезают. Вот код:
namespace RevitAddin1
{
[Transaction(TransactionMode.Manual)]
public sealed partial class LinkAttach_2 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Result result = Result.Failed;
UIApplication uiApplication = commandData.Application;
UIDocument uiDocument = uiApplication.ActiveUIDocument;
Document document = uiDocument.Document;
//using (Transaction transaction = new Transaction(document))
//{
ExternalMethodLinkAttach(document);
// transaction.Commit();
//}
return result;
}
public Result ExternalMethodLinkAttach(Document document)
{
Result result = Result.Failed;
List<string> links = new List<string>
{
@"D:\1 temp\link1.rvt",
@"D:\1 temp\link2.rvt"
};
List<RevitLinkInstance> revitLinkInstances = new FilteredElementCollector(document)
.OfClass(typeof(RevitLinkInstance))
.Cast<RevitLinkInstance>()
.ToList();
foreach (RevitLinkInstance revitLinkInstance in revitLinkInstances)
{
Document linkDocument = revitLinkInstance.GetLinkDocument();
RevitLinkType linkType = document.GetElement(revitLinkInstance.GetTypeId()) as RevitLinkType;
}
using (Transaction tr = new Transaction(document))
{
tr.Start("Подключение связей");
try
{
foreach (string link in links)
{
ModelPath linkpath = ModelPathUtils.ConvertUserVisiblePathToModelPath(link);
RevitLinkOptions options = new RevitLinkOptions(false);
LinkLoadResult linkLoadResult = RevitLinkType.Create(document, linkpath, options);
RevitLinkInstance.Create(document, linkLoadResult.ElementId);
}
tr.Commit();
return Result.Succeeded;
}
catch (Exception ex)
{
tr.RollBack();
TaskDialog.Show("Revit", ex.Message);
}
tr.Commit();
}
return result;
}
}
}
Думаю, проблема в не корректном вызове транзакции. Перебрал уже множество вариантов, но решения так и не нашел.
Подскажите, где я не прав.
Заранее благодарю.
P.S. REVIT 2020, Windows 10 Pro Версия 20H2