前言
这篇文章介绍两个例子,逻辑比较简单:
- TypeRegeneration 修改类型,更新文档
- ValidateParameters 参数合法性验证
内容
TypeRegeneration
FamilyType 不是继承自 Element 的,而是独立于 Element 体系之外,直接从 Autodesk.Revit.DB.APIObject派生。
FamilySymbol 则是继承自 ElementType。
namespace Autodesk.Revit.DB
{
public class FamilyType : APIObject
{
public string Name { get; }
public double? AsDouble(FamilyParameter familyParameter);
public ElementId AsElementId(FamilyParameter familyParameter);
public int? AsInteger(FamilyParameter familyParameter);
public string AsString(FamilyParameter familyParameter);
public string AsValueString(FamilyParameter familyParameter);
public bool HasValue(FamilyParameter familyParameter);
}
}
TypeRegeneration 修改类型,更新文档。
这个例子是在族文件里运行,因此 document.IsFamilyDocument
返回真。例子的核心是更改当前文档的类型 m_familyManager.CurrentType = type
。
核心逻辑:
if (document.IsFamilyDocument){
m_familyManager = document.FamilyManager;
foreach (FamilyType type in m_familyManager.Types) {
m_familyManager.CurrentType = type;
}
ValidateParameters
ValidateParameters 参数合法性验证。
同样是在族文档里面,即 document.IsFamilyDocument
返回真。
遍历所有参数,判断是否合法:
foreach (FamilyType type in familyManager.Types){
bool right = true;
foreach (FamilyParameter para in familyManager.Parameters){
if (type.HasValue(para)){
switch (para.StorageType){
case StorageType.Double:
if (!(type.AsDouble(para) is double))
right = false;
break;
case StorageType.ElementId:
try{
Autodesk.Revit.DB.ElementId elemId=type.AsElementId(para);
} catch {
right = false;
}
break;
case StorageType.Integer:
if (!(type.AsInteger(para) is int))
right = false;
break;
case StorageType.String:
if (!(type.AsString(para) is string))
right = false;
break;
default:
break;
}
}
}
}
namespace Autodesk.Revit.DB
{
public class FamilyParameter : APIObject
{
public bool UserModifiable { get; }
public override bool IsReadOnly { get; }
public bool IsShared { get; }
public Guid GUID { get; }
public ElementId Id { get; }
public ParameterSet AssociatedParameters { get; }
public DisplayUnitType DisplayUnitType { get; }
public string Formula { get; }
public bool CanAssignFormula { get; }
public bool IsDeterminedByFormula { get; }
public bool IsReporting { get; }
public bool IsInstance { get; }
public StorageType StorageType { get; }
public Definition Definition { get; }
}
}