- Basic 2D projection

This commit is contained in:
bklronin
2024-07-08 22:14:25 +02:00
parent 9daf263aad
commit 5ff48c0f5e
16 changed files with 967 additions and 826 deletions

75
main.py
View File

@@ -8,7 +8,8 @@ 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
from mesh_modules import simple_mesh, vesta_mesh, interactor_mesh
# main, draw_widget, gl_widget
@@ -44,7 +45,8 @@ class MainWindow(QMainWindow):
self.ui.sketch_list.itemChanged.connect(self.draw_mesh)
### Sketches
self.ui.pb_origin_wp.pressed.connect(self.add_new_sketch)
self.ui.pb_origin_wp.pressed.connect(self.add_new_sketch_origin)
self.ui.pb_origin_face.pressed.connect(self.add_new_sketch_wp)
self.ui.pb_nw_sktch.pressed.connect(self.add_sketch)
self.ui.pb_del_sketch.pressed.connect(self.del_sketch)
@@ -66,10 +68,21 @@ class MainWindow(QMainWindow):
self.sketchWidget.constrain_done.connect(self.draw_op_complete)
def add_new_sketch(self):
def add_new_sketch_origin(self):
self.sketchWidget.clear_sketch()
self.sketchWidget.create_workplane()
def add_new_sketch_wp(self):
self.sketchWidget.clear_sketch()
edges = [((-158.0, -20.0, -25.0), (286.0, -195.0, -25.0)), ((-158.0, -20.0, 25.0), (-158.0, -20.0, -25.0))]
#edges = self.custom_3D_Widget.access_selected_points
normal = self.custom_3D_Widget.selected_normal
self.sketchWidget.create_workplane_projected()
self.sketchWidget.create_proj_lines(edges)
#self.sketchWidget.create_workplane_space(edges, normal)
def act_line_mode(self):
if not self.ui.pb_linetool.isChecked():
self.sketchWidget.mouse_mode = 'line'
@@ -77,7 +90,6 @@ class MainWindow(QMainWindow):
self.sketchWidget.mouse_mode = None
self.sketchWidget.line_draw_buffer = [None, None]
def act_constrain_pt_pt_mode(self):
if not self.ui.pb_con_ptpt.isChecked():
self.sketchWidget.mouse_mode = 'pt_pt'
@@ -126,24 +138,24 @@ class MainWindow(QMainWindow):
self.sketchWidget.mouse_mode = None
self.sketchWidget.reset_buffers()
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 calc_sketch_projection_3d(self, lines, z_origin, depth):
print(f"Gemetries {lines}, {z_origin}, {depth}")
edges = interactor_mesh.generate_mesh(lines, z_origin, depth)
print("final_mesh", edges)
self.custom_3D_Widget.load_interactor_mesh(edges)
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()
#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)
vesta = vesta_mesh
model_data = vesta.generate_mesh_from_sdf(model, resolution=64, threshold=0)
vertices, faces = model_data
vesta.save_mesh_as_stl(vertices, faces, 'test.stl')
self.custom_3D_Widget.render_from_points_direct_with_faces(vertices, faces)
def on_item_changed(self, current_item, previous_item):
if current_item:
@@ -158,6 +170,19 @@ class MainWindow(QMainWindow):
return points_for_sdf
def convert_lines_for_interactor(self):
points_for_interact = []
for point_to_poly in self.sketchWidget.slv_lines_main:
start, end = point_to_poly['ui_points']
start_draw = self.translate_points_tup(start)
end_draw = self.translate_points_tup(end)
line = start_draw, end_draw
points_for_interact.append(line)
print("packed_lines", points_for_interact)
return points_for_interact
def add_sketch(self):
name = f"sketch-{str(names.get_first_name())}"
@@ -226,6 +251,7 @@ class MainWindow(QMainWindow):
print(f"Item '{item_name}' not found in either 'sketch' or 'operation' dictionary.")
else:
print("No item selected.")
def update_body(self):
pass
@@ -258,13 +284,12 @@ class MainWindow(QMainWindow):
selected = self.ui.sketch_list.currentItem()
name = selected.text()
points = self.model['sketch'][name]['sketch_points']
lines = self.convert_lines_for_interactor()
if points[-1] == points[0]:
#detect loop that causes problems in mesh generation
del points[-1]
print(points)
length, ok = QInputDialog.getDouble(self, 'Extrude Length', 'Enter a mm value:', decimals=2)
#TODO : Implement cancel
@@ -278,20 +303,20 @@ class MainWindow(QMainWindow):
'type': 'extrude',
'sdf_object': f,
}
print(element)
#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.draw_mesh()
#self.calc_sketch_projection_3d(length)
self.calc_sketch_projection_3d(lines, 0, length)
#self.draw_mesh()
def send_cut(self):
name = self.ui.body_list.currentItem().text()
points = self.model['operation'][name]['sdf_object']
self.list_selected.append(points)
print(self.list_selected)
#print(self.list_selected)
if len(self.list_selected) > 1:
geo = Geometry()
@@ -308,7 +333,7 @@ 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.draw_mesh()
#self.draw_mesh()
else:
print("mindestens 2!")