在写异形柱转化功能的时候,想在族里面加一个材质的参数,并且将这个参数绑定在模型上。
效果如下:
参数绑定
代码如下:
/// <summary>
/// 绑定材质参数
/// </summary>
/// <param name="faDoc"></param>
/// <param name="extrusion"></param>
private static void BindParam(Document faDoc, Extrusion extrusion)
{
var faManager = faDoc.FamilyManager;
// 添加材质参数
// var materialFamilyPara = faManager.AddParameter("结构材质", BuiltInParameterGroup.PG_MATERIALS, ParameterType.Material, false);
// 获取族材质参数
var materialFamilyPara = faManager.get_Parameter(BuiltInParameter.STRUCTURAL_MATERIAL_PARAM);
// 获取元素材质参数
var materialElementPara = extrusion.get_Parameter(BuiltInParameter.MATERIAL_ID_PARAM);
// 关联参数
using (Transaction ts=new Transaction(faDoc, "BindingParameter"))
{
ts.Start();
var materialID = new FilteredElementCollector(faDoc).OfCategory(BuiltInCategory.OST_Materials).Select(e=>e.Id).FirstOrDefault();
if (materialID == null)
return;
faManager.Set(materialFamilyPara, materialID);
if (faManager.CanElementParameterBeAssociated(materialElementPara))
{
TaskDialog.Show("test", "element:" + materialElementPara.Definition.Name + "\nfamily:" + materialFamilyPara.Definition.Name);
faManager.AssociateElementParameterToFamilyParameter(materialElementPara, materialFamilyPara);
}
ts.Commit();
}
}
三个小问题需要注意下:
- 添加参数前可以先看看族样板里面有没有内置相关的参数。没有就新建,有的话通过
get_Parameter
方法直接拿来用。 - 如果使用的是系统内置参数,无法进行
实例
和类型
之间的相互转换。 - 绑定参数时,要提前给族参数赋值,否则会抛异常。
Autodesk.Revit.Exceptions.InvalidOperationException: Document regeneration failed.
网友评论