173 lines
7.2 KiB
C#
173 lines
7.2 KiB
C#
|
|
|
|||
|
|
using Autodesk.Revit.DB;
|
|||
|
|
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
|
|||
|
|
namespace RevitAddins
|
|||
|
|
{
|
|||
|
|
internal class ElementModel
|
|||
|
|
{
|
|||
|
|
private readonly Element element;
|
|||
|
|
private readonly EngineeringType engineeringType;
|
|||
|
|
|
|||
|
|
public string Category => element.GetParameters("深圳构件标识").FirstOrDefault()?.AsString() ?? "无";
|
|||
|
|
public int Count => Parameters.Count;
|
|||
|
|
|
|||
|
|
public Dictionary<string, List<Parameter>> Groups
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
var groups = new Dictionary<string, List<Parameter>>();
|
|||
|
|
foreach (Parameter parameter in Parameters)
|
|||
|
|
{
|
|||
|
|
string groupName = string.Empty;
|
|||
|
|
var parameterName = parameter.Definition.Name;
|
|||
|
|
|
|||
|
|
switch (engineeringType)
|
|||
|
|
{
|
|||
|
|
case EngineeringType.Architecture:
|
|||
|
|
//对Revit中的所有模型元素按照“深圳构件标识”属性的值进行分组,分组后每个组中的元素都具有相同的“深圳构件标识”属性值。每个组都创建一张Sheet表格,SheetName为“深圳构件标识”属性的值
|
|||
|
|
//Revit第一行是深圳构件标识的属性值
|
|||
|
|
//第二行是根据参数的名称,比如属性包含名称、编号、编码,则为身份信息,包含基点坐标则为定位信息,其余为技术信息
|
|||
|
|
//第三行是Revit中的元素的“深圳构件标识”属性值对应的参数的名称
|
|||
|
|
{
|
|||
|
|
if (parameterName is "名称" or "编号" or "编码")
|
|||
|
|
{
|
|||
|
|
groupName = "身份信息";
|
|||
|
|
}
|
|||
|
|
else if (parameterName.Contains("基点坐标") || parameterName is "所在楼层" or "建筑单体名称")
|
|||
|
|
{
|
|||
|
|
groupName = "定位信息";
|
|||
|
|
}
|
|||
|
|
else if (parameterName.Contains("生产") || parameterName.Contains("产品") || parameterName.Contains("出厂"))
|
|||
|
|
{
|
|||
|
|
groupName = "生产信息";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
groupName = "技术信息";
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
case EngineeringType.Municipal:
|
|||
|
|
{
|
|||
|
|
//第二行是根据参数的名称,比如属性包含模型元素名称、编号、分类编码,则为身份信息,包含桩号范围、桥面高度、相对位置、梁底高程则为定位信息,包含长度、宽度、高度则为构造尺寸,其余为设计信息
|
|||
|
|
if (parameterName is "模型元素名称" or "编号" or "分类编码")
|
|||
|
|
{
|
|||
|
|
groupName = "身份信息";
|
|||
|
|
}
|
|||
|
|
else if (parameterName is "桩号范围" or "桥面高度" or "相对位置" or "梁底高程")
|
|||
|
|
{
|
|||
|
|
groupName = "定位信息";
|
|||
|
|
}
|
|||
|
|
else if (parameterName is "长度" or "宽度" or "高度")
|
|||
|
|
{
|
|||
|
|
groupName = "构造尺寸";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
groupName = "设计信息";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!groups.ContainsKey(groupName))
|
|||
|
|
{
|
|||
|
|
groups[groupName] = new List<Parameter>();
|
|||
|
|
}
|
|||
|
|
groups[groupName].Add(parameter);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//对分组后的参数进行排序,排序按照名称、编号、分类编码、模型元素名称
|
|||
|
|
//var sortedParameters = new Dictionary<string, List<Parameter>>();
|
|||
|
|
//var paramOrder = new List<string>
|
|||
|
|
//{
|
|||
|
|
// "名称",
|
|||
|
|
// "编号",
|
|||
|
|
// "分类编码",
|
|||
|
|
// "模型元素名称",
|
|||
|
|
// "建筑单体名称",
|
|||
|
|
// "所在楼层",
|
|||
|
|
// "基点坐标X",
|
|||
|
|
// "基点坐标Y",
|
|||
|
|
// "基点坐标Z",
|
|||
|
|
// "主要材料导热系数",
|
|||
|
|
// "主要材料密度",
|
|||
|
|
// "K 值",
|
|||
|
|
// "耐火极限",
|
|||
|
|
// "墙厚",
|
|||
|
|
//};
|
|||
|
|
|
|||
|
|
foreach (var group in groups)
|
|||
|
|
{
|
|||
|
|
group.Value.Sort((x, y) => string.Compare(x.Definition.Name, y.Definition.Name, StringComparison.Ordinal));
|
|||
|
|
}
|
|||
|
|
//对分组进行排序,顺序是身份信息、定位信息、构造尺寸、设计信息、技术信息、生产信息
|
|||
|
|
var sortedGroups = new Dictionary<string, List<Parameter>>();
|
|||
|
|
var groupOrder = new List<string>
|
|||
|
|
{
|
|||
|
|
"身份信息",
|
|||
|
|
"定位信息",
|
|||
|
|
"构造尺寸",
|
|||
|
|
"设计信息",
|
|||
|
|
"技术信息",
|
|||
|
|
"生产信息"
|
|||
|
|
};
|
|||
|
|
foreach (var groupName in groupOrder)
|
|||
|
|
{
|
|||
|
|
if (groups.ContainsKey(groupName))
|
|||
|
|
{
|
|||
|
|
sortedGroups[groupName] = groups[groupName];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//将排序后的分组添加到字典中
|
|||
|
|
foreach (var group in groups)
|
|||
|
|
{
|
|||
|
|
if (!sortedGroups.ContainsKey(group.Key))
|
|||
|
|
{
|
|||
|
|
sortedGroups[group.Key] = group.Value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return groups;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private List<Parameter> Parameters
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
var parameters = new List<Parameter>();
|
|||
|
|
foreach (Parameter parameter in element.Parameters)
|
|||
|
|
{
|
|||
|
|
if (parameter.HasValue && parameter.Definition.ParameterGroup == BuiltInParameterGroup.PG_ADSK_MODEL_PROPERTIES && !string.IsNullOrEmpty(parameter.AsString()))
|
|||
|
|
{
|
|||
|
|
parameters.Add(parameter);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return parameters;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public ElementModel(Element element, EngineeringType engineeringType)
|
|||
|
|
{
|
|||
|
|
this.element = element;
|
|||
|
|
this.engineeringType = engineeringType;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
enum EngineeringType
|
|||
|
|
{
|
|||
|
|
Architecture,
|
|||
|
|
Municipal
|
|||
|
|
}
|
|||
|
|
}
|