cshap获取tekla中所有起点和终点方向一样的模型属性
时间: 2023-05-26 11:05:54 浏览: 101
需要先确定需要获取哪些模型的属性,可以根据不同的模型属性来筛选需要的模型。一般可以使用Tekla API中的Model对象和Model.Select方法获取需要的模型,然后使用Model.GetObjectsByType方法获取指定类型的对象,如Beam对象或Column对象。
挑选出需要的对象后,可以使用对象的StartPoint和EndPoint属性来获得其起点和终点的坐标,然后根据起点和终点的坐标差来判断它们的方向。具体方法如下:
1. 遍历所有需要的对象,将它们的起点和终点坐标分别记录下来,可以用一个数组来保存它们。
2. 对于每个对象,判断其起点和终点的坐标差的x、y、z值是否相同。如果相同,则说明它们的方向一样,可以将它加入到另外一个数组中,作为符合要求的对象。
3. 最后遍历符合要求的对象数组,获取它们的属性值即可。
下面是示例代码:
```
using Tekla.Structures.Model;
using Tekla.Structures.Geometry3d;
using System.Collections.Generic;
// 获取所有起点和终点方向一样的Beam对象
public class GetSameDirectionBeams
{
public List<Beam> get()
{
List<Beam> sameDirectionBeams = new List<Beam>();
List<Point> startPoints = new List<Point>();
List<Point> endPoints = new List<Point>();
Model model = new Model();
if (model.GetConnectionStatus())
{
ModelObjectEnumerator objects = model.GetModelObjectSelector().GetObjectsByType(Tekla.Structures.Model.ModelObject.ModelObjectEnum.BEAM);
while (objects.MoveNext())
{
Beam beam = objects.Current as Beam;
Point startPoint = beam.StartPoint;
Point endPoint = beam.EndPoint;
bool hasSameDirection = false;
foreach (Point p in startPoints)
{
if (p.IsEqual(startPoint, 0.001) && (endPoints[startPoints.IndexOf(p)].IsEqual(endPoint, 0.001)))
{
// 方向一样的Beam
sameDirectionBeams.Add(beam);
hasSameDirection = true;
break;
}
}
if (!hasSameDirection)
{
startPoints.Add(startPoint);
endPoints.Add(endPoint);
}
}
}
return sameDirectionBeams;
}
}
```
阅读全文