Wxwei
12 months ago
5 changed files with 699 additions and 0 deletions
@ -0,0 +1,19 @@ |
|||||
|
from PyQt5.QtCore import * |
||||
|
|
||||
|
class ConstrainedOpt(QThread): |
||||
|
signal_update_voxels = pyqtSignal(str) |
||||
|
|
||||
|
def __init__(self, model,index): |
||||
|
QThread.__init__(self) |
||||
|
self.model = model['model'] |
||||
|
# self.model = model |
||||
|
self.name = model['name'] |
||||
|
|
||||
|
self.index = index |
||||
|
|
||||
|
def run(self): |
||||
|
# while True: |
||||
|
self.update_voxel_model() |
||||
|
|
||||
|
def update_voxel_model(self): |
||||
|
self.signal_update_voxels.emit('update_voxels') |
@ -0,0 +1,14 @@ |
|||||
|
import sys |
||||
|
import qdarkstyle |
||||
|
from gui_main import MainWindow |
||||
|
from PyQt5.QtWidgets import * |
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
app = QApplication(sys.argv) |
||||
|
desktopWidget = QApplication.desktop() |
||||
|
screenRect = desktopWidget.screenGeometry() |
||||
|
app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) |
||||
|
window = MainWindow(screenRect.width(),screenRect.height()) |
||||
|
window.setWindowTitle("model_view") |
||||
|
window.show() |
||||
|
sys.exit(app.exec_()) |
@ -0,0 +1,354 @@ |
|||||
|
import os |
||||
|
import scipy.io as sio |
||||
|
|
||||
|
from gui_viewer import * |
||||
|
from ConstrainedOpt import ConstrainedOpt |
||||
|
|
||||
|
from PyQt5.QtWidgets import * |
||||
|
from PyQt5.QtCore import * |
||||
|
from PyQt5.QtGui import * |
||||
|
|
||||
|
import sys |
||||
|
import qdarkstyle |
||||
|
|
||||
|
class MySubWindow(QMdiSubWindow): |
||||
|
signal_save_image = pyqtSignal(str) |
||||
|
|
||||
|
class MainWindow(QMainWindow): |
||||
|
signal_save_images = pyqtSignal(str) |
||||
|
signal_setCamera = pyqtSignal(float, float, float) |
||||
|
|
||||
|
def __init__(self, width, height, parent=None): |
||||
|
QMainWindow.__init__(self, parent) |
||||
|
self.width = width |
||||
|
self.height = height |
||||
|
self.resize(width, height) |
||||
|
self.mdi_Area = QMdiArea() |
||||
|
self.mdi_Area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) |
||||
|
self.mdi_Area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) |
||||
|
|
||||
|
self.camerax = 0 |
||||
|
self.cameray = 0 |
||||
|
self.cameraz = 0 |
||||
|
|
||||
|
self.files = list() |
||||
|
self.models = list() |
||||
|
self.models_count = 0 |
||||
|
|
||||
|
self.setCentralWidget(self.mdi_Area) |
||||
|
|
||||
|
self.mdi_Win = list() |
||||
|
self.frame = list() |
||||
|
self.viewerWidget = list() |
||||
|
|
||||
|
self.banch = 8 |
||||
|
self.current_index = -1 |
||||
|
|
||||
|
self.file_ind = 0 |
||||
|
|
||||
|
# create openAction |
||||
|
openAction = QAction("&Open", self) |
||||
|
openAction.setShortcut(QKeySequence.Open) |
||||
|
openAction.setToolTip("Open files") |
||||
|
openAction.setStatusTip("Open files") |
||||
|
openAction.triggered.connect(self.open_file) |
||||
|
|
||||
|
openoneAction = QAction("&Openone", self) |
||||
|
openoneAction.setShortcut(QKeySequence.Open) |
||||
|
openoneAction.setToolTip("Open a file") |
||||
|
openoneAction.setStatusTip("Open a file") |
||||
|
openoneAction.triggered.connect(self.open_one_file) |
||||
|
|
||||
|
# preAction = QAction("&PreGroup", self) |
||||
|
# preAction.setShortcut(QKeySequence.Open) |
||||
|
# preAction.setToolTip("Show pre group model") |
||||
|
# preAction.setStatusTip("Show pre group model") |
||||
|
# preAction.triggered.connect(self.pre_group) |
||||
|
# # self.connect(preAction, SIGNAL("triggered()"), self.pre_group) |
||||
|
|
||||
|
nextAction = QAction("&NextGroup", self) |
||||
|
nextAction.setShortcut(QKeySequence.Open) |
||||
|
nextAction.setToolTip("Show next group model") |
||||
|
nextAction.setStatusTip("Show next group model") |
||||
|
nextAction.triggered.connect(self.next_group) |
||||
|
|
||||
|
saveAction = QAction("&SaveAll", self) |
||||
|
saveAction.setShortcut(QKeySequence.Open) |
||||
|
saveAction.setToolTip("Save all models as Image") |
||||
|
saveAction.setStatusTip("Save all models as Image") |
||||
|
saveAction.triggered.connect(self.save_group) |
||||
|
|
||||
|
saveOneAction = QAction("&SaveCurrent", self) |
||||
|
saveOneAction.setShortcut(QKeySequence.Open) |
||||
|
saveOneAction.setToolTip("Save current model") |
||||
|
saveOneAction.setStatusTip("Save current model") |
||||
|
saveOneAction.triggered.connect(self.save_one) |
||||
|
|
||||
|
# create toolbar |
||||
|
toolbar = self.addToolBar("tool") |
||||
|
toolbar.setMovable(False) |
||||
|
toolbar.setObjectName("ToolBar") |
||||
|
toolbar.addAction(openAction) |
||||
|
toolbar.addAction(openoneAction) |
||||
|
toolbar.addAction(nextAction) |
||||
|
toolbar.addAction(saveAction) |
||||
|
toolbar.addAction(saveOneAction) |
||||
|
|
||||
|
# toolbar.addAction(preAction) |
||||
|
|
||||
|
def closeEvent(self, event): |
||||
|
for i in range(len(self.mdi_Win)): |
||||
|
self.mdi_Win[i].opt_engine.quit() |
||||
|
|
||||
|
def open_all_file_for_model(self, file_name): |
||||
|
mat_list = [] |
||||
|
dir_name = "" |
||||
|
for i in range (5): |
||||
|
file_path = dir_name + file_name + "_" + str(i) + ".mat" |
||||
|
data = sio.loadmat(file_path) |
||||
|
mat_list.append(data) |
||||
|
|
||||
|
|
||||
|
def get_object_model(self, dir_path): |
||||
|
mat_file_list = [] |
||||
|
transform_file_list = [] |
||||
|
for file_name in os.listdir(dir_path): |
||||
|
if file_name.endswith('.mat'): |
||||
|
mat_file_list.append(file_name) |
||||
|
elif file_name.endswith('.txt'): |
||||
|
transform_file_list.append(file_name) |
||||
|
|
||||
|
if len(mat_file_list) != len(transform_file_list): |
||||
|
raise KeyError("The number of mat files don't match the number of transform files") |
||||
|
|
||||
|
label_list = [] |
||||
|
for mat_file in mat_file_list: |
||||
|
cur_label = mat_file[-5: -4] |
||||
|
label_list.append(cur_label) |
||||
|
|
||||
|
if len(mat_file_list[0]) == 5 and mat_file_list[0][0].isdigit(): |
||||
|
testing_samples = True |
||||
|
else: |
||||
|
testing_samples = False |
||||
|
|
||||
|
models = [] |
||||
|
cur_file_name = mat_file_list[0][0:-6] |
||||
|
for cur_label in label_list: |
||||
|
c_label = int(cur_label) |
||||
|
|
||||
|
if testing_samples: |
||||
|
current_mat_file_name = "%d.mat" % (c_label) |
||||
|
current_transform_file_name = "%d_transform_info.txt" % (c_label) |
||||
|
else: |
||||
|
current_transform_file_name = "%s_%d_transform_info.txt" % (cur_file_name, c_label) |
||||
|
current_mat_file_name = "%s_%d.mat" % (cur_file_name, c_label) |
||||
|
|
||||
|
part_name = "%s_%d" % (cur_file_name, c_label) |
||||
|
|
||||
|
current_mat_file_path = "%s/%s" % (dir_path, current_mat_file_name) |
||||
|
current_transform_file_path = "%s/%s" % (dir_path, current_transform_file_name) |
||||
|
|
||||
|
file = open(current_transform_file_path, 'r') |
||||
|
|
||||
|
is_bbox_vector = False |
||||
|
is_min_max_value = False |
||||
|
|
||||
|
file_lines = file.readlines() |
||||
|
for line in file_lines: |
||||
|
if line == "\r\n": |
||||
|
is_bbox_vector = False |
||||
|
is_min_max_value = False |
||||
|
continue |
||||
|
if line.find("vector for representation") != -1: |
||||
|
is_min_max_value = True |
||||
|
is_bbox_vector = False |
||||
|
continue |
||||
|
if line.find("Min_Max Value") != -1: |
||||
|
is_bbox_vector = False |
||||
|
is_min_max_value = True |
||||
|
continue |
||||
|
if is_bbox_vector: |
||||
|
value_list = line.split(' ') |
||||
|
if is_min_max_value: |
||||
|
line = line.strip() |
||||
|
line = line.strip(' \t\n\r') |
||||
|
value_list = line.split(' ') |
||||
|
break |
||||
|
|
||||
|
translate_vector = [float(value_list[0]), float(value_list[1]), float(value_list[2])] |
||||
|
|
||||
|
value_list[3] = abs(float(value_list[3])) |
||||
|
value_list[4] = abs(float(value_list[4])) |
||||
|
value_list[5] = abs(float(value_list[5])) |
||||
|
|
||||
|
min_max_value_list = [(float(value_list[0]) - float(value_list[3]) / 2), |
||||
|
(float(value_list[1]) - float(value_list[4]) / 2), |
||||
|
(float(value_list[2]) - float(value_list[5]) / 2), |
||||
|
(float(value_list[0]) + float(value_list[3]) / 2), |
||||
|
(float(value_list[1]) + float(value_list[4]) / 2), |
||||
|
(float(value_list[2]) + float(value_list[5]) / 2)] |
||||
|
|
||||
|
# These three values represent the length, width, height of a bounding box |
||||
|
dim_list = [float(value_list[3]), float(value_list[4]), float(value_list[5])] |
||||
|
|
||||
|
mat_data = sio.loadmat(current_mat_file_path) |
||||
|
array = mat_data['voxels3D'] |
||||
|
model = {'name': part_name, 'model': array, 'translate_vector': translate_vector, |
||||
|
'dim_vecetor': dim_list, 'min_max_value': min_max_value_list} |
||||
|
models.append(model) |
||||
|
|
||||
|
model_dict = {'name': cur_file_name, 'model': models} |
||||
|
# self.models.append(model_dict) |
||||
|
|
||||
|
return model_dict |
||||
|
|
||||
|
def open_one_file(self): |
||||
|
self.models_count = 0 |
||||
|
dir_ = QFileDialog.getExistingDirectory(None, 'Select a folder:', '.', QFileDialog.ShowDirsOnly) |
||||
|
self.files.append(dir_) |
||||
|
|
||||
|
model_dict = self.get_object_model(dir_) |
||||
|
self.models.append(model_dict) |
||||
|
self.models_count = 1 |
||||
|
self.current_index = self.current_index + 1 |
||||
|
self.banch = 1 |
||||
|
self.view_model() |
||||
|
|
||||
|
def open_file(self): |
||||
|
self.banch = 8 |
||||
|
self.models_count = 0 |
||||
|
dir_ = QFileDialog.getExistingDirectory(None, 'Select a folder:', '.', QFileDialog.ShowDirsOnly) |
||||
|
for filename in os.listdir(dir_): |
||||
|
self.files.append(dir_ + '/' + filename) |
||||
|
obj_names = [f_path for f_path in os.listdir(dir_) if os.path.isdir(os.path.join(dir_, f_path))] |
||||
|
obj_names.sort() |
||||
|
|
||||
|
# fileList contains all the file pathes beyond a certain category |
||||
|
obj_file_pathes = [os.path.join(dir_, f_path) for f_path in obj_names if os.path.isdir(os.path.join(dir_, f_path))] |
||||
|
self.files = obj_file_pathes |
||||
|
|
||||
|
if obj_names[0].find('iter_') != -1: |
||||
|
def key_word(item): |
||||
|
return int(item.split('_')[-1]) |
||||
|
|
||||
|
self.files.sort(key=key_word) |
||||
|
|
||||
|
for idx in range(0, self.banch): |
||||
|
if (len(self.files) > 0): |
||||
|
obj_file_path = self.files.pop() |
||||
|
obj_file_path = obj_file_path.strip(' \t\n\r') |
||||
|
print( 'current path: ' + obj_file_path) |
||||
|
model_dict = self.get_object_model(obj_file_path) |
||||
|
self.models.append(model_dict) |
||||
|
self.models_count = self.models_count + 1 |
||||
|
|
||||
|
self.current_index = 0 |
||||
|
self.banch = self.models_count |
||||
|
self.view_model() |
||||
|
|
||||
|
# TODO This function is important |
||||
|
def view_model(self): |
||||
|
start = self.current_index |
||||
|
banch = self.banch |
||||
|
end = start + banch |
||||
|
|
||||
|
width = (self.width * 2 / 8) * 0.95 |
||||
|
height = (self.height / 2) * 0.95 |
||||
|
mainWidth = width + 10 |
||||
|
mainHeight = height + 10 |
||||
|
self.setWindowTitle("model_view models_count:" + str(len(self.files))) |
||||
|
|
||||
|
for index in range(start, end): |
||||
|
if (len(self.models) <= 0): |
||||
|
break |
||||
|
# Obtain one new model to display |
||||
|
model = self.models.pop() |
||||
|
# Update the number of models to show |
||||
|
self.models_count = self.models_count - 1 |
||||
|
# Add one more sub-frame to the main window |
||||
|
self.frame.append(QFrame()) |
||||
|
self.mdi_Win.append(MySubWindow()) |
||||
|
self.mdi_Win[index].opt_engine = ConstrainedOpt(model, index) |
||||
|
self.mdi_Win[index].setWindowTitle("model_" + model['name']) |
||||
|
self.mdi_Win[index].setGeometry(0, 0, mainWidth, mainHeight) |
||||
|
|
||||
|
self.viewerWidget.append( |
||||
|
GUIViewer(self.frame[index], self.mdi_Win[index].opt_engine)) |
||||
|
self.viewerWidget[index].resize(width, height) |
||||
|
|
||||
|
viewerBox = QVBoxLayout() |
||||
|
viewerBox.addWidget(self.viewerWidget[index]) |
||||
|
self.frame[index].setLayout(viewerBox) |
||||
|
self.mdi_Win[index].setWidget(self.frame[index]) |
||||
|
|
||||
|
self.viewerWidget[index].interactor.Initialize() |
||||
|
|
||||
|
self.mdi_Win[index].opt_engine.signal_update_voxels.connect(self.viewerWidget[index].update_actor) |
||||
|
self.mdi_Win[index].signal_save_image.connect(self.viewerWidget[index].save_image2) |
||||
|
self.signal_save_images.connect(self.viewerWidget[index].save_image1) |
||||
|
|
||||
|
self.mdi_Win[index].opt_engine.start() |
||||
|
self.mdi_Area.addSubWindow(self.mdi_Win[index]) |
||||
|
self.mdi_Win[index].show() |
||||
|
print('success') |
||||
|
|
||||
|
# def pre_group(self): |
||||
|
# self.current_index = self.current_index - self.banch |
||||
|
# if self.current_index < 0: |
||||
|
# self.current_index = 0 |
||||
|
# for i in range(len(self.mdi_Win)): |
||||
|
# self.mdi_Win[i].close() |
||||
|
# self.mdi_Win[:] = [] |
||||
|
# self.frame[:] = [] |
||||
|
# self.viewerWidget[:] = [] |
||||
|
# self.view_model() |
||||
|
# # self.models_count = 0 |
||||
|
|
||||
|
def next_group(self): |
||||
|
self.banch = 8 |
||||
|
for i in range(len(self.mdi_Win)): |
||||
|
self.mdi_Win[i].close() |
||||
|
self.mdi_Win[:] = [] |
||||
|
self.frame[:] = [] |
||||
|
self.viewerWidget[:] = [] |
||||
|
self.models[:] = [] |
||||
|
|
||||
|
for idx in range(0, self.banch): |
||||
|
if (len(self.files) > 0): |
||||
|
file_path = self.files.pop() |
||||
|
print( 'current path: ' + file_path) |
||||
|
file_path = file_path.strip(' \t\n\r') |
||||
|
model_dict = self.get_object_model(file_path) |
||||
|
self.models.append(model_dict) |
||||
|
self.models_count = 1 + self.models_count |
||||
|
|
||||
|
self.current_index = 0 |
||||
|
self.banch = self.models_count |
||||
|
self.view_model() |
||||
|
|
||||
|
def save_group(self): |
||||
|
file_path = QFileDialog.getExistingDirectory(self, "Open a folder", ".", QFileDialog.ShowDirsOnly) |
||||
|
self.signal_save_images.emit(file_path) |
||||
|
|
||||
|
def save_one(self): |
||||
|
self.mdi_Area.currentSubWindow().signal_save_image.emit('save_image') |
||||
|
|
||||
|
def setCamera(self): |
||||
|
self.camerax = float(unicode(self.valuex.text())) |
||||
|
self.cameray = float(unicode(self.valuey.text())) |
||||
|
self.cameraz = float(unicode(self.valuez.text())) |
||||
|
valuex = self.camerax |
||||
|
valuey = self.cameray |
||||
|
valuez = self.cameraz |
||||
|
self.signal_setCamera.emit(valuex, valuey, valuez) |
||||
|
|
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
app = QApplication(sys.argv) |
||||
|
desktopWidget = QApplication.desktop() |
||||
|
screenRect = desktopWidget.screenGeometry() |
||||
|
app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) |
||||
|
window = MainWindow(screenRect.width(),screenRect.height()) |
||||
|
window.setWindowTitle("model_view") |
||||
|
window.show() |
||||
|
sys.exit(app.exec_()) |
Binary file not shown.
@ -0,0 +1,312 @@ |
|||||
|
import vtk |
||||
|
from PyQt5.QtWidgets import * |
||||
|
# import PyQt5 |
||||
|
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor |
||||
|
|
||||
|
class Color: |
||||
|
def __init__(self, r, g, b, alpha): |
||||
|
self.r = r |
||||
|
self.g = g |
||||
|
self.b = b |
||||
|
self.a = alpha |
||||
|
|
||||
|
class GUIViewer(QVTKRenderWindowInteractor): |
||||
|
def __init__(self, parent, engine): |
||||
|
QVTKRenderWindowInteractor.__init__(self, parent) |
||||
|
|
||||
|
self.part_num = 0 |
||||
|
self.part_list = [] |
||||
|
self.point_list = [] |
||||
|
self.color_list = [] |
||||
|
self.glyph3D_list = [] |
||||
|
|
||||
|
self.engine = engine |
||||
|
self.resetCamera = True |
||||
|
self.renderer = vtk.vtkRenderer() |
||||
|
self.GetRenderWindow().AddRenderer(self.renderer) |
||||
|
self.interactor = self.GetRenderWindow().GetInteractor() |
||||
|
self.create_actor() |
||||
|
|
||||
|
self.renderer.SetBackground(255, 255, 255) |
||||
|
camera = self.renderer.GetActiveCamera() |
||||
|
camera.SetViewUp(0.5, 0, 0) |
||||
|
camera.SetPosition(0.1245, 0.1139, 0.2932) |
||||
|
self.renderer.SetActiveCamera(camera) |
||||
|
|
||||
|
transform = vtk.vtkTransform() |
||||
|
transform.Translate(0.0, 0.0, 0.0) |
||||
|
|
||||
|
axes = vtk.vtkAxesActor() |
||||
|
# The axes are positioned with a user transform |
||||
|
axes.SetUserTransform(transform) |
||||
|
|
||||
|
|
||||
|
def create_voxel(self): |
||||
|
numberOfVertices = 8 |
||||
|
|
||||
|
points = vtk.vtkPoints() |
||||
|
points.InsertNextPoint(0, 0, 0) |
||||
|
points.InsertNextPoint(1, 0, 0) |
||||
|
points.InsertNextPoint(0, 1, 0) |
||||
|
points.InsertNextPoint(1, 1, 0) |
||||
|
points.InsertNextPoint(0, 0, 1) |
||||
|
points.InsertNextPoint(1, 0, 1) |
||||
|
points.InsertNextPoint(0, 1, 1) |
||||
|
points.InsertNextPoint(1, 1, 1) |
||||
|
|
||||
|
voxel = vtk.vtkVoxel() |
||||
|
for i in range(0, numberOfVertices): |
||||
|
voxel.GetPointIds().SetId(i, i) |
||||
|
|
||||
|
ugrid = vtk.vtkUnstructuredGrid() |
||||
|
ugrid.SetPoints(points) |
||||
|
ugrid.InsertNextCell(voxel.GetCellType(), voxel.GetPointIds()) |
||||
|
|
||||
|
gfilter = vtk.vtkGeometryFilter() |
||||
|
gfilter.SetInputData(ugrid) |
||||
|
gfilter.Update() |
||||
|
return gfilter |
||||
|
|
||||
|
def create_actor(self): |
||||
|
self.part_num = len(self.engine.model) |
||||
|
for i in range(self.part_num): |
||||
|
# Set up point_list and color_list |
||||
|
self.point_list.append(vtk.vtkPoints()) |
||||
|
self.color_list.append(vtk.vtkUnsignedCharArray()) |
||||
|
self.color_list[i].SetName("colors") |
||||
|
self.color_list[i].SetNumberOfComponents(4) |
||||
|
|
||||
|
# Create polydata by setting up points information and color information |
||||
|
polydata = vtk.vtkPolyData() |
||||
|
polydata.SetPoints(self.point_list[i]) |
||||
|
polydata.GetPointData().SetScalars(self.color_list[i]) |
||||
|
|
||||
|
# create cell |
||||
|
voxel = self.create_voxel() |
||||
|
|
||||
|
# Set up Glyph3D data representation: color, data representation form, input data and et. |
||||
|
self.glyph3D_list.append(vtk.vtkGlyph3D()) |
||||
|
self.glyph3D_list[i].SetColorModeToColorByScalar() |
||||
|
# self.glyph3D_list[i].SetSource(voxel.GetOutput()) # Set up data representation form |
||||
|
self.glyph3D_list[i].SetSourceConnection(voxel.GetOutputPort()) # Set up data representation form |
||||
|
# self.glyph3D_list[i].SetInput(polydata) # Set input data |
||||
|
self.glyph3D_list[i].SetInputData(polydata) # Set input data |
||||
|
self.glyph3D_list[i].ScalingOff() |
||||
|
self.glyph3D_list[i].Update() |
||||
|
|
||||
|
# mapper |
||||
|
mapper = vtk.vtkPolyDataMapper() |
||||
|
# mapper.SetInput(self.glyph3D_list[i].GetOutput()) |
||||
|
mapper.SetInputConnection(self.glyph3D_list[i].GetOutputPort()) |
||||
|
|
||||
|
# actor |
||||
|
actor = vtk.vtkActor() |
||||
|
actor.SetMapper(mapper) |
||||
|
actor.GetProperty() |
||||
|
self.renderer.AddActor(actor) |
||||
|
self.part_list.append(actor) |
||||
|
|
||||
|
transform = vtk.vtkTransform() |
||||
|
transform.Translate(0.0, 0.0, 0.0) |
||||
|
axes = vtk.vtkAxesActor() |
||||
|
# The axes are positioned with a user transform |
||||
|
axes.SetUserTransform(transform) |
||||
|
|
||||
|
# the actual text of the axis label can be changed: |
||||
|
axes.SetXAxisLabelText("") |
||||
|
axes.SetYAxisLabelText("") |
||||
|
axes.SetZAxisLabelText("") |
||||
|
|
||||
|
# self.renderer.AddActor(axes) |
||||
|
|
||||
|
def set_bb_color(self, model, ind, n, x_zero_index, y_zero_index, z_zero_index, r, g, b): |
||||
|
# alpha = 255 |
||||
|
alpha = 173 |
||||
|
for i in range(len(model[0])): |
||||
|
self.point_list[ind].InsertNextPoint(0 - x_zero_index, 0 - y_zero_index, i - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, alpha) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(0 - x_zero_index, len(model[0]) - y_zero_index, i - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, alpha) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(len(model[0]) - x_zero_index, 0 - y_zero_index, i - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, alpha) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(len(model[0]) - x_zero_index, len(model[0]) - y_zero_index, |
||||
|
i - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, alpha) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(0 - x_zero_index, i - y_zero_index, 0 - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, alpha) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(0 - x_zero_index, i - y_zero_index, len(model[0]) - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, alpha) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(len(model[0]) - x_zero_index, i - y_zero_index, 0 - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, alpha) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(len(model[0]) - x_zero_index, i - y_zero_index, |
||||
|
len(model[0]) - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, alpha) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, 0 - y_zero_index, 0 - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, alpha) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, 0 - y_zero_index, len(model[0]) - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, 173) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, len(model[0]) - y_zero_index, 0 - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, 173) |
||||
|
n = n + 1 |
||||
|
|
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, len(model[0]) - y_zero_index, |
||||
|
len(model[0]) - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, r, g, b, 173) |
||||
|
n = n + 1 |
||||
|
|
||||
|
def update_actor(self): |
||||
|
models = self.engine.model |
||||
|
|
||||
|
colors = [] |
||||
|
colors.append(Color(241, 95, 45, 255)) # 0 |
||||
|
# colors.append(Color(246, 102, 39, 255)) # .........if(chair_2_legs),open this.......... # |
||||
|
colors.append(Color(0, 202, 122, 255)) # 1 |
||||
|
colors.append(Color(0, 141, 237, 255)) # 2 |
||||
|
colors.append(Color(36, 160, 191, 255)) # 3 |
||||
|
colors.append(Color(255, 130, 58, 255)) # 4 |
||||
|
colors.append(Color(140, 255, 128, 255)) # 5 |
||||
|
|
||||
|
for ind in range(len(models)): |
||||
|
self.point_list[ind].Reset() |
||||
|
self.color_list[ind].Reset() |
||||
|
|
||||
|
model = models[ind]['model'] |
||||
|
|
||||
|
part_name = models[ind]['name'] |
||||
|
part_label = int(part_name[-1]) |
||||
|
|
||||
|
translate_vector = models[ind]['translate_vector'] |
||||
|
dims_vector = models[ind]['dim_vecetor'] |
||||
|
|
||||
|
x_zero_index = 0 |
||||
|
y_zero_index = 0 |
||||
|
z_zero_index = 0 |
||||
|
|
||||
|
print( len(model[0]), len(model[0]), len(model[0])) |
||||
|
n = 0 |
||||
|
for i in range(len(model[0])): |
||||
|
for j in range(len(model[1])): |
||||
|
for k in range(len(model[2])): |
||||
|
c = model[i, j, k] |
||||
|
if c > 0.5: |
||||
|
if part_label == 0: |
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, j - y_zero_index, |
||||
|
k - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, 241, 95, 45, 200) |
||||
|
if part_label == 1: |
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, j - y_zero_index, |
||||
|
k - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, 0, 202, 122, 200) |
||||
|
if part_label == 2: |
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, j - y_zero_index, |
||||
|
k - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, 0, 141, 237, 200) |
||||
|
if part_label == 3: |
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, j - y_zero_index, |
||||
|
k - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, 36, 160, 191, 200) |
||||
|
if part_label == 4: |
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, j - y_zero_index, |
||||
|
k - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, 255, 130, 58, 200) |
||||
|
if part_label == 5: |
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, j - y_zero_index, |
||||
|
k - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, 140, 255, 128, 200) |
||||
|
if part_label == 6: |
||||
|
self.point_list[ind].InsertNextPoint(i - x_zero_index, j - y_zero_index, |
||||
|
k - z_zero_index) |
||||
|
self.color_list[ind].InsertTuple4(n, 200, 240, 255, 200) |
||||
|
n = n + 1 |
||||
|
pass |
||||
|
|
||||
|
self.set_bb_color(model, ind, n, x_zero_index, y_zero_index, z_zero_index, colors[part_label].r, colors[part_label].g, colors[part_label].b) |
||||
|
|
||||
|
trans = vtk.vtkTransform() |
||||
|
transformMatrix = vtk.vtkMatrix4x4() |
||||
|
for i in range(0, 4): |
||||
|
for j in range(0, 4): |
||||
|
if i == j and (i == 1 or i == 2 or i == 0): |
||||
|
transformMatrix.SetElement(i, j, float(dims_vector[i]) / 32.0) |
||||
|
elif j == 3 and i <= 2: |
||||
|
transformMatrix.SetElement(i, j, float(translate_vector[i]) - float(dims_vector[i]) / 2) |
||||
|
elif i == 3 and j == 3: |
||||
|
transformMatrix.SetElement(i, j, 1) |
||||
|
elif i == 3 and j <= 2: |
||||
|
transformMatrix.SetElement(i, j, 0) |
||||
|
trans.SetMatrix(transformMatrix) |
||||
|
self.part_list[ind].SetUserTransform(trans) |
||||
|
|
||||
|
print( translate_vector[0], translate_vector[1], translate_vector[2]) |
||||
|
|
||||
|
print( "part index: %r center: %r" % (ind, self.part_list[ind].GetCenter())) |
||||
|
print( "part index: %r position: %r" % (ind, self.part_list[ind].GetPosition())) |
||||
|
print( "part index: %r xRange: %r" % (ind, self.part_list[ind].GetXRange())) |
||||
|
print( "part index: %r length: %r" % (ind, self.part_list[ind].GetLength())) |
||||
|
print( "part index: %r translate_vector: %r" % (ind, translate_vector)) |
||||
|
print( "part index: %r dims_vector: %r" % (ind, dims_vector)) |
||||
|
|
||||
|
# self.glyph3D.Modified() |
||||
|
for i in range(len(self.glyph3D_list)): |
||||
|
self.glyph3D_list[i].Modified() |
||||
|
|
||||
|
if self.resetCamera: |
||||
|
self.renderer.ResetCamera() |
||||
|
|
||||
|
self.resetCamera = False |
||||
|
self.update() |
||||
|
QApplication.processEvents() |
||||
|
|
||||
|
for i in range(len(self.part_list)): |
||||
|
print( self.part_list[i].GetPosition()) |
||||
|
|
||||
|
|
||||
|
def save_image2(self): |
||||
|
file_path = QFileDialog.getSaveFileName(self, "saveFlle", str(self.engine.name) + ".png", |
||||
|
filter="png (*.png *.)") |
||||
|
current_file_path = file_path[0] |
||||
|
window_to_image_filter = vtk.vtkWindowToImageFilter() |
||||
|
# window_to_image_filter.SetInput(self.GetRenderWindow()) |
||||
|
window_to_image_filter.SetInput(self.GetRenderWindow()) |
||||
|
window_to_image_filter.Update() |
||||
|
writer = vtk.vtkPNGWriter() |
||||
|
# # writer.SetFileName(unicode(current_file_path)) |
||||
|
writer.SetFileName(str(current_file_path)) |
||||
|
writer.SetInputConnection(window_to_image_filter.GetOutputPort()) |
||||
|
writer.Write() |
||||
|
|
||||
|
def save_image1(self, file_path): |
||||
|
window_to_image_filter = vtk.vtkWindowToImageFilter() |
||||
|
# window_to_image_filter.SetInput(self.GetRenderWindow()) |
||||
|
window_to_image_filter.SetInput(self.GetRenderWindow()) |
||||
|
window_to_image_filter.Update() |
||||
|
writer = vtk.vtkPNGWriter() |
||||
|
# writer.SetFileName(unicode(file_path) + '/image_' + str(self.engine.index) + '.png') |
||||
|
writer.SetFileName(str(file_path) + '/image_' + str(self.engine.index) + '.png') |
||||
|
writer.SetInputConnection(window_to_image_filter.GetOutputPort()) |
||||
|
writer.Write() |
||||
|
|
||||
|
def set_camera(self, x, y, z): |
||||
|
camera = self.renderer.GetActiveCamera() |
||||
|
camera.SetViewUp(x, y, z) |
||||
|
self.renderer.SetActiveCamera(camera) |
Loading…
Reference in new issue