Opencascad(C++)-导出整个模型到stl文件
2023-12-13 10:16:34
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
1、前言
最近研究下Opencascad,还不是很深入,对于Opencascad的理论还不扎实,这里仅仅是个人做项目的一些开发经验,如果有不足之处或者有疑问之处可以在评论区留言或者私信博主。今天介绍一下将模型中的文件导出到stl文件中,这里可以是单个TopoDS_Shape,也可以是多个TopoDS_Shape,通过修改小面片的deflection和angle可以改变导出的效率。
`
2、首先创建几个简单的模型
这里有多个直管、两个弯头和一个三通构成。
3、导出stl的代码为
bool PDObjectModel::WriteStl(const QString& fileName,double deflection,double angle)
{
StlAPI_Writer stlWrite;
//创建TopoDS_Compound对象
BRep_Builder builder = BRep_Builder();
TopoDS_Compound comp = TopoDS_Compound();
builder.MakeCompound(comp);
QList< Handle(Feature)>featureHandleList = this->GetObjModel()->FeatureCollection(); //获取模型中的所有特征
//遍历特征获取每个特征的TopoShape
for (Handle(Feature)featureHandle:featureHandleList)
{
TopoDS_Shape shape = featureHandle->GetShape();
//将TopoDS_Shape添加上网格,这里delection默认值是0.001,angle默认是0.5,详见源代码
BRepMesh_IncrementalMesh mesh(shape,deflection,false,angle);
mesh.Perform();
//将每个shape添加到compound中
builder.Add(comp,shape);
}
//转换文件
QByteArray arry = fileName.toUtf8().data();
Standard_CString cstring(arry.constData());
//导出stl文件
return stlWrite.Write(comp,cstring);
}
我将delfection的值修改为0.1,angle值为0.5,然后调用的代码为:
QString partName = workPart->GetName(); //工作部件的名称
//选择保存stl的文件地址
QString filename = QFileDialog::getSaveFileName(this, u8"另存为...", workDirPathString + "/" + partName + ".stl", tr("*.stl"));
if (filename.isEmpty())
{
return;
}
//导出stl文件,myoccmodel是基于OCAF创建的
myOccModel->WriteStl(filename,0.1,0.5);
导出后的文件为cest.stl,其大型为4663kb。
4、查看导出的结果
采用导入stl文件的方法,导入到工作部件中,其显示如下,导入的时间偏长些,目前还不知道咋解决导入时间长的问题。
5、结论
我只是能实现,但是还不知道是不是最好的方法,先用着再说吧, 后面再细致的研究。
文章来源:https://blog.csdn.net/yang19861007/article/details/134939682
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!