VS+Qt+opencascade三维绘图stp/step/igs/stl格式图形读取显示

程序示例精选
VS+Qt+opencascade三维绘图stp/step/igs/stl格式图形读取显示
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《VS+Qt+opencascade三维绘图stp/step/igs/stl格式图形读取显示》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


运行结果


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. VS2019, Qt
       2. C++

二、使用步骤

代码如下(示例):

//#define WNT
#include <gp_Circ.hxx>
#include <gp_Elips.hxx>
#include <gp_Sphere.hxx>
#include <Poly_Polygon3D.hxx>
#include <Poly_Triangulation.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
#include <TopTools_HSequenceOfShape.hxx>
#include <BRepBuilderAPI_MakeVertex.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <IGESControl_Controller.hxx>
#include <IGESControl_Writer.hxx>
#include <IGESControl_Reader.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS.hxx>
#include <BRep_Tool.hxx>
#include <XBRepMesh.hxx>
#include <BRepMesh_IncrementalMesh.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepAdaptor_Curve.hxx>
#include <GCPnts_TangentialDeflection.hxx>
#include <TopExp_Explorer.hxx>
#include <Standard_TypeDef.hxx>
#include <vtkRenderer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkProperty.h>
#include <vtkTriangle.h>
void BuildMesh(vtkRenderer* render, const TopoDS_Face& face, double deflection = 0.1)
{
	TopLoc_Location location;
	//BRepMesh::Mesh(face, deflection);该函数已经弃用
	BRepMesh_IncrementalMesh(face, deflection);

	Handle_Poly_Triangulation triFace = BRep_Tool::Triangulation(face, location);
	Standard_Integer nTriangles = triFace->NbTriangles();
	gp_Pnt vertex1;
	gp_Pnt vertex2;
	gp_Pnt vertex3;
	Standard_Integer nVertexIndex1 = 0;
	Standard_Integer nVertexIndex2 = 0;
	Standard_Integer nVertexIndex3 = 0;
	TColgp_Array1OfPnt nodes(1, triFace->NbNodes());
	Poly_Array1OfTriangle triangles(1, triFace->NbTriangles());
	nodes = triFace->Nodes();
	triangles = triFace->Triangles();
	vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
	vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New();
	vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
	points->Allocate(nTriangles * 3);
	cells->Allocate(nTriangles);
	int id = 0;
	for (Standard_Integer i = 1; i <= nTriangles; i++)
	{
		Poly_Triangle aTriangle = triangles.Value(i);
		aTriangle.Get(nVertexIndex1, nVertexIndex2, nVertexIndex3);
		vertex1 = nodes.Value(nVertexIndex1).Transformed(location.Transformation());
		vertex2 = nodes.Value(nVertexIndex2).Transformed(location.Transformation());
		vertex3 = nodes.Value(nVertexIndex3).Transformed(location.Transformation());
		points->InsertNextPoint(vertex1.X(), vertex1.Y(), vertex1.Z());
		points->InsertNextPoint(vertex2.X(), vertex2.Y(), vertex2.Z());
		points->InsertNextPoint(vertex3.X(), vertex3.Y(), vertex3.Z());
		vtkSmartPointer<vtkTriangle> triangle = vtkSmartPointer<vtkTriangle>::New();
		triangle->GetPointIds()->SetId(0, id * 3);
		triangle->GetPointIds()->SetId(1, id * 3 + 1);
		triangle->GetPointIds()->SetId(2, id * 3 + 2);
		// Add the triangle to a cell array
		cells->InsertNextCell(triangle);
		id++;
	}
	polyData->SetPoints(points);
	polyData->SetPolys(cells);
	vtkSmartPointer<vtkPolyDataMapper> sourceMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	//setInput函数已经弃用,使用SetInputData()
	sourceMapper->SetInputData(polyData);

	vtkSmartPointer<vtkActor> sourceActor = vtkSmartPointer<vtkActor>::New();
	sourceActor->SetMapper(sourceMapper);
	sourceActor->GetProperty()->SetColor(1, 0, 0);
	render->AddActor(sourceActor);
}
void BuildScene(vtkRenderer* renderer, Handle(TopTools_HSequenceOfShape)& aHSequenceOfShape)
{
	Standard_Integer index = aHSequenceOfShape->Length();
	TopoDS_Shape theCompSolid = aHSequenceOfShape->ChangeValue(index);
	}
}
//这里添加三行代码
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);
VTK_MODULE_INIT(vtkInteractionStyle);

int main(void)

{
	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
	renderWindow->AddRenderer(renderer);
	Standard_Integer status = ReadIGES("cylinder.igs", aHSequenceOfShape);
	cout << "return status:" << status << endl;
	BuildScene(renderer, aHSequenceOfShape);
	renderer->SetBackground(1, 1, 1);
	// Render and interact
	renderWindow->Render();
	renderWindowInteractor->Start();
	return 0;

}



运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个使用 OpenCASCADEQt 开发的简单三维显示程序的示例代码: ```cpp #include <QApplication> #include <QWidget> #include <Aspect_Handle.hxx> #include <Graphic3d_GraphicDriver.hxx> #include <OpenGl_GraphicDriver.hxx> #include <V3d_Viewer.hxx> #include <V3d_View.hxx> int main(int argc, char *argv[]) { // 创建 Qt 应用程序 QApplication app(argc, argv); // 创建 Qt 窗口 QWidget window; window.resize(800, 600); window.show(); // 获取窗口的原生句柄 Aspect_Handle hWindow = reinterpret_cast<Aspect_Handle>(window.winId()); // 创建 OpenCASCADE 图形驱动程序 Handle(Graphic3d_GraphicDriver) aGraphicDriver = new OpenGl_GraphicDriver(); // 创建三维视窗 Handle(V3d_Viewer) aViewer = new V3d_Viewer(aGraphicDriver); Handle(V3d_View) aView = aViewer->CreateViewFromWindow("MyView", hWindow); // 设置视窗参数 aView->SetBackgroundColor(Quantity_NOC_GRAY60); aView->MustBeResized(); aView->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_WHITE, 0.08, V3d_ZBUFFER); // 循环显示视窗,直到应用程序退出 while (!app.quitOnLastWindowClosed()) { aView->Redraw(); app.processEvents(); } return app.exec(); } ``` 这个示例代码演示了如何在一个 Qt 窗口中创建一个简单的三维视窗,并设置视窗的背景颜色和坐标轴显示。您可以根据需要自定义窗口的大小和其他参数。 要运行此代码,您需要先安装 QtOpenCASCADE 库,并将其与您的 C++ 项目链接。请确保您已正确配置 QtOpenCASCADE 的环境。 请注意,这只是一个简单的示例,用于说明如何在 Qt 中集成 OpenCASCADE三维显示功能。在实际开发中,您可能需要更多的代码来处理用户交互、加载模型文件、添加其他功能等。希望这个示例对您有所帮助!如果您有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荷塘月色2

您的鼓励将是我创作最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值