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
|
||
}
|
||
}
|