OCC 创建简单几何
2023-12-18 15:39:32
使用 OCC 创建 正方体和圆柱体,并且通过布尔运算,切除正方体内的圆柱体,保存 stl 几何模型。
#include <iostream>
#include <iomanip>
#include "BRepPrimAPI_MakeCylinder.hxx"
#include "BRepPrimAPI_MakeBox.hxx"
#include "BRepAlgoAPI_Cut.hxx"
#include "BRepGProp.hxx"
#include "STEPControl_Writer.hxx"
#include "GProp_GProps.hxx"
int main(int argc, char* argv[])
{
//创建 长 x 宽 x 高 100x100x50
gp_Pnt lowerLeftCornerOfBox(-50.0, -50.0, 0.0); // 位置点
BRepPrimAPI_MakeBox boxMaker(lowerLeftCornerOfBox, 100, 100, 50); // 长宽高
TopoDS_Shape box = boxMaker.Shape(); // 创建 box 形状
//创建圆柱 radius 25.0, height 50.0
BRepPrimAPI_MakeCylinder cylinderMaker(25.0, 50.0); // 创建圆柱
TopoDS_Shape cylinder = cylinderMaker.Shape(); // 创建 Cylinder 形状
// 剪切 box 里的圆柱部分
BRepAlgoAPI_Cut cutMaker(box, cylinder);
TopoDS_Shape boxWithHole = cutMaker.Shape(); // 创建 布尔运算之后的几何
//保存几何文件 STEP
STEPControl_Writer writer;
writer.Transfer(boxWithHole, STEPControl_AsIs);
writer.Write("boxWithHole.stp");
std::cout << "Created box with hole, file is written to boxWithHole.stp" << std::endl;
// 计算新几何的体积
GProp_GProps volumeProperties;
BRepGProp::VolumeProperties(boxWithHole, volumeProperties);
//计算体积
std::cout << std::setprecision(14) << "Volume of the model is: " << volumeProperties.Mass() << std::endl;
//计算质心
std::cout << "Center of mass is: " << volumeProperties.CentreOfMass().X() << " " << volumeProperties.CentreOfMass().Y() << " " << volumeProperties.CentreOfMass().Z() << std::endl;
//计算惯性矩阵
gp_Mat inertiaMatrix = volumeProperties.MatrixOfInertia();
std::cout << "Matrix of inertia: " << std::endl;
for (int i = 1; i <= 3; ++i) {
for (int j = 1; j <= 3; ++j) {
std::cout << inertiaMatrix(i, j) << "\t";
}
std::cout << std::endl;
}
return 0;
}
文章来源:https://blog.csdn.net/weixin_43862398/article/details/135062756
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!