- Basic 2D projection
This commit is contained in:
75
main.py
75
main.py
@@ -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!")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user