在工作中直接记录开发总结的函数,代码简洁,直接复制即可使用.支持的版本2019
using RvtDb = Autodesk.Revit.DB;
//创建墙体类型
public ElementId CreatWallType(RvtDb.Document doc, string wallTypeName, double width)
{
//检索项目中是否存在该墙体样式,如果存在,则直接读取
ElementId wallTypeId = null;
FilteredElementCollector collector = new FilteredElementCollector(doc);
var wllTypes = collector.OfClass(typeof(WallType)).ToList();
foreach (WallType item in wllTypes)
{
if (item.Name == wallTypeName)
{
return item.Id;
}
}
//查找一个基本墙体类型
WallType baseWallType = null;
foreach (WallType item in wllTypes)
{
遍历查找基本墙体作为基础墙体类型
if (item.Category.Name == "墙" && item.FamilyName == "基本墙")
{
baseWallType = item;
break;
}
}
//创建新的墙体类型
WallType newWallType = null;
using (Transaction transaction = new Transaction(m_doc))
{
transaction.Start("创建新墙类型");
try
{
//复制成新的墙体类型
newWallType = baseWallType.Duplicate(wallTypeName) as WallType;
doc.Regenerate();
//设置厚度
CompoundStructure structure = newWallType.GetCompoundStructure();
structure.SetLayerWidth(0, width / 304.8); //墙宽,换算成英寸
newWallType.SetCompoundStructure(structure); //修改后设置
transaction.Commit();
}
catch
{
transaction.RollBack();
throw;
}
}
return newWallType.Id;
}