【VTK】三角化3D物体的表面

在VTK的体系中,要正常将actor输出STL文件,需要相应的PolyData三角化。

    vSPNew( triangle, vtkTriangleFilter);
    triangle->SetInputData( polyData );
    triangle->Update();

在一些专业软件,比如Meshmixer中查看STL文件,如果有任何的“不和谐”都会被标注出来。
下图中的物体是用两个长方体拼凑而成的。因为存在共面,所以meshmixer用红线标注出来了。

在这里插入图片描述

相关的生成代码:
#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkActor.h>
#include <vtkConeSource.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkLight.h>
#include <vtkCamera.h>
#include <vtkActor2D.h>
#include <vtkPoints.h>
#include <vtkSTLWriter.h>
#include <vtkAppendPolyData.h>
#include <vtkAppendFilter.h>
#include <vtkDataSetSurfaceFilter.h>
#include <vtkSmoothPolyDataFilter.h>
#include <vtkPolyDataNormals.h>
#include <vtkCleanPolyData.h>
#include "tool.h"

using namespace std;

PointStruct getNormal(const PointStruct p1, const PointStruct p2, const PointStruct p3)
{
    PointStruct normal;
    PointStruct vec1( p1 - p3 );
    PointStruct vec2( p2 - p3 );
    vtkMath::Cross(vec1.point, vec2.point, normal.point);
    vtkMath::Normalize( normal.point );
    return normal;
}

PointStruct getNormal(const double *p1, const double *p2, const double *p3)
{
    PointStruct normal;
    PointStruct ps1( (double *)p1 );
    PointStruct ps2( (double *)p2 );
    PointStruct ps3( (double *)p3 );
    PointStruct vec1( ps1 - ps3 );
    PointStruct vec2( ps2 - ps3 );
    vtkMath::Cross(vec1.point, vec2.point, normal.point);
    vtkMath::Normalize( normal.point );
    return normal;
}

vtkSmartPointer<vtkCellArray> g_Poly =
        vtkSmartPointer<vtkCellArray>::New();
vtkSmartPointer<vtkPoints> g_Points =
        vtkSmartPointer<vtkPoints>::New();

void CreateVol1()
{
    vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值