(1) 风管 (管道)
a. 获取风管的各个连接器
b. 获取和修改风管的类型属性和实例属性
c. 根据一个风管的属性创建另一个风管
// a. 获取风管的各个连接器
var ductConnector = duct.ConnectorManager.Connectors.Cast<Connector>().ToList();
// b. 修改风管的实例属性 (从一个风管的属性上获取需要的参数 添加到另一个风管上)
string height = duct1.LookupParameter("高度").AsValueString();
string width = duct1.LookupParameter("宽度").AsValueString();
string moveDistance = duct1.LookupParameter("偏移").AsValueString();
double diameter = nearPipe.LookupParameter("直径").AsDouble(); // 管道获取直径
foreach (Parameter parameter in newDuct.Parameters)
{
if (parameter.Definition.Name.Equals("高度"))
{
parameter.Set(height); //如果不行尝试后边 parameter.Set(height.ToDouble().ToAPI());
}
else if (parameter.Definition.Name.Equals("宽度"))
{
parameter.Set(width); //如果不行尝试后边 parameter.Set(height.ToDouble().ToAPI());
}
else if (parameter.Definition.Name.Equals("偏移"))
{
parameter.Set(moveDistance);
}
else if (parameter.Definition.Name.Equals("直径")) // 管道
{
parameter.Set(diameter);
}
}
// c. 根据一个风管的属性创建另一个风管
Duct newDuct1 = Duct.Create(m_curDoc, duct1.MEPSystem.GetTypeId(), duct1.DuctType.Id, duct1.ReferenceLevel.Id, startPt.ToXYZ().ToAPI(), endPt.ToXYZ().ToAPI());
(2) 族实例
a. 获取族实例的各个连接器
b. 获取和修改族实例的类型属性和实例属性
c. 族实例FamilyInstance旋转
// a. 获取族实例的各个连接器
var familyConnectors = familyInstance.MEPModel.ConnectorManager.Connectors.Cast<Connector>().ToList();
// b. 获取和修改族实例的类型属性和实例属性
// 备注 : 1. 不成功的尝试用Set(Length) / SetValueString // 2. 数值不对需要转化一下ToAPI();
// 实例类型 参数修改
foreach (Parameter parameter in fInst.Parameters)
{
if (parameter.Definition.Name.Contains("构件编号"))
{
parameter.Set(familyInstanceName);
}
else if (parameter.Definition.Name.Contains("底部标高"))
{
parameter.Set(level_1.Id); // 标高
}
}
// 类型属性修改
foreach (Parameter parameter in fInst.Symbol.Parameters)
{
if (parameter.Definition.Name.Equals("长度"))
{
parameter.SetValueString(Length);
}
}
// c.族实例FamilyInstance旋转
public void RotateFamilyInstance(Document doc, FamilyInstance instance, double angle, XYZ familyInInsertPt)
{
// 得到起点
var targetXyz = familyInInsertPt.ToAPI();
// 创建旋转基线
Line line1 = Line.CreateBound(targetXyz, targetXyz + XYZ.BasisZ * 1);
// 旋转
instance.Location.Rotate(line1, angle);
// 获取旋转后的插入点
XYZ nowXyz = instance.GetTransform().Origin;
//计算目标位置相对于当前物体位置的关系
XYZ newXyz = new XYZ(targetXyz.X - nowXyz.X, targetXyz.Y - nowXyz.Y, targetXyz.Z - nowXyz.Z);
// (以自身为坐标系 移动的距离 需要计算目标位置对于现在的相对距离)
ElementTransformUtils.MoveElement(m_curDoc, instance.Id, newXyz);
}