我正在努力导出所有墙壁的顶点
我设法输出结果,但每个墙都有相同的顶点集
我使用了获取元素边缘的方法,但是每个墙壁包含92个端点,这些端点在我使用的基本墙上是不正确的。
然后我使用了获取面并将网格从其中取出然后通过顶点属性的顶点的方法
这提供了28个顶点,这些顶点对于某些墙壁是正确的,但每个元素的坐标都是相同的
我该如何以正确的方式处理这个问题?
我的代码:
FilteredElementCollector wallcollector = new FilteredElementCollector(doc).OfClass(typeof(Wall)).WhereElementIsNotElementType();
bool isconcrete = false;
foreach (var element in wallcollector.ToElements())
{
foreach (var mat in element.GetMaterialIds(false))
{
if (doc.GetElement(mat).Name.Contains("Concrete")) isconcrete = true;
}
if (isconcrete)
{
GeometryElement geo = element.get_Geometry(new Options());
if (geo != null)
{
foreach (var g in geo)
{
Solid geosolid = g as Solid;
if (geosolid != null)
{
foreach (Face f in geosolid.Faces)
{
Mesh mesh = f.Triangulate();
foreach (var xyz in mesh.Vertices)
{
FillDictionary(xyz, element);
}
}
}
}
}
}
}
我不认为我的迭代是错误的,因为我基本上只是预告了一切,但也许有一些我看不到的隐藏错误。 我使用字典来存储我的数据。 以下是我填写的方式:
public void FillDictionary(XYZ point, Element element) {
if (element.Id.IntegerValue == formerid)
{
cornerByID[element.UniqueId].Add(ttr.OfPoint(point));
}
else
{
cornerlist.Clear();
cornerlist.Add(element.Name);
cornerlist.Add(element);
cornerlist.Add(element.Id);
cornerlist.Add(ttr.OfPoint(point));
cornerByID.Add(element.UniqueId, cornerlist);
formerid = element.Id.IntegerValue;
}
}
答案 0 :(得分:0)
如果您使用带有XYZ
对象键的字典,则需要实施fuzzy comparison to compare the keys。