diff --git a/drawing_modules/draw_widget_solve.py b/drawing_modules/draw_widget_solve.py index 834a0ed..4a1d8e4 100644 --- a/drawing_modules/draw_widget_solve.py +++ b/drawing_modules/draw_widget_solve.py @@ -37,6 +37,10 @@ class SketchWidget(QWidget): self.sketch.id = sketch_in.id self.sketch.origin = sketch_in.origin + def set_sketch(self, sketch_in): + """Needs to be an already defined Sketch object coming from the widget itself""" + self.sketch = sketch_in + def get_sketch(self): return self.sketch diff --git a/drawing_modules/vtk_widget.py b/drawing_modules/vtk_widget.py index 2c3a4da..1d0beb3 100644 --- a/drawing_modules/vtk_widget.py +++ b/drawing_modules/vtk_widget.py @@ -31,6 +31,7 @@ class VTKWidget(QtWidgets.QWidget): self.displayed_normal_actors = [] self.body_actors_orig = [] self.projected_mesh_actors = [] + self.interactor_actors = [] self.flip_toggle = False @@ -273,6 +274,7 @@ class VTKWidget(QtWidgets.QWidget): # Add the actor to the scene self.renderer.AddActor(actor) + self.interactor_actors.append(actor) mapper.Update() self.vtk_widget.GetRenderWindow().Render() @@ -724,6 +726,11 @@ class VTKWidget(QtWidgets.QWidget): for edge_line in self.picked_edge_actors: self.renderer_indicators.RemoveActor(edge_line) + def clear_actors_interactor(self): + ### Clear the outline of the mesh + for interactor in self.interactor_actors: + self.renderer.RemoveActor(interactor) + def compute_projection(self, direction_invert: bool = False): # Compute the normal from the two selected edges ) diff --git a/main.py b/main.py index 69ee514..fc05fd5 100644 --- a/main.py +++ b/main.py @@ -18,7 +18,6 @@ from dataclasses import dataclass, field # main, draw_widget, gl_widget - class ExtrudeDialog(QDialog): def __init__(self, parent=None): super().__init__(parent) @@ -255,6 +254,11 @@ class MainWindow(QMainWindow): """ sketch = Sketch() sketch_from_widget = self.sketchWidget.get_sketch() + + #Save original for editing later + sketch.original_sketch = sketch_from_widget + + #Get parameters points = sketch_from_widget.points sketch.convert_points_for_sdf(points) @@ -279,6 +283,9 @@ class MainWindow(QMainWindow): self.ui.sketch_list.setCurrentItem(items) def on_compo_change(self): + self.custom_3D_Widget.clear_body_actors() + self.custom_3D_Widget.clear_actors_interactor() + compo_id = self.get_activated_compo() if compo_id is not None: self.ui.sketch_list.clear() @@ -294,14 +301,22 @@ class MainWindow(QMainWindow): for body in self.project.timeline[compo_id].bodies: self.ui.body_list.addItem(body) - def edit_sketch(self): - name = self.ui.sketch_list.currentItem().text() + item = self.ui.body_list.findItems(body , Qt.MatchExactly)[0] + self.ui.body_list.setCurrentItem(item) + self.draw_mesh() + selected = self.ui.body_list.currentItem() + name = selected.text() + + edges = self.project.timeline[compo_id].bodies[name].interactor.edges + offset_vec = self.project.timeline[compo_id].bodies[name].interactor.offset_vector + self.custom_3D_Widget.load_interactor_mesh(edges, offset_vec) + + def edit_sketch(self): selected = self.ui.sketch_list.currentItem() name = selected.text() - # TODO: add selected element from timeline - sel_compo = self.project.timeline[-1] - sketch = sel_compo.sketches[name] + sel_compo = self.project.timeline[self.get_activated_compo()] + sketch = sel_compo.sketches[name].original_sketch self.sketchWidget.set_sketch(sketch) @@ -401,6 +416,7 @@ class MainWindow(QMainWindow): self.sketchWidget.reset_buffers() def draw_mesh(self): + name = self.ui.body_list.currentItem().text() print("selected_for disp", name) @@ -495,13 +511,13 @@ class MainWindow(QMainWindow): ### Interactor interactor = Interactor() interactor.add_lines_for_interactor(sketch.interactor_lines) + interactor.invert = invert if not invert: edges = interactor_mesh.generate_mesh(interactor.lines, 0, length) else: edges = interactor_mesh.generate_mesh(interactor.lines, 0, -length) - body.interactor = interactor sel_compo.bodies[name_op] = body offset_vector = interactor.vector_to_centroid(None, centroid, normal) @@ -509,6 +525,10 @@ class MainWindow(QMainWindow): if len(offset_vector) == 0 : offset_vector = [0, 0, 0] + interactor.edges = edges + interactor.offset_vector = offset_vector + body.interactor = interactor + self.custom_3D_Widget.load_interactor_mesh(edges, offset_vector) self.ui.body_list.addItem(name_op) @@ -518,13 +538,23 @@ class MainWindow(QMainWindow): self.draw_mesh() def send_cut(self): - name = self.ui.body_list.currentItem().text() + """name = self.ui.body_list.currentItem().text() points = self.model['operation'][name]['sdf_object'] - self.list_selected.append(points) + sel_compo = self.project.timeline[self.get_activated_compo()] + points = sel_compo.bodies[]. + self.list_selected.append(points)""" + + selected = self.ui.body_list.currentItem() + name = selected.text() + + sel_compo = self.project.timeline[self.get_activated_compo()] + # print(sel_compo) + body = sel_compo.bodies[name] + # print(sketch) + self.list_selected.append(body.sdf_body) if len(self.list_selected) == 2: - geo = Geometry() - f = geo.cut_shapes(self.list_selected[0], self.list_selected[1] ) + f = difference(self.list_selected[0], self.list_selected[1]) # equivalent element = { 'id': name, @@ -532,13 +562,22 @@ class MainWindow(QMainWindow): 'sdf_object': f, } + # Create body element and assign known stuff name_op = f"cut-{name}" - self.model['operation'][name_op] = element + + body = Body() + body.id = name_op + body.sdf_body = f + + ## Add to component + sel_compo.bodies[name_op] = body + self.ui.body_list.addItem(name_op) items = self.ui.body_list.findItems(name_op, Qt.MatchExactly) self.ui.body_list.setCurrentItem(items[-1]) self.custom_3D_Widget.clear_body_actors() self.draw_mesh() + elif len(self.list_selected) > 2: self.list_selected.clear() else: @@ -612,6 +651,10 @@ class Code: @dataclass class Sketch: """All of the 2D Information of a sketches""" + + # Save the incomng sketch from the 2D widget for late redit + original_sketch = None + id = None # Space Information @@ -761,6 +804,8 @@ class Interactor: lines = None faces = None body = None + offset_vector = None + edges = None def translate_points_tup(self, point: QPoint): """QPoints from Display to mesh data @@ -815,11 +860,6 @@ class Body: return f - def cut_shapes(self, sdf_object1, sdf_object2): - f = difference(sdf_object1, sdf_object2) # equivalent - - return f - class Output: def export_mesh(self, sdf_object): """FINAL EXPORT"""