各位老师好,
现在需要用C#函数实现如下:
将一个体元素的点/线几何信息汲取出来。
以点做例子,现有的思路是:
1.使用 SolidUtil.GetBodyVertices(out subEntitiesOut, entityOut)后得到SubEntity[],
2.再将SubEntity转为VertexList
卡在了第2步,不知如何实现。
想请问一下C#中是否有C++对应的以下API函数:
mdlSolid_vertexData(&point, vertex);
mdlSolid_edgeData(&startVertex, &endVertex, &startPoint, &endPoint, &startParam, &endParam, NULL, &curve, NULL, edge);
mdlSolid_coedgeData(&edge, NULL, NULL, &nextCoedge,NULL, NULL, NULL, &reversed, nextCoedge);
以及,在C#中是否有VERTEX_TAG,ENTITY TAG这些概念?
提前感谢!
如下代码提取了体的顶点信息,我测试是可以的
Convert1.ElementToBody(out SolidKernelEntity entityOut, ele1, true, true, true); SolidUtil.GetBodyVertices(out SubEntity[] subEntitiesOut, entityOut); if (BentleyStatus.Success == SolidUtil.EvaluateVertex(out DPoint3d pt, subEntitiesOut[0])) { string strInfo = pt.X.ToString() + "," + pt.Y.ToString() + "," + pt.Z.ToString(); MessageCenter.Instance.ShowInfoMessage(strInfo, strInfo, false); }
Answer Verified By: mkt
非常谢谢郭工,问题解决。
还有个问题,比如一个立方体,
step1:使用 SolidUtil.GetBodyVertices(out SubEntity[] pointsOut, entity) 得到存有八个顶点数组
step2: 用 SolidUtil.GetBodyEgdes(out SubEntity[] pointsOut, entity) 得到十二条边
step3:用SolidUtil.GetEdgeVertices(out SubEntity[] subEntitiesOut, edge)) 得到所有顶点数组
但发现,直接使用subEntity.isEqual(),step1中的所有顶点和step3中的所有顶点没有一个是相等的,这让我有点疑问,因为这两个函数得到的同一个立方体的所有顶点实体。
是否有可能得到subentity的唯一标识符? 类似subentity的tag这样的概念 ,使得step1中顶点与step3中的顶点可以一 一对应上。
C# 下似乎没有封装太多有关ToplogyId的方法。在C++库中SolidUtil::TopologyID下有
可取得Face、Edge和Vertex对应的Id,通过比较这些Id可知是否是同一个面、边或顶点。
符老师,想问一下,MS的C#api有中没有判断两个subentity是否是同一个的函数? 比如重写equals函数
您上边问的那个IsEqual测试了么?
测了。只要两个元素的类型都是点,就判断为相同。
您是不是测试有误?我测试结果是坐标点也要相同IsEqual才会返回true。测试的时候可以将判断为相同的两个SubEntity的坐标点输出查看一下
郭工 ,抱歉,之前确实是我测试有问题。我测试了线条也可以。 看来isEqual可以用来比较两个subEntity的值。非常感谢,解决了所有的问题。