当前位置:网站首页>vtk 补洞 两种实现
vtk 补洞 两种实现
2022-08-06 02:25:00 【恋恋西风】
先说一下,这两种方式,现在感觉都有问题,就是补了之后,法线是错的;
补前

补后

方案:
1.提取边界边;2.运用联通性,依次选择边界环;3.边界环连接成面(1.取所有点,取中心点坐标(
xi / n,
yi / n,
zi / n);2.线单元的两个点与中心点形成面单元;3.将点与面单元赋值数据形成新的补洞面数据);4.面与之前的模型结合,clean后形成最终补洞模型。
#include <vtkFeatureEdges.h>
#include <vtkPolyDataConnectivityFilter.h>
vtkPolyData* GenerateHoleCover(vtkPolyData* edges)
{
vtkPolyData* cover = vtkPolyData::New();
vtkSmartPointer<vtkCellArray> polys = vtkSmartPointer<vtkCellArray>::New();
vtkSmartPointer<vtkFloatArray> scalars = vtkSmartPointer<vtkFloatArray>::New();
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkCleanPolyData> sur_filt = vtkSmartPointer<vtkCleanPolyData>::New();
sur_filt->SetInputData(edges);
sur_filt->Update();
points->DeepCopy(sur_filt->GetOutput()->GetPoints());
double centr[3] = { 0,0,0 };
for (int i = 0; i < points->GetNumberOfPoints(); i++)
{
for (int j = 0; j < 3; j++)
{
centr[j] += points->GetPoint(i)[j];
}
}
for (int j = 0; j < 3; j++)
{
centr[j] /= points->GetNumberOfPoints();
}
vtkIdType cnt_pt = points->InsertNextPoint(centr);
for (int i = 0; i < sur_filt->GetOutput()->GetNumberOfCells(); i++)
{
vtkCell *cell = sur_filt->GetOutput()->GetCell(i);
vtkIdType pts3[3];
pts3[0] = cell->GetPointId(0);
pts3[1] = cell->GetPointId(1);
pts3[2] = cnt_pt;
polys->InsertNextCell(3, pts3);
}
cover->SetPoints(points);
cover->SetPolys(polys);
return cover;
}
vtkPolyData* CloseSurface(vtkPolyData* shape)
{
vtkSmartPointer<vtkFeatureEdges> fe = vtkSmartPointer<vtkFeatureEdges>::New();
fe->SetInputData(shape);
fe->BoundaryEdgesOn();
fe->NonManifoldEdgesOff();
fe->FeatureEdgesOff();
fe->ManifoldEdgesOff();
fe->Update();
vtkSmartPointer<vtkPolyDataConnectivityFilter> connect
= vtkSmartPointer<vtkPolyDataConnectivityFilter>::New();
connect->SetInputData(fe->GetOutput());
connect->Update();
const int ncontours = connect->GetNumberOfExtractedRegions();
vtkSmartPointer<vtkAppendPolyData> append = vtkSmartPointer<vtkAppendPolyData>::New();
append->AddInputData(shape);
for (int i = 0; i < ncontours; i++)
{
connect->AddSpecifiedRegion(i);
connect->SetExtractionModeToSpecifiedRegions();
connect->Update();
vtkPolyData *edges = connect->GetOutput();
vtkPolyData* cover = GenerateHoleCover(edges);
append->AddInputData(cover);
cover->Delete();
connect->DeleteSpecifiedRegion(i);
}
append->Update();
vtkSmartPointer<vtkCleanPolyData> cleaner = vtkSmartPointer<vtkCleanPolyData>::New();
cleaner->SetInputData(append->GetOutput());
cleaner->Update();
vtkPolyData *result = vtkPolyData::New();
result->DeepCopy(cleaner->GetOutput());
return result;
}第二种方式是 vtk demo
vtkNew<vtkFillHolesFilter> fillHolesFilter;
fillHolesFilter->SetInputData(polydata);
fillHolesFilter->SetHoleSize(100000.0);
fillHolesFilter->Update();边栏推荐
- map(自动排序的pair)——STL
- 2022强网杯-07-30-re-GameMaster
- Nanostar raises more than $200 million for battery material production
- codeforces 4A.watermelon
- 【hiflow】-- 腾讯云场景连接器实现定时查询疫情信息
- Wasabi Technologies adds Japanese and Australian executives to leadership team to support demand for hot cloud storage across Asia Pacific
- FTX.US将收购股票清算平台Embed,拓展股票交易业务
- NRF52840-QIAA-R Nordic BLE5.0蓝牙无线收发芯片
- 测试6年,从入行月薪6k到现在年薪40w,我总结了这些经验...
- 6、NeRF in the Wild
猜你喜欢

2022强网杯-07-30-re-GameMaster

基于Flask框架实现Mock Server

高数_复习_第2章:一元函数微分学

MySQL -- 安装部署环境(一键安装脚本)

心脑体漫画版本

Soul递交上市招股书,以技术为基石构建多元社交元宇宙

Case|Industrial Internet of Things Solutions•Industrial Internet Cloud Platform

Software Engineering - University Gymnasium Management System Class Diagram

【回顾】基于树莓派下的4G模块(EC200U-CN)实现远程控制短信的收发

mavonEditor 导航目录点击锚点定位功能只有在全屏编辑模式下才有效的问题
随机推荐
MSP430F5529(三)学习记录:芯片超频运行,超频后的串口使用
软件工程-大学体育馆管理系统交互图
ansible shell 模块
LeetCode Daily 2 Questions 01: Flip word prefixes (both 1200 questions)
WPF 截图控件之移除控件(九)「仿微信」
(状压dp)最短Hamilton路径
Decoding problem of serial communication between STM32 and K210 (based on punctual atomic source code)
codeforces 50A.Domino piling
关于近期轻量化部署任务的一个小结
IJCAI 2022 | 量化交易相关论文(附论文链接)
小程序的对象监听事件
【回顾】基于树莓派下的4G模块(EC200U-CN)实现远程控制短信的收发
币圈再次受攻击损失400万美元,9000多个钱包被破解
从采集到存储:时序数据库到底怎么处理时间?
SprinBoot集成JWT实现token验证拦截
淀粉与纤维素
网址收藏-技术类
C语言 : 文件的操作
Software Engineering - University Gymnasium Management System Class Diagram
mysql 高性能搭建1: Centos7+Mysql7.5搭建主从复制