- Implemented vtk base for viewing

This commit is contained in:
bklronin
2024-07-04 22:58:52 +02:00
parent fcabe449f8
commit 9daf263aad
6 changed files with 989 additions and 51 deletions

88
main.py
View File

@@ -1,13 +1,14 @@
import uuid
import names
from PySide6.QtCore import Qt, QPoint
from PySide6.QtWidgets import QApplication, QMainWindow, QSizePolicy, QInputDialog
from Gui import Ui_fluencyCAD # Import the generated GUI module
from drawing_modules.gl_widget import OpenGLWidget
from drawing_modules.vtk_widget import VTKWidget
from drawing_modules.vysta_widget import PyVistaWidget
from drawing_modules.draw_widget2d import SketchWidget
from sdf import *
from python_solvespace import SolverSystem, ResultFlag
from mesh_modules import simple_mesh
# main, draw_widget, gl_widget
@@ -19,11 +20,11 @@ class MainWindow(QMainWindow):
self.ui = Ui_fluencyCAD()
self.ui.setupUi(self)
self.openGLWidget = OpenGLWidget()
self.custom_3D_Widget = VTKWidget()
layout = self.ui.gl_box.layout()
layout.addWidget(self.openGLWidget)
layout.addWidget(self.custom_3D_Widget)
size_policy = QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding)
#self.openGLWidget.setSizePolicy(size_policy)
#self.custom_3D_Widget.setSizePolicy(size_policy)
self.sketchWidget = SketchWidget()
layout2 = self.ui.sketch_tab.layout() # Get the layout of self.ui.gl_canvas
@@ -40,10 +41,10 @@ class MainWindow(QMainWindow):
#self.ui.pb_apply_code.pressed.connect(self.check_current_tab)
self.ui.sketch_list.currentItemChanged.connect(self.on_item_changed)
self.ui.sketch_list.itemChanged.connect(self.view_update)
self.ui.sketch_list.itemChanged.connect(self.draw_mesh)
### Sketches
self.ui.pb_origin_wp.pressed.connect(self.add_wp_origin)
self.ui.pb_origin_wp.pressed.connect(self.add_new_sketch)
self.ui.pb_nw_sktch.pressed.connect(self.add_sketch)
self.ui.pb_del_sketch.pressed.connect(self.del_sketch)
@@ -65,7 +66,8 @@ class MainWindow(QMainWindow):
self.sketchWidget.constrain_done.connect(self.draw_op_complete)
def add_wp_origin(self):
def add_new_sketch(self):
self.sketchWidget.clear_sketch()
self.sketchWidget.create_workplane()
def act_line_mode(self):
@@ -124,13 +126,24 @@ class MainWindow(QMainWindow):
self.sketchWidget.mouse_mode = None
self.sketchWidget.reset_buffers()
def view_update(self):
print("Update")
def calc_sketch_projection_3d(self, depth):
name = self.ui.sketch_list.currentItem().text()
#print("selected_for disp", name)
model = self.model['sketch'][name]['sketch_points']
#print("sketch points from model", model)
simp_mesh = simple_mesh.generate_mesh(model, depth)
print("Generated model", simp_mesh)
self.custom_3D_Widget. load_interactor_mesh(simp_mesh) #draw_interactor(simp_mesh)
def draw_mesh(self):
#print("Update")
name = self.ui.body_list.currentItem().text()
print("selected_for disp", name)
#print("selected_for disp", name)
model = self.model['operation'][name]['sdf_object']
mesh = model.generate(samples=2**12)
self.openGLWidget.load_mesh_direct(mesh)
mesh = model.generate()
#print("Mesh sdf", mesh)
#self.custom_3D_Widget.render_from_points_direct_with_faces(mesh)
self.custom_3D_Widget.render_from_points_direct_with_faces(mesh)
def on_item_changed(self, current_item, previous_item):
if current_item:
@@ -138,16 +151,25 @@ class MainWindow(QMainWindow):
#self.view_update()
print(f"Selected item: {name}")
def add_sketch(self):
points_for_poly = []
name = f"sketch-{str(names.get_first_name())}"
def convert_points_for_sdf(self):
points_for_sdf = []
for point_to_poly in self.sketchWidget.slv_points_main:
points_for_poly.append(self.translate_points_tup(point_to_poly['ui_point']))
points_for_sdf.append(self.translate_points_tup(point_to_poly['ui_point']))
return points_for_sdf
def add_sketch(self):
name = f"sketch-{str(names.get_first_name())}"
points_for_sdf = self.convert_points_for_sdf()
element = {
'id': name,
'type': 'polygon',
'sketch_points': points_for_poly,
'type': 'sketch',
'point_list': self.sketchWidget.slv_points_main,
'line_list': self.sketchWidget.slv_lines_main,
'sketch_points': points_for_sdf,
'solver': self.sketchWidget.solv
}
self.model['sketch'][element['id']] = element
@@ -162,10 +184,15 @@ class MainWindow(QMainWindow):
def edit_sketch(self):
name = self.ui.sketch_list.currentItem().text()
self.sketchWidget.clear_sketch()
points = self.model['sketch'][name]['sketch_points']
print("points", points)
self.sketchWidget.set_points(points)
#self.sketchWidget.clear_sketch()
self.sketchWidget.slv_points_main = self.model['sketch'][name]['point_list']
self.sketchWidget.slv_lines_main = self.model['sketch'][name]['line_list']
self.sketchWidget.solv = self.model['sketch'][name]['solver']
self.sketchWidget.update()
print("model",self.model)
print("widget", self.sketchWidget.slv_points_main)
def del_sketch(self):
print("Deleting")
@@ -217,7 +244,7 @@ class MainWindow(QMainWindow):
self.ui.body_list.takeItem(row) # Remove the item from the list widget
self.model['operation'].pop(item_name) # Remove the item from the operation dictionary
print(f"Removed operation: {item_name}")
self.openGLWidget.clear_mesh()
self.custom_3D_Widget.clear_mesh()
def translate_points_tup(self, point: QPoint):
"""QPoints from Display to mesh data
@@ -240,8 +267,11 @@ class MainWindow(QMainWindow):
length, ok = QInputDialog.getDouble(self, 'Extrude Length', 'Enter a mm value:', decimals=2)
#TODO : Implement cancel
#Create and draw Interactor
geo = Geometry()
f = geo.extrude_shape(points, length)
name_op = f"extrd-{name}"
element = {
'id': name_op,
@@ -251,11 +281,11 @@ class MainWindow(QMainWindow):
print(element)
self.model['operation'][name_op] = element
self.ui.body_list.addItem(name_op)
items = self.ui.body_list.findItems(name_op, Qt.MatchExactly)[0]
self.ui.body_list.setCurrentItem(items)
self.view_update()
self.draw_mesh()
#self.calc_sketch_projection_3d(length)
def send_cut(self):
name = self.ui.body_list.currentItem().text()
@@ -278,13 +308,13 @@ class MainWindow(QMainWindow):
self.ui.body_list.addItem(name_op)
items = self.ui.sketch_list.findItems(name_op, Qt.MatchExactly)
self.ui.body_list.setCurrentItem(items[-1])
self.view_update()
self.draw_mesh()
else:
print("mindestens 2!")
def load_and_render(self, file):
self.openGLWidget.load_stl(file)
self.openGLWidget.update()
self.custom_3D_Widget.load_stl(file)
self.custom_3D_Widget.update()
class Geometry:
def distance(self, p1, p2):