import os
import vtk
import numpy as np
from tkinter import *
#右键选点,按下中键取消点的选择。按一次取消上一次选点,选取的点坐标和模型文件在同一个文件夹中
from tkinter import filedialog
import threading
def GetstlData(filename):
stlReader = vtk.vtkSTLReader()
stlReader.SetFileName(filename+".stl")
stlReader.Update()
data = stlReader.GetOutput()
print("nodes number:", data.GetNumberOfPoints())
if data.GetNumberOfPoints() == 0:
raise ValueError("No point data could be loaded from " + filename)
return None
return data
class interactor(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self,parent=None):
self.AddObserver("RightButtonPressEvent",self.RightButtonPressEvent)
self.AddObserver("MiddleButtonPressEvent", self.MiddleButtonPressEvent)
self.i=1
self.controlpoints={}
self.actor=[]
def RightButtonPressEvent(self, obj, event):
clickPos = self.GetInteractor().GetEventPosition()#得到二维图像点
#print("Picking pixel: ", clickPos)
# Pick from this location
picker = self.GetInteractor().GetPicker()#初始化picker动作
picker.Pick(clickPos[0], clickPos[1], 0, self.GetDefaultRenderer())#自己定义的渲染函数
value_list=[]
for j in range(len(self.controlpoints)):
value_list.append(self.controlpoints[j + 1])
value_list_1 = np.array(value_list)
np.savetxt(filename + ".txt",value_list_1)
# If CellId = -1, nothing was picked
if value_list.count(data.GetPoint(picker.GetPointId()))==0:
point_position = data.GetPoint(picker.GetPointId())
# print("Pick position is: ", picker.GetPickPosition())#选点的坐标
#print("Cell id is:", picker.GetCellId()
pointpicker
最新推荐文章于 2024-09-05 15:02:14 发布
本文详细介绍了PointPicker工具的使用方法,包括如何初始化、设置参数、获取选择的点坐标等,适合需要在地图上进行精确点选操作的开发者参考。
摘要由CSDN通过智能技术生成