VS+QT+VTK 3차원 표면 메쉬 포인트 선택 절단

주요 프로그램 예

VS+QT+VTK 3차원 표면 메쉬 포인트 선택 절단

운영 환경을 설치하거나 원격 디버깅이 필요한 경우 기사 하단의 개인 QQ 명함을 참조하면 전문 기술 인력이 원격으로 지원합니다!

머리말

이 블로그는 <<VS+QT+VTK 3D 표면 메시 점 선택>>에 대한 코드를 작성합니다. 코드는 깔끔하고 규칙적이며 읽기 쉽습니다. 학습 및 응용 추천을 위한 첫 번째 선택.

기능: 3D 그리드 데이터를 읽고 그리드 표면을 클릭하여 절단할 부분을 선택합니다 .


기사 디렉토리

1. 필수 도구 소프트웨어

2. 사용 단계

        1. 라이브러리 가져오기

        2. 코드 구현

        3. 러닝 결과

3. 온라인 지원

1. 필수 도구 소프트웨어

1. VS, Qt

2. VTK

2. 사용 단계

1. 라이브러리 가져오기

#include <iostream>
#include <fstream>
#include <vtkSelectPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkDataSetMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRendererCollection.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkIdTypeArray.h>
#include <vtkPolyData.h>
#include <vtkCellArray.h>
#include <vtkSphereSource.h>
#include <vtkCellPicker.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkProperty.h>
#include <vtkSelectionNode.h>
#include <vtkSelection.h>
#include <vtkExtractSelection.h>
#include <vtkObjectFactory.h>
#include <vtkPointData.h>
#include <iostream>
#include <vector>

2. 코드 구현

아래와 같이 코드 쇼:

class CellPickerInteractorStyle : public vtkInteractorStyleTrackballCamera
{
public:
	static CellPickerInteractorStyle* New();

	CellPickerInteractorStyle()
	{
		selectedMapper = vtkSmartPointer<vtkDataSetMapper>::New();
		selectedActor = vtkSmartPointer<vtkActor>::New();
		polyData = vtkPolyData::New();

		//xvec.resize(5);
		//yvec.resize(5);
		//zvec.resize(5);
		last_picked_actor = NULL;
	}

	virtual void OnLeftButtonDown()
	{
		//打印鼠标左键像素位置
		if (this->Interactor->GetControlKey())
		{
			std::cout << "Picking pixel: " << this->Interactor->GetEventPosition()[0]
				<< " " << this->Interactor->GetEventPosition()[1] << std::endl;
			//注册拾取点函数
			this->Interactor->GetPicker()->Pick(
				this->Interactor->GetEventPosition()[0],
				this->Interactor->GetEventPosition()[1], 0,  // always zero.
				this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()
			);
			//打印拾取点空间位置
			this->Interactor->GetPicker()->GetPickPosition(picked);
			cout << "Picked value: " << picked[0] << " " << picked[1] << " " << picked[2] << endl;

			//获取此次的标记点。
			this->last_picked_actor = GetActor();
			markPoint.push_back(last_picked_actor);
			if (this->last_picked_actor)
			{
				//标记出来
				this->last_picked_actor->SetScale(0.02);
				this->last_picked_actor->GetProperty()->SetColor(1.0, 0.0, 0.0);
				this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer()->AddActor(this->last_picked_actor);
			}

		}
		vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
	}


};

int main(int, char* [])
{

	// Read a stl file.
	reader1->SetFileName("bunny.stl");
	reader1->Update();
	TheStlPoly->DeepCopy(reader1->GetOutput());

	// Create a mapper and actor
	vtkSmartPointer<vtkPolyDataMapper> mapper =
		vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputData(TheStlPoly);

	actor->SetMapper(mapper);
	actor->GetProperty()->SetOpacity(1);

	// Create a renderer, render window, and interactor
	vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
	vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();

	renderWindow->Render();
	renderWindow->SetWindowName("PointPicker");
	renderWindow->AddRenderer(renderer);
	vtkNew<vtkNamedColors> colors;
	renderer->SetBackground(colors->GetColor3d("CadetBlue").GetData());
	vtkSmartPointer<CellPickerInteractorStyle> pointPicker = vtkSmartPointer<CellPickerInteractorStyle>::New();
	vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	renderWindowInteractor->SetInteractorStyle(pointPicker);
	renderWindowInteractor->SetRenderWindow(renderWindow);


	// Add the actor to the scene
	renderer->AddActor(actor);
	//renderer->SetBackground(0, 0, 0);

	// Render and interact
	renderWindow->Render();
	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}

3. 러닝 결과

 

3. 온라인 지원:

운영 환경을 설치하거나 원격 디버깅이 필요한 경우 기사 하단의 개인 QQ 명함을 참조하면 전문 기술 인력이 원격으로 지원합니다! 1) 원격 설치 및 운영 환경, 코드 디버깅 2) Qt, C++, Python 진입 가이드 3) 인터페이스 미화 4) 소프트웨어 제작



현재 기사 링크: Python+Qt 데스크탑 및 웹페이지 휴먼 고객 서비스 커뮤니케이션 도구_alicema1111의 블로그-CSDN 블로그

Blogger 추천 기사: Python 얼굴 인식 통계 qt 양식 - CSDN Blog

Blogger 추천 기사: Python Yolov5 화염 연기 인식 소스 코드 공유 - CSDN Blog

                         Python OpenCV는 보행자 출입구에 출입하는 사람의 수를 인식합니다 - Python은 사람의 수를 인식합니다 - CSDN Blog

개인 블로그 홈페이지: alicema1111's blog_CSDN 블로그 - 웹 페이지 분야의 Python, C++, 블로거

모든 블로거의 기사를 보려면 여기를 클릭하십시오 . alicema1111's blog_CSDN 블로그-Python, C++, 웹 페이지 분야의 블로거

추천

출처blog.csdn.net/alicema1111/article/details/131480076