재단 하 다
4199 단어 재단 하 다.VTKvtkClipPolyData
효과:
#include "stdafx.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkCylinder.h"
#include "vtkPlane.h"
#include "vtkImplicitBoolean.h"
#include "vtkPolyDataMapper.h"
#include "vtkSphereSource.h"
#include "vtkProperty.h"
#include "vtkClipPolyData.h"
#include "vtkTransformPolyDataFilter.h"
#include "vtkTransform.h"
#include "vtkInteractorStyleTrackballCamera.h"
int main()
{
vtkSphereSource *sphere=vtkSphereSource::New();
sphere->SetCenter(0,0,0);
sphere->SetRadius(10);
sphere->SetThetaResolution(40);
sphere->SetPhiResolution(40);
vtkCylinder *cylinder = vtkCylinder::New();//
cylinder->SetCenter(0,0,0);
cylinder->SetRadius(3);
vtkPlane *vPlane = vtkPlane::New();//
vPlane->SetOrigin(0, 0, 0);
vPlane->SetNormal(0, -1, 0);
vtkImplicitBoolean *cuted_cylinder = vtkImplicitBoolean::New();
cuted_cylinder->SetOperationTypeToIntersection();
cuted_cylinder->AddFunction(cylinder);
cuted_cylinder->AddFunction(vPlane);
vtkClipPolyData *clipper=vtkClipPolyData::New();
clipper->SetInputConnection(sphere->GetOutputPort());
clipper->SetClipFunction(cylinder);
clipper->GenerateClipScalarsOn();
clipper->GenerateClippedOutputOn();
clipper->SetValue(0.5);
vtkTransform *transform=vtkTransform::New();
transform->Translate(7,0,0);
vtkTransformPolyDataFilter *filter=vtkTransformPolyDataFilter::New();
filter->SetInputConnection(clipper->GetOutputPort());
filter->SetTransform(transform);
vtkClipPolyData *clipper2=vtkClipPolyData::New();
clipper2->SetInputConnection(filter->GetOutputPort());
clipper2->SetClipFunction(cuted_cylinder);
clipper2->GenerateClipScalarsOn();
clipper2->GenerateClippedOutputOn();
clipper2->SetValue(0.5);
vtkPolyDataMapper *map = vtkPolyDataMapper::New();
map->SetInputConnection(clipper2->GetOutputPort());
map->ScalarVisibilityOff();
vtkActor *actor = vtkActor::New();
actor->SetMapper(map);
actor->GetProperty()->SetColor(0,1,1);
//actor->GetProperty()->SetAmbientColor(0.4,0.5,0.6);
//actor->GetProperty()->SetDiffuseColor(0.8,0.6,0.2);
actor->RotateX(40);
vtkRenderer *ren = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(ren);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
ren->AddActor(actor);
ren->SetBackground(1, 1, 1);
renWin->SetSize(450, 450);
vtkInteractorStyleTrackballCamera *style=vtkInteractorStyleTrackballCamera::New();
iren->SetInteractorStyle(style);
iren->Initialize();
renWin->Render();
iren->Start();
}
그 중 1~14 줄 에는 해당 헤더 파일 이 포함 되 어 있다.
18~22 줄 은 하나의 공 을 정의 하고 원심 은 원점 에 있 으 며 반지름 은 10 이 며 경위 방향 을 설정 한 삼각 편 수 는 모두 40 이다.
24~26 줄 은 원기둥 의 은 함 수 를 정의 하고 반지름 을 3 으로 설정 하 며 중심 은 원점 에 있 습 니 다.vtk 에서 원기둥 은 함 수 는 길 이 를 설정 하지 않 았 습 니 다.그 방향 은 Y 축 방향 입 니 다.이곳 의 원기둥 은 방금 정 의 된 공 을 재단 하 는 데 사 용 됩 니 다.재단 효 과 는 공 을 뚫 고 양면 을 모두 재단 하 는 것 입 니 다.공의 한 면 만 자 르 려 면 반 개의 원기둥 을 사용 합 니 다.다음 28~30 줄 은 평면 을 정의 하고 평면 과 원기둥 으로 교차 하면 반 개의 원기둥 을 얻 을 수 있다.
32~35 줄 은 평면 과 원기둥 을 Bool 구 교 연산(SetOperation TypeToIntersection()을 통 해 반 개의 원기둥 의 은 함수 가 cuted 를 나타 낸다.cylinder,구 화 연산 이 라면 SetOperation TypeToUnion()을 사용 합 니 다.
37~42 줄 은 vtkClipPolyData 대상 clipper 를 정의 하고 입력 을 18~24 줄 로 설정 하여 만 든 공 으로 설정 합 니 다.재단 함 수 는 원통 cylinder 로 설정 하고 다음 3 줄 40~42 줄 은 쓸모 가 없 는 것 같 습 니 다.
위 에서 얻 은 것 은 단지 하나의 원기둥 으로 공 을 자 르 는 효과 일 뿐 이지 만,반 개의 원기둥 으로 자 르 는 효 과 를 동시에 나타 내기 위해 방금 자 른 재단 체 를 x 축 으로 일정한 위 치 를 이동 한 다음 에 방금 Bool 연산 으로 얻 은 반 개의 원기둥 으로 자 르 면 비교 하기 편리 하 다.기하학 적 대상 의 이동 에 대해 변환 transform 을 지정 한 다음 vtkTransformPolyDataFilter 대상 filter 를 정의 한 다음 filter 의 입력 을 이동 할 기하학 적 대상 으로 설정 하고 transform 으로 변환 해 야 합 니 다.44~48 줄 은 커트 볼 을 이동 시 켰 고 그 이동 결 과 는 filter 에 있 습 니 다.
49~54 줄 은 이동 한 후 얻 은 filter 를 새로운 재단 의 입력 으로 반 원통 cutedcylinder 는 재단 함 수 를 위해 재단 을 진행 하여 재단 결 과 를 얻 었 습 니 다 clipper 2
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python opencv 목표 영역 재단 기능 구현나 는 목표 구역 을 재단 해 야 한다.그렇지 않 으 면 후기 에 네트워크 를 훈련 할 때 전체 그림 이 너무 크 고 목표 구역 이 너무 작 아서 결과 가 좋 지 않 으 면 계 산 량 을 증가 시 킬 것 이다.인터넷...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.