使用 Revit API 且不使用 Revit UI,我想将加载的族保存到新文件中。
我们看一下下面的代码:
using (Transaction transaction = new Transaction(document))
{
transaction.Start("Load and Save Family");
if (document.LoadFamily(familyFullPath, out Family family))
{
Console.Writeline("Load successful")
}
transaction.Commit();
ModelPath newPath = ModelPathUtils.ConvertUserVisiblePathToModelPath("result.rfa");
SaveAsOptions saveAsOptions = new SaveAsOptions();
family.Document.SaveAs(newPath, saveAsOptions);
}
这段代码的问题是它保存了我们加载族的默认文档,因为
family.Document
返回“元素所在的文档”。
我想要做的就是仅将加载的
Family
保存为新的 .rfa
文档。
为了更好地解释,我将演示使用 Revit UI 时的样子:
我怎样才能实现同样的事情,但纯粹是通过
Autodesk.Revit.DB
?
好的,解决方案是使用
EditFamily
。
因此,以下代码会将族保存到一个新的单独文档中:
using (Transaction transaction = new Transaction(document))
{
transaction.Start("Load and Save Family");
if (document.LoadFamily(familyFullPath, out Family family))
{
Console.Writeline("Load successful")
}
transaction.Commit();
// create new family document by editing family
var famDoc = document.EditFamily(family);
ModelPath newPath = ModelPathUtils.ConvertUserVisiblePathToModelPath("result.rfa");
SaveAsOptions saveAsOptions = new SaveAsOptions();
// save the new document
famDoc.SaveAs(newPath, saveAsOptions);
}
解释一下:
EditFamily
“创建家庭的独立副本进行编辑”,当我们拥有独立副本时,我们可以保存它。