全国设计公司排行榜黄冈seo
一、概述
1、vtkFeatureEdges是VTK中的一个过滤器类,用于从输入的多边形数据(vtkPolyData)中提取特征边(Feature Edge)。特征边通常是指几何模型中的边界边、非流行边、锐边或轮廓边等。
2、vtkFeatureEdges是一个非常有用的工具,特别适合用于几何处理、模型分析和可视化任务中。通过提取特征边,可以更好地理解和处理复制地几何模型。
二、主要功能
1、提取特征边
(1)边界边(Boundary Edges):只被一个多半形使用地边,或者直线单元
(2)非流行边(Non-Manifold Edges):被三个以上地多变形共用地边
(3)特征边(Feature Edges):被两个三角形使用且二面角大于特征角地边
(4)流行边(Mainifold Edges):只被两个多边形使用地边
2、可定制性
(1)可以通过设置角度阈值来控制特征边地提取
(2)可以选择提取特定类型地边
三、常用方法
1、BoundaryEdgesOn、BoundaryEdgesOff
开启或禁用边界边的提取
2、FeatureEdgesOn、FeatureEdgesOff
开启或禁用特征边的提取
3、ManifoldEdgesOn、ManifoldEdgesOff
开启或禁用流行边的提取
4、NonManifoldEdgesOn、NonManifoldEdgesOff
开启或禁用非流行边的提取
5、ColoringOn、ColoringOff
启用或禁用边的颜色区分
6、SetFeatureAngle(double angle)
设置特征边的角度阈值
7、update()
执行过滤器并生成输出
四、示例
#include <vtkActor.h>
#include <vtkDiskSource.h>
#include <vtkFeatureEdges.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkInteractorStyleTrackballCamera.h>#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);int main(int argc, char *argv[])
{vtkNew<vtkNamedColors> colors;//环vtkNew<vtkDiskSource> diskSource;diskSource->Update();// 创建特征边过滤器vtkNew<vtkFeatureEdges> featureEdges;featureEdges->SetInputConnection(diskSource->GetOutputPort());featureEdges->BoundaryEdgesOn(); //启用边界边的提取featureEdges->FeatureEdgesOff(); //启用特征边的提取featureEdges->ManifoldEdgesOff(); //禁用流形边的提取featureEdges->NonManifoldEdgesOff(); //禁用非流形边的提取featureEdges->ColoringOn(); //启用边的颜色区分featureEdges->Update(); //执行过滤器并生成输出vtkNew<vtkPolyDataMapper> edgeMapper;edgeMapper->SetInputConnection(featureEdges->GetOutputPort());edgeMapper->SetScalarModeToUseCellData();vtkNew<vtkPolyDataMapper> diskMapper;diskMapper->SetInputConnection(diskSource->GetOutputPort());vtkNew<vtkActor> edgeActor;edgeActor->SetMapper(edgeMapper.Get());vtkNew<vtkActor> diskActor;diskActor->SetMapper(diskMapper.Get());vtkNew<vtkRenderer> renderer;vtkNew<vtkRenderWindow> renderWindow;renderWindow->AddRenderer(renderer.Get());renderWindow->SetWindowName("BoundaryEdges");vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;renderWindowInteractor->SetRenderWindow(renderWindow.Get());vtkNew<vtkInteractorStyleTrackballCamera> camera;renderWindowInteractor->SetInteractorStyle(camera);renderer->AddActor(edgeActor.Get());renderer->AddActor(diskActor.Get());renderer->SetBackground(0,0,0);renderWindow->Render();renderWindowInteractor->Start();return EXIT_SUCCESS;
}