- 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.id = sketch_in.id
|
||||||
self.sketch.origin = sketch_in.origin
|
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):
|
def get_sketch(self):
|
||||||
return self.sketch
|
return self.sketch
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ class VTKWidget(QtWidgets.QWidget):
|
|||||||
self.displayed_normal_actors = []
|
self.displayed_normal_actors = []
|
||||||
self.body_actors_orig = []
|
self.body_actors_orig = []
|
||||||
self.projected_mesh_actors = []
|
self.projected_mesh_actors = []
|
||||||
|
self.interactor_actors = []
|
||||||
|
|
||||||
self.flip_toggle = False
|
self.flip_toggle = False
|
||||||
|
|
||||||
@ -273,6 +274,7 @@ class VTKWidget(QtWidgets.QWidget):
|
|||||||
|
|
||||||
# Add the actor to the scene
|
# Add the actor to the scene
|
||||||
self.renderer.AddActor(actor)
|
self.renderer.AddActor(actor)
|
||||||
|
self.interactor_actors.append(actor)
|
||||||
|
|
||||||
mapper.Update()
|
mapper.Update()
|
||||||
self.vtk_widget.GetRenderWindow().Render()
|
self.vtk_widget.GetRenderWindow().Render()
|
||||||
@ -724,6 +726,11 @@ class VTKWidget(QtWidgets.QWidget):
|
|||||||
for edge_line in self.picked_edge_actors:
|
for edge_line in self.picked_edge_actors:
|
||||||
self.renderer_indicators.RemoveActor(edge_line)
|
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):
|
def compute_projection(self, direction_invert: bool = False):
|
||||||
|
|
||||||
# Compute the normal from the two selected edges )
|
# 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
|
# main, draw_widget, gl_widget
|
||||||
|
|
||||||
|
|
||||||
class ExtrudeDialog(QDialog):
|
class ExtrudeDialog(QDialog):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
@ -255,6 +254,11 @@ class MainWindow(QMainWindow):
|
|||||||
"""
|
"""
|
||||||
sketch = Sketch()
|
sketch = Sketch()
|
||||||
sketch_from_widget = self.sketchWidget.get_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
|
points = sketch_from_widget.points
|
||||||
|
|
||||||
sketch.convert_points_for_sdf(points)
|
sketch.convert_points_for_sdf(points)
|
||||||
@ -279,6 +283,9 @@ class MainWindow(QMainWindow):
|
|||||||
self.ui.sketch_list.setCurrentItem(items)
|
self.ui.sketch_list.setCurrentItem(items)
|
||||||
|
|
||||||
def on_compo_change(self):
|
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()
|
compo_id = self.get_activated_compo()
|
||||||
if compo_id is not None:
|
if compo_id is not None:
|
||||||
self.ui.sketch_list.clear()
|
self.ui.sketch_list.clear()
|
||||||
@ -294,14 +301,22 @@ class MainWindow(QMainWindow):
|
|||||||
for body in self.project.timeline[compo_id].bodies:
|
for body in self.project.timeline[compo_id].bodies:
|
||||||
self.ui.body_list.addItem(body)
|
self.ui.body_list.addItem(body)
|
||||||
|
|
||||||
def edit_sketch(self):
|
item = self.ui.body_list.findItems(body , Qt.MatchExactly)[0]
|
||||||
name = self.ui.sketch_list.currentItem().text()
|
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()
|
selected = self.ui.sketch_list.currentItem()
|
||||||
name = selected.text()
|
name = selected.text()
|
||||||
# TODO: add selected element from timeline
|
sel_compo = self.project.timeline[self.get_activated_compo()]
|
||||||
sel_compo = self.project.timeline[-1]
|
sketch = sel_compo.sketches[name].original_sketch
|
||||||
sketch = sel_compo.sketches[name]
|
|
||||||
|
|
||||||
self.sketchWidget.set_sketch(sketch)
|
self.sketchWidget.set_sketch(sketch)
|
||||||
|
|
||||||
@ -401,6 +416,7 @@ class MainWindow(QMainWindow):
|
|||||||
self.sketchWidget.reset_buffers()
|
self.sketchWidget.reset_buffers()
|
||||||
|
|
||||||
def draw_mesh(self):
|
def draw_mesh(self):
|
||||||
|
|
||||||
name = self.ui.body_list.currentItem().text()
|
name = self.ui.body_list.currentItem().text()
|
||||||
print("selected_for disp", name)
|
print("selected_for disp", name)
|
||||||
|
|
||||||
@ -495,13 +511,13 @@ class MainWindow(QMainWindow):
|
|||||||
### Interactor
|
### Interactor
|
||||||
interactor = Interactor()
|
interactor = Interactor()
|
||||||
interactor.add_lines_for_interactor(sketch.interactor_lines)
|
interactor.add_lines_for_interactor(sketch.interactor_lines)
|
||||||
|
interactor.invert = invert
|
||||||
|
|
||||||
if not invert:
|
if not invert:
|
||||||
edges = interactor_mesh.generate_mesh(interactor.lines, 0, length)
|
edges = interactor_mesh.generate_mesh(interactor.lines, 0, length)
|
||||||
else:
|
else:
|
||||||
edges = interactor_mesh.generate_mesh(interactor.lines, 0, -length)
|
edges = interactor_mesh.generate_mesh(interactor.lines, 0, -length)
|
||||||
|
|
||||||
body.interactor = interactor
|
|
||||||
sel_compo.bodies[name_op] = body
|
sel_compo.bodies[name_op] = body
|
||||||
|
|
||||||
offset_vector = interactor.vector_to_centroid(None, centroid, normal)
|
offset_vector = interactor.vector_to_centroid(None, centroid, normal)
|
||||||
@ -509,6 +525,10 @@ class MainWindow(QMainWindow):
|
|||||||
if len(offset_vector) == 0 :
|
if len(offset_vector) == 0 :
|
||||||
offset_vector = [0, 0, 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.custom_3D_Widget.load_interactor_mesh(edges, offset_vector)
|
||||||
|
|
||||||
self.ui.body_list.addItem(name_op)
|
self.ui.body_list.addItem(name_op)
|
||||||
@ -518,13 +538,23 @@ class MainWindow(QMainWindow):
|
|||||||
self.draw_mesh()
|
self.draw_mesh()
|
||||||
|
|
||||||
def send_cut(self):
|
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']
|
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:
|
if len(self.list_selected) == 2:
|
||||||
geo = Geometry()
|
f = difference(self.list_selected[0], self.list_selected[1]) # equivalent
|
||||||
f = geo.cut_shapes(self.list_selected[0], self.list_selected[1] )
|
|
||||||
|
|
||||||
element = {
|
element = {
|
||||||
'id': name,
|
'id': name,
|
||||||
@ -532,13 +562,22 @@ class MainWindow(QMainWindow):
|
|||||||
'sdf_object': f,
|
'sdf_object': f,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Create body element and assign known stuff
|
||||||
name_op = f"cut-{name}"
|
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)
|
self.ui.body_list.addItem(name_op)
|
||||||
items = self.ui.body_list.findItems(name_op, Qt.MatchExactly)
|
items = self.ui.body_list.findItems(name_op, Qt.MatchExactly)
|
||||||
self.ui.body_list.setCurrentItem(items[-1])
|
self.ui.body_list.setCurrentItem(items[-1])
|
||||||
self.custom_3D_Widget.clear_body_actors()
|
self.custom_3D_Widget.clear_body_actors()
|
||||||
self.draw_mesh()
|
self.draw_mesh()
|
||||||
|
|
||||||
elif len(self.list_selected) > 2:
|
elif len(self.list_selected) > 2:
|
||||||
self.list_selected.clear()
|
self.list_selected.clear()
|
||||||
else:
|
else:
|
||||||
@ -612,6 +651,10 @@ class Code:
|
|||||||
@dataclass
|
@dataclass
|
||||||
class Sketch:
|
class Sketch:
|
||||||
"""All of the 2D Information of a sketches"""
|
"""All of the 2D Information of a sketches"""
|
||||||
|
|
||||||
|
# Save the incomng sketch from the 2D widget for late redit
|
||||||
|
original_sketch = None
|
||||||
|
|
||||||
id = None
|
id = None
|
||||||
|
|
||||||
# Space Information
|
# Space Information
|
||||||
@ -761,6 +804,8 @@ class Interactor:
|
|||||||
lines = None
|
lines = None
|
||||||
faces = None
|
faces = None
|
||||||
body = None
|
body = None
|
||||||
|
offset_vector = None
|
||||||
|
edges = None
|
||||||
|
|
||||||
def translate_points_tup(self, point: QPoint):
|
def translate_points_tup(self, point: QPoint):
|
||||||
"""QPoints from Display to mesh data
|
"""QPoints from Display to mesh data
|
||||||
@ -815,11 +860,6 @@ class Body:
|
|||||||
|
|
||||||
return f
|
return f
|
||||||
|
|
||||||
def cut_shapes(self, sdf_object1, sdf_object2):
|
|
||||||
f = difference(sdf_object1, sdf_object2) # equivalent
|
|
||||||
|
|
||||||
return f
|
|
||||||
|
|
||||||
class Output:
|
class Output:
|
||||||
def export_mesh(self, sdf_object):
|
def export_mesh(self, sdf_object):
|
||||||
"""FINAL EXPORT"""
|
"""FINAL EXPORT"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user