OCC文件的加载过程
netgen提供的API接口:
提供了三类接口
对于occ的几何文件,iges,step,brep文件的读取
//包含的netgen的头文件
namespace nglib{
#include <nglib.h>
};
QFileInfo fileInfo(fileName);
QString fileSuf = fileInfo.suffix();
pOccgeo = nullptr;
if(fileSuf.contains("iges")){
pOccgeo = Ng_OCC_Load_IGES(fileName.toStdString().c_str());
}else if(fileSuf.contains("step")){
pOccgeo = Ng_OCC_Load_STEP(fileName.toStdString().c_str());
}
else if(fileSuf.contains("brep")){
pOccgeo = Ng_OCC_Load_BREP(fileName.toStdString().c_str());
}
else if(fileSuf.contains("stl")){
openStlFile(fileName);
return;
}
else {
return;
}
if(pOccgeo == nullptr)
{
qDebug()<<"open file faild";
return;
}
OCC网格划分
int np, ne; // Set the Meshing Parameters to be used
nglib::Ng_Result ng_res;
//设置初始化occ的网格大小
Ng_OCC_SetLocalMeshSize(pOccgeo, m_pMesh, &m_mparam);
//处理线的网格
ng_res = nglib::Ng_OCC_GenerateEdgeMesh(pOccgeo, m_pMesh, &m_mparam);
QString strInfo;
if(ng_res != nglib::NG_OK)
{
strInfo +=QString("Error in Edge Meshing....Aborting!!");
ui->textBrowser->setText(strInfo);
return;
}
//处理面的网格
ng_res = nglib::Ng_OCC_GenerateSurfaceMesh(pOccgeo, m_pMesh, &m_mparam);
if(ng_res != nglib::NG_OK){
strInfo +="\n";
strInfo +=QString("Error in Surface Meshing....Aborting!!");
ui->textBrowser->setText(strInfo);
return;
}
//生成体网格
Ng_GenerateVolumeMesh(m_pMesh,&m_mparam);
np = nglib::Ng_GetNP(m_pMesh);
strInfo +=QString("Points: %1").arg(np);
ui->textBrowser->setText(strInfo);
ne = nglib::Ng_GetNE(m_pMesh);
strInfo +=QString("\nelemet: %1").arg(ne);
ui->textBrowser->setText(strInfo);
//保存数据
Ng_SaveMesh(m_pMesh,str.toStdString().c_str());
效果如图—网格显示是用netgen的原生UI