使用gmsh作为三维网格生成器 7.26

Gmsh是一个免费的带有内置前后期处理机制的三维有限元网格生成器。其设计的目标是要提供一个快速轻便的具有可控参数功能和先进的可视化能力的网格生成工具。Gmsh主要围绕四个单元:几何,网格,求解和后处理。这些可控参数的输入可以在交互式的图形界面方式,或在ASCII文本文件中使用gmsh自己的脚本语言得以实现。

打算采用OCCT建模->gmsh网格生成与求解->VTK显示的方式来做一个框架

 

OCC->gmsh几何信息输入:

gmsh使用occ作为几何内核 相应的操作类都在namespace gmsh::model::occ中 熟悉相关命令之后可以很方便的直接绘图

也可以直接传TopoDS_Shape值作为几何信息 亦支持STL BREP STEP和IGES等格式的输入

1 STL

STL文件用于表示三角形网格的文件格式 其文件格式非常简单 应用很广泛 是最多快速原型系统所应用的标准文件类型

STL的OCCT生成比较麻烦 原有的类是对三角化面片类Handle_PolyTriangulation进行操作 只能写一个面片的信息

方法为遍历三角化的各个网格 然后输出相应的几何信息

改写后传参为shape 对其中每个面进行遍历三角化后写信息

Standard_Boolean writeASCII(const TopoDS_Shape& shape,FILE* theFile,Handle(Message_ProgressIndicator)& theProgInd, double deflection)
{
	static const Standard_Integer IND_THRESHOLD = 1000; // increment the indicator every 1k triangles
	// note that space after 'solid' is necessary for many systems
	if (fwrite("solid \n", 1, 7, theFile) != 7)
	{
		return Standard_False;
	}
	for (TopExp_Explorer aFaceExplorer(shape, TopAbs_FACE); aFaceExplorer.More(); aFaceExplorer.Next()) {
		TopoDS_Face face = TopoDS::Face(aFaceExplorer.Current());
		TopLoc_Location location;
		BRepMesh_IncrementalMesh(face, deflection);
		Handle_Poly_Triangulation theMesh = BRep_Tool::Triangulation(face, location);
		char aBuffer[512];
		memset(aBuffer, 0, sizeof(aBuffer));

		Message_ProgressSentry aPS(theProgInd, "Triangles", 0,
			theMesh->NbTriangles(), IND_THRESHOLD);

		const TColgp_Array1OfPnt& aNodes = theMesh->Nodes();
		const Poly_Array1OfTriangle& aTriangles = theMesh->Triangles();
		const Standard_Integer NBTriangles = theMesh->NbTriangles();
		Standard_Integer anElem[3] = { 0, 0, 0 };
		for (Standard_Integer aTriIter = 1; aTriIter <= NBTriangles; ++aTriIter)
		{
			const Poly_Triangle& aTriangle = aTriangles(aTriIter);
			aTriangle.Get(anElem[0], anElem[1], anElem[2]);

			const gp_Pnt aP1 = aNodes(anElem[0]);
			const gp_Pnt aP2 = aNodes(anE
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值