【OCC学习3】OCC与VTK整合

 OCC只是几何内核,显示的话还需整合其他组件。今天介绍与VTK整合。本人是OCC、VTK初学者,代码部分也没整明白,主要介绍Visual Studio配置。

1. 本文采用的工具版本:

  1. OCC 7.6.0
  2. VisualStudio 2022
  3. Vtk-6.1.0

2. 全部代码。

今天主要介绍如何让这段代码跑起来。

#include <BRepPrimAPI_MakeBox.hxx>
#include <vtkRenderWindow.h>
#include <vtkNew.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkAutoInit.h>
#include <vtkRenderer.h>
#include <vtkPolyDataMapper.h>

#include <IVtkTools_ShapeDataSource.hxx>

VTK_MODULE_INIT(vtkRenderingOpenGL)
VTK_MODULE_INIT(vtkInteractionStyle)

int main()
{
	BRepPrimAPI_MakeBox mkBox(1., 2., 3.);
	const TopoDS_Shape& shape = mkBox.Shape(); 

	vtkNew<vtkRenderWindow>  renwin;
	vtkNew<vtkRenderer> ren;
	renwin->AddRenderer(ren.Get());

	vtkNew<vtkInteractorStyleTrackballCamera> istyle;
	vtkNew<vtkRenderWindowInteractor> iren;

	iren->SetRenderWindow(renwin.Get());
	iren->SetInteractorStyle(istyle.Get());

	vtkNew<IVtkTools_ShapeDataSource> occsource;
	occsource->SetShape(new IVtkOCC_Shape( shape));

	vtkNew<vtkPolyDataMapper> mapper;

	mapper->SetInputConnection(occsource->GetOutputPort());

	vtkNew<vtkActor> actor;
	actor->SetMapper(mapper.Get());
	ren->AddActor(actor.Get());

	renwin->Render();
	iren->Start();

	return 0;
} 

3. Visual Studio配置

  1. 在Visual Studio中配置OCC的头文件、VTK的头文件;
  2. 配置附加库目录,包括OCC、VTK的库目录;
  3. 配置附加依赖项,如果不知道怎么根据链接错误找lib库,可使用Far Manager查找;
    TKTopAlgo.lib
    TKPrim.lib
    vtkRenderingCore-6.1.lib
    vtkInteractionStyle-6.1.lib
    vtkCommonCore-6.1.lib
    vtkRenderingOpenGL-6.1.lib
    vtkCommonExecutionModel-6.1.lib
    TKV3d.lib
    TKIVtk.lib

    4. 配置调试PATH环境变量。PATH变量中需增加OCC、VTK、TBB、Openvr、freeimage、ffmpeg库的dll目录。官网编译好的包包含这些库的,可直接下载。配置好运行应该可以看到一个立方体。

参考资料:

https://www.youtube.com/watch?v=kZpr4ocnavAhttps://www.youtube.com/watch?v=kZpr4ocnavA

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
OCC造型库中,可以使用BRepAlgoAPI_Common.hxx头文件中的BRepAlgoAPI_Common类来计算两个线段的交点。具体实现步骤如下: 1. 定义两个线段对象,可以使用BRepBuilderAPI_MakeEdge类来创建线段,也可以从已有的形状中提取线段。 2. 创建BRepAlgoAPI_Common对象,并将两个线段对象传递给它的构造函数。 3. 调用BRepAlgoAPI_Common的Build()方法,该方法返回一个BRepAlgoAPI_CommonBuilder对象。 4. 使用BRepAlgoAPI_CommonBuilder的FirstVertex()方法获取交点。 下面是一个简单的示例代码: ``` #include <BRepBuilderAPI_MakeEdge.hxx> #include <BRepAlgoAPI_Common.hxx> int main() { // 创建两个线段对象 gp_Pnt p1(0, 0, 0); gp_Pnt p2(1, 1, 1); BRepBuilderAPI_MakeEdge edge1(p1, p2); gp_Pnt p3(0, 1, 0); gp_Pnt p4(1, 0, 1); BRepBuilderAPI_MakeEdge edge2(p3, p4); // 创建BRepAlgoAPI_Common对象 BRepAlgoAPI_Common common(edge1, edge2); // 计算交点 BRepAlgoAPI_CommonBuilder builder(common); TopoDS_Vertex intersection = builder.FirstVertex(); // 输出交点坐标 if (!intersection.IsNull()) { Standard_Real x, y, z; gp_Pnt point = BRep_Tool::Pnt(intersection); point.Coord(x, y, z); std::cout << "Intersection point: (" << x << ", " << y << ", " << z << ")" << std::endl; } return 0; } ``` 在这个例子中,我们创建了两个线段对象edge1和edge2,它们的端点分别为p1、p2和p3、p4。然后,我们将这两个线段传递给BRepAlgoAPI_Common类的构造函数,创建了common对象。接着,我们创建了一个BRepAlgoAPI_CommonBuilder对象builder,并使用它的FirstVertex()方法获取了交点。最后,我们输出了交点的坐标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值