- Implemented vtk base for viewing
This commit is contained in:
88
main.py
88
main.py
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user