- Drawing bodys depending on the selected compo
- Cut working - Edit sketch working
This commit is contained in:
parent
601121dc15
commit
f5861b8bd1
@ -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
|
||||
|
||||
|
@ -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 )
|
||||
|
74
main.py
74
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"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user