OpenCascade提供了TopExp_Explorer类,可以遍历模型中的face、edge等。
为了方便分析研究模型的构成,《OpenCascade插件化三维算法研究平台》开发了模型遍历及数据浏览功能。
做这个功能的目的是从数据层面,去分析模型处理的结果,方便开展下一步的研究工作:算法研究、数据库存储、协同设计等。
参考示例代码:
void listAll(QTreeWidgetItem* item, const TopoDS_Shape& shape)
{
// if (!item) return;
for (TopExp_Explorer anExp(shape, TopAbs_COMPOUND); anExp.More(); anExp.Next())
{
QTreeWidgetItem* subItem = new QTreeWidgetItem(item);
addData(subItem, anExp.Current());
}
for (TopExp_Explorer anExp(shape, TopAbs_COMPSOLID); anExp.More(); anExp.Next())
{
QTreeWidgetItem* subItem = new QTreeWidgetItem(item);
addData(subItem, anExp.Current());
}
for (TopExp_Explorer anExp(shape, TopAbs_SOLID); anExp.More(); anExp.Next())
{
QTreeWidgetItem* subItem = new QTreeWidgetItem(item);
addData(subItem, anExp.Current());
}
for (TopExp_Explorer anExp(shape, TopAbs_SHELL); anExp.More(); anExp.Next())
{
QTreeWidgetItem* subItem = new QTreeWidgetItem(item);
addData(subItem, anExp.Current());
}
for (TopExp_Explorer anExp(shape, TopAbs_FACE); anExp.More(); anExp.Next())
{
QTreeWidgetItem* subItem = new QTreeWidgetItem(item);
addData(subItem, anExp.Current());
}
for (TopExp_Explorer anExp(shape, TopAbs_WIRE); anExp.More(); anExp.Next())
{
QTreeWidgetItem* subItem = new QTreeWidgetItem(item);
addData(subItem, anExp.Current());
}
for (TopExp_Explorer anExp(shape, TopAbs_EDGE); anExp.More(); anExp.Next())
{
QTreeWidgetItem* subItem = new QTreeWidgetItem(item);
addData(subItem, anExp.Current());
}
for (TopExp_Explorer anExp(shape, TopAbs_VERTEX); anExp.More(); anExp.Next())
{
QTreeWidgetItem* subItem = new QTreeWidgetItem(item);
addData(subItem, anExp.Current());
}
}
开发语言:C++17,QT 6.6.1 OCCT 7.7.0
OCCT几何内核干货知识:
前几年,为了做BIM的算法研究,比如,BIM模型的梁编号自动识别与纠正,轴网识别等算法和功能,做了AutoCAD、Revit的数据浏览工具。开发语言是C#,第三方包引用了ODA。
CAD数据分析
Revit数据分析(参数、几何)
欢迎大家联系交流, 微信/QQ: 23245175
几何内核、OCCT、FreeCAD、BIM软件开发、装配模型、知识图谱。
下期预告:采用图数据库neo4j,做知识图谱开发,管理装配模型。