![](/img/trans.png)
[英]How to add parameters to a revit family element from revit document in revit-api c#
[英]How to add parameter to a family in Revit using Revit API in C#?
我正在尝试向 Revit 族添加参数。 当我打开 Revit Family 文档并在宏中执行以下代码时,出现此错误:
System.Exception:文档重新生成失败。 在 MacroModule.executeMacro_(MacroModule*, AString* MacroName) 在 MacroModule.executeMacro_(MacroModule*, AString* )
知道如何解决这个问题吗?
public void FamilyInstanceParameters()
{
Document document = this.ActiveUIDocument.ActiveView.Document;
if (!document.IsFamilyDocument)
{
TaskDialog.Show("Info", "This is not a FamilyDocument");
}
else
{
try
{
Transaction transaction = new Transaction(document);
transaction.Start("Param");
// Get the family document category
Family family = document.OwnerFamily;
Category category = family.FamilyCategory;
FamilyType familyType = document.FamilyManager.NewType("New Type A");
document.FamilyManager.CurrentType = familyType;
// Parameter group
BuiltInParameterGroup builtInParamGroup = BuiltInParameterGroup.PG_IDENTITY_DATA;
document.Regenerate();
FamilyParameter familyParameter = document.FamilyManager
.AddParameter("parameterName", builtInParamGroup, category, false);
document.FamilyManager.Set(familyParameter, "parameterValue");
transaction.Commit();
transaction.Dispose();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
在调试器中运行您的代码,并准确确定是哪一行导致了问题。 如果是对document.Regenerate
的调用,也许可以跳过它。 众多详细解决方案请搜索Revit API论坛添加族参数。
我通过使用以下方法重载解决了这个问题:
public FamilyParameter AddParameter( string parameterName, ForgeTypeId groupTypeId, ForgeTypeId specTypeId, bool isInstance )
public void FamilyInstanceParameters()
{
Document document = this.ActiveUIDocument.ActiveView.Document;
if (!document.IsFamilyDocument)
{
TaskDialog.Show("Info", "This is not a FamilyDocument");
}
else
{
try
{
Transaction transaction = new Transaction(document);
transaction.Start("Param");
// Get the family document category
Family family = document.OwnerFamily;
Category category = family.FamilyCategory;
FamilyType familyType = document.FamilyManager.NewType("New Type A");
document.FamilyManager.CurrentType = familyType;
// ParameterName en value
string parameterName = "parameterNameLength";
int parameterValue = 20;
FamilyParameter familyParameter = document.FamilyManager.AddParameter(parameterName: parameterName, groupTypeId: GroupTypeId.Constraints, specTypeId: SpecTypeId.Length, isInstance: false);
document.FamilyManager.Set(familyParameter, parameterValue);
transaction.Commit();
transaction.Dispose();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
这是添加文本参数的方法
public void AddParameter(Document familyDoc)
{
using(Transaction tx = new Transaction(familyDoc, "AddParameter"))
{
tx.Start();
familyDoc.FamilyManager.NewType("New Type A"); //add new type - "new type" becomes current type
FamilyParameter familyParameter = familyDoc.FamilyManager.AddParameter("parameterName", GroupTypeId.IdentityData, SpecTypeId.String.Text, false); //method overload to add text parameter
familyDoc.FamilyManager.Set(familyParameter, "parameterValue");
//familyDoc.FamilyManager.SetFormula(familyParameter, "\"parameterValue\"");
tx.Commit();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.