Opencascad(C++)-导出整个模型到stl文件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


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、结论

我只是能实现,但是还不知道是不是最好的方法,先用着再说吧, 后面再细致的研究。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GimiGimmy

感谢打赏,需要交流学习的,私信

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值