Привет,
Есть проект с семействами "Родительское семейство 1" и "Родительское семейство 2", в которых есть вложенное семейство "Вложенное семейство":
![](https://i.postimg.cc/rKgzBSzb/Clipboard.png)
и файл семейства "Родительское семейство 2" с измененным вложенным семейством.
При загрузке этого семейства в проект руками ревит спрашивает обновлять ли само родительское семейство:
![](https://i.postimg.cc/mhLP8XgM/Clipboard02.png)
потом справшивает обновлять ли вложенное семейство:
Как при программной загрузке семейства получить имя обновляемого общего семейства? (как на скрине выше)Тестовый пример:
namespace TestRevitSubFamilyLoad
{
using System.IO;
using System.Windows;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class Command : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var doc = commandData.Application.ActiveUIDocument.Document;
var familyFile = Path.Combine(
Path.GetDirectoryName(typeof(Command).Assembly.Location),
"Родительское семейство 1.rfa");
using var t = new Transaction(doc, nameof(TestRevitSubFamilyLoad));
t.Start();
doc.LoadFamily(familyFile, new FamilyLoadOptions(), out var family);
t.Commit();
return Result.Succeeded;
}
}
public class FamilyLoadOptions : IFamilyLoadOptions
{
public bool OnFamilyFound(bool familyInUse, out bool overwriteParameterValues)
{
overwriteParameterValues = true;
return true;
}
public bool OnSharedFamilyFound(
Family sharedFamily,
bool familyInUse,
out FamilySource source,
out bool overwriteParameterValues)
{
MessageBox.Show($"sharedFamily = {sharedFamily?.Name}");
source = FamilySource.Family;
overwriteParameterValues = true;
return true;
}
}
}
Как я думал, в метод OnSharedFamilyFound будут попадать вложенные семейства, но прилетает только родительское семейство:
![](https://i.postimg.cc/qhTHj5c3/Clipboard01.png)
Тестовый проект с файлами ревита в архиве.