- changing compos for sketches works
This commit is contained in:
parent
8530f6f8b9
commit
6c8462a7f3
347
main.py
347
main.py
@ -114,7 +114,7 @@ class MainWindow(QMainWindow):
|
|||||||
self.ui.pb_origin_wp.pressed.connect(self.add_new_sketch_origin)
|
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_origin_face.pressed.connect(self.add_new_sketch_wp)
|
||||||
|
|
||||||
self.ui.pb_nw_sktch.pressed.connect(self.add_sketch)
|
self.ui.pb_nw_sktch.pressed.connect(self.add_sketch_to_compo)
|
||||||
self.ui.pb_del_sketch.pressed.connect(self.del_sketch)
|
self.ui.pb_del_sketch.pressed.connect(self.del_sketch)
|
||||||
self.ui.pb_edt_sktch.pressed.connect(self.edit_sketch)
|
self.ui.pb_edt_sktch.pressed.connect(self.edit_sketch)
|
||||||
|
|
||||||
@ -149,9 +149,194 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
self.ui.new_compo.pressed.connect(self.new_component)
|
self.ui.new_compo.pressed.connect(self.new_component)
|
||||||
|
|
||||||
|
|
||||||
"""Project -> (Timeline) -> Component -> Sketch -> Body / Interactor -> Connector -> Assembly -> PB Render"""
|
"""Project -> (Timeline) -> Component -> Sketch -> Body / Interactor -> Connector -> Assembly -> PB Render"""
|
||||||
|
|
||||||
|
def new_project(self):
|
||||||
|
print("New project")
|
||||||
|
timeline = []
|
||||||
|
self.project.timeline = timeline
|
||||||
|
self.new_component()
|
||||||
|
|
||||||
|
def new_component(self):
|
||||||
|
print("Creating a new component...")
|
||||||
|
|
||||||
|
# Lazily initialize self.compo_layout if it doesn't exist
|
||||||
|
if not hasattr(self, 'compo_layout'):
|
||||||
|
print("Initializing compo_layout...")
|
||||||
|
self.compo_layout = QHBoxLayout()
|
||||||
|
|
||||||
|
# Ensure the QGroupBox has a layout
|
||||||
|
if not self.ui.compo_box.layout():
|
||||||
|
self.ui.compo_box.setLayout(QVBoxLayout()) # Set a default layout for QGroupBox
|
||||||
|
|
||||||
|
# Add the horizontal layout to the QGroupBox's layout
|
||||||
|
self.ui.compo_box.layout().addLayout(self.compo_layout)
|
||||||
|
|
||||||
|
# Align the layout to the left
|
||||||
|
self.compo_layout.setAlignment(Qt.AlignLeft)
|
||||||
|
|
||||||
|
# Create and initialize a new Component
|
||||||
|
compo = Component()
|
||||||
|
compo.id = f"Component {len(self.project.timeline) + 1}"
|
||||||
|
compo.descript = "Initial Component"
|
||||||
|
compo.sketches = {}
|
||||||
|
compo.body = {}
|
||||||
|
self.project.timeline.append(compo)
|
||||||
|
|
||||||
|
# Create a button for the new component
|
||||||
|
button = QPushButton()
|
||||||
|
button.setToolTip(compo.id)
|
||||||
|
button.setText(str(len(self.project.timeline)))
|
||||||
|
button.setFixedSize(QSize(40, 40)) # Set button size
|
||||||
|
button.setCheckable(True)
|
||||||
|
button.setAutoExclusive(True)
|
||||||
|
button.setChecked(False)
|
||||||
|
button.released.connect(self.on_compo_change)
|
||||||
|
|
||||||
|
# Add the button to the layout
|
||||||
|
self.compo_layout.addWidget(button)
|
||||||
|
|
||||||
|
print(f"Added component {compo.id} to the layout.")
|
||||||
|
|
||||||
|
def get_activated_compo(self):
|
||||||
|
# Iterate through all items in the layout
|
||||||
|
total_elements = self.compo_layout.count()
|
||||||
|
print(total_elements)
|
||||||
|
for i in range(total_elements):
|
||||||
|
widget = self.compo_layout.itemAt(i).widget() # Get the widget at the index
|
||||||
|
if widget: # Check if the widget is not None
|
||||||
|
if isinstance(widget, QPushButton) and widget.isCheckable():
|
||||||
|
state = widget.isChecked() # Get the checked state
|
||||||
|
print(f"{widget.text()} is {'checked' if state else 'unchecked'}.")
|
||||||
|
if state:
|
||||||
|
return i
|
||||||
|
|
||||||
|
def add_new_sketch_origin(self):
|
||||||
|
name = f"sketches-{str(names.get_first_name())}"
|
||||||
|
sketch = Sketch()
|
||||||
|
sketch.id = name
|
||||||
|
sketch.origin = [0,0,0]
|
||||||
|
|
||||||
|
self.sketchWidget.reset_buffers()
|
||||||
|
self.sketchWidget.create_sketch(sketch)
|
||||||
|
|
||||||
|
def add_new_sketch_wp(self):
|
||||||
|
## Sketch projected from 3d view into 2d
|
||||||
|
name = f"sketches-{str(names.get_first_name())}"
|
||||||
|
sketch = Sketch()
|
||||||
|
sketch.id = name
|
||||||
|
sketch.origin = self.custom_3D_Widget.centroid
|
||||||
|
sketch.normal = self.custom_3D_Widget.selected_normal
|
||||||
|
sketch.slv_points = []
|
||||||
|
sketch.slv_lines = []
|
||||||
|
sketch.proj_points = self.custom_3D_Widget.project_tosketch_points
|
||||||
|
sketch.proj_lines = self.custom_3D_Widget.project_tosketch_lines
|
||||||
|
|
||||||
|
self.sketchWidget.reset_buffers()
|
||||||
|
self.sketchWidget.create_sketch(sketch)
|
||||||
|
self.sketchWidget.create_workplane_projected()
|
||||||
|
|
||||||
|
if not sketch.proj_lines:
|
||||||
|
self.sketchWidget.convert_proj_points(sketch.proj_points)
|
||||||
|
|
||||||
|
self.sketchWidget.convert_proj_lines(sketch.proj_lines)
|
||||||
|
self.sketchWidget.update()
|
||||||
|
|
||||||
|
# CLear all selections after it has been projected
|
||||||
|
self.custom_3D_Widget.project_tosketch_points.clear()
|
||||||
|
self.custom_3D_Widget.project_tosketch_lines.clear()
|
||||||
|
self.custom_3D_Widget.clear_actors_projection()
|
||||||
|
self.custom_3D_Widget.clear_actors_normals()
|
||||||
|
|
||||||
|
def add_sketch_to_compo(self):
|
||||||
|
"""
|
||||||
|
Add sketch to component
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
sketch = Sketch()
|
||||||
|
sketch_from_widget = self.sketchWidget.get_sketch()
|
||||||
|
points = sketch_from_widget.points
|
||||||
|
|
||||||
|
sketch.convert_points_for_sdf(points)
|
||||||
|
sketch.id = sketch_from_widget.id
|
||||||
|
|
||||||
|
sketch.filter_lines_for_interactor(sketch_from_widget.lines)
|
||||||
|
|
||||||
|
# Register sketch to timeline
|
||||||
|
### Add selection compo here
|
||||||
|
compo_id = self.get_activated_compo()
|
||||||
|
print("newsketch_name", sketch.id)
|
||||||
|
self.project.timeline[compo_id].sketches[sketch.id] = sketch
|
||||||
|
|
||||||
|
# Add Item to slection menu
|
||||||
|
self.ui.sketch_list.addItem(sketch.id)
|
||||||
|
|
||||||
|
# Deactivate drawing
|
||||||
|
self.ui.pb_linetool.setChecked(False)
|
||||||
|
self.sketchWidget.line_mode = False
|
||||||
|
|
||||||
|
items = self.ui.sketch_list.findItems(sketch.id, Qt.MatchExactly)[0]
|
||||||
|
self.ui.sketch_list.setCurrentItem(items)
|
||||||
|
|
||||||
|
def on_compo_change(self):
|
||||||
|
compo_id = self.get_activated_compo()
|
||||||
|
if compo_id:
|
||||||
|
self.ui.sketch_list.clear()
|
||||||
|
print("id", compo_id)
|
||||||
|
print("sketch_registry", self.project.timeline[compo_id].sketches)
|
||||||
|
|
||||||
|
for sketch in self.project.timeline[compo_id].sketches:
|
||||||
|
print(sketch)
|
||||||
|
self.ui.sketch_list.addItem(sketch)
|
||||||
|
|
||||||
|
def edit_sketch(self):
|
||||||
|
name = self.ui.sketch_list.currentItem().text()
|
||||||
|
|
||||||
|
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]
|
||||||
|
|
||||||
|
self.sketchWidget.set_sketch(sketch)
|
||||||
|
|
||||||
|
self.sketchWidget.update()
|
||||||
|
|
||||||
|
def del_sketch(self):
|
||||||
|
# Old
|
||||||
|
print("Deleting")
|
||||||
|
name = self.ui.sketch_list.currentItem() # Get the current item
|
||||||
|
|
||||||
|
print(self.model)
|
||||||
|
|
||||||
|
if name is not None:
|
||||||
|
item_name = name.text()
|
||||||
|
print("obj_name", item_name)
|
||||||
|
|
||||||
|
# Check if the 'sketches' key exists in the model dictionary
|
||||||
|
if 'sketches' in self.model and item_name in self.model['sketches']:
|
||||||
|
if self.model['sketches'][item_name]['id'] == item_name:
|
||||||
|
row = self.ui.sketch_list.row(name) # Get the row of the current item
|
||||||
|
self.ui.sketch_list.takeItem(row) # Remove the item from the list widget
|
||||||
|
self.sketchWidget.clear_sketch()
|
||||||
|
self.model['sketches'].pop(item_name) # Remove the item from the sketches dictionary
|
||||||
|
print(f"Removed sketches: {item_name}")
|
||||||
|
|
||||||
|
# Check if the 'operation' key exists in the model dictionary
|
||||||
|
elif 'operation' in self.model and item_name in self.model['operation']:
|
||||||
|
if self.model['operation'][item_name]['id'] == item_name:
|
||||||
|
row = self.ui.sketch_list.row(name) # Get the row of the current item
|
||||||
|
self.ui.sketch_list.takeItem(row) # Remove the item from the list widget
|
||||||
|
self.sketchWidget.clear_sketch()
|
||||||
|
self.model['operation'].pop(item_name) # Remove the item from the operation dictionary
|
||||||
|
print(f"Removed operation: {item_name}")
|
||||||
|
|
||||||
|
else:
|
||||||
|
print(f"Item '{item_name}' not found in either 'sketches' or 'operation' dictionary.")
|
||||||
|
else:
|
||||||
|
print("No item selected.")
|
||||||
|
|
||||||
|
|
||||||
def on_flip_face(self):
|
def on_flip_face(self):
|
||||||
self.send_command.emit("flip")
|
self.send_command.emit("flip")
|
||||||
|
|
||||||
@ -228,159 +413,6 @@ class MainWindow(QMainWindow):
|
|||||||
#self.view_update()
|
#self.view_update()
|
||||||
print(f"Selected item: {name}")
|
print(f"Selected item: {name}")
|
||||||
|
|
||||||
def new_project(self):
|
|
||||||
print("New project")
|
|
||||||
timeline = []
|
|
||||||
self.project.timeline = timeline
|
|
||||||
self.new_component()
|
|
||||||
|
|
||||||
def new_component(self):
|
|
||||||
print("Creating a new component...")
|
|
||||||
|
|
||||||
# Lazily initialize self.compo_layout if it doesn't exist
|
|
||||||
if not hasattr(self, 'compo_layout'):
|
|
||||||
print("Initializing compo_layout...")
|
|
||||||
self.compo_layout = QHBoxLayout()
|
|
||||||
|
|
||||||
# Ensure the QGroupBox has a layout
|
|
||||||
if not self.ui.compo_box.layout():
|
|
||||||
self.ui.compo_box.setLayout(QVBoxLayout()) # Set a default layout for QGroupBox
|
|
||||||
|
|
||||||
# Add the horizontal layout to the QGroupBox's layout
|
|
||||||
self.ui.compo_box.layout().addLayout(self.compo_layout)
|
|
||||||
|
|
||||||
# Align the layout to the left
|
|
||||||
self.compo_layout.setAlignment(Qt.AlignLeft)
|
|
||||||
|
|
||||||
# Create and initialize a new Component
|
|
||||||
compo = Component()
|
|
||||||
compo.id = f"Component {len(self.project.timeline) + 1}"
|
|
||||||
compo.descript = "Initial Component"
|
|
||||||
compo.sketches = {}
|
|
||||||
compo.body = {}
|
|
||||||
self.project.timeline.append(compo)
|
|
||||||
|
|
||||||
# Create a button for the new component
|
|
||||||
button = QPushButton()
|
|
||||||
button.setToolTip(compo.id)
|
|
||||||
button.setText(str(len(self.project.timeline)))
|
|
||||||
button.setFixedSize(QSize(40, 40)) # Set button size
|
|
||||||
|
|
||||||
# Add the button to the layout
|
|
||||||
self.compo_layout.addWidget(button)
|
|
||||||
|
|
||||||
print(f"Added component {compo.id} to the layout.")
|
|
||||||
|
|
||||||
def add_new_sketch_origin(self):
|
|
||||||
name = f"sketches-{str(names.get_first_name())}"
|
|
||||||
sketch = Sketch()
|
|
||||||
sketch.id = name
|
|
||||||
sketch.origin = [0,0,0]
|
|
||||||
|
|
||||||
self.sketchWidget.reset_buffers()
|
|
||||||
self.sketchWidget.create_sketch(sketch)
|
|
||||||
|
|
||||||
def add_new_sketch_wp(self):
|
|
||||||
## Sketch projected from 3d view into 2d
|
|
||||||
name = f"sketches-{str(names.get_first_name())}"
|
|
||||||
sketch = Sketch()
|
|
||||||
sketch.id = name
|
|
||||||
sketch.origin = self.custom_3D_Widget.centroid
|
|
||||||
sketch.normal = self.custom_3D_Widget.selected_normal
|
|
||||||
sketch.slv_points = []
|
|
||||||
sketch.slv_lines = []
|
|
||||||
sketch.proj_points = self.custom_3D_Widget.project_tosketch_points
|
|
||||||
sketch.proj_lines = self.custom_3D_Widget.project_tosketch_lines
|
|
||||||
|
|
||||||
self.sketchWidget.reset_buffers()
|
|
||||||
self.sketchWidget.create_sketch(sketch)
|
|
||||||
self.sketchWidget.create_workplane_projected()
|
|
||||||
|
|
||||||
if not sketch.proj_lines:
|
|
||||||
self.sketchWidget.convert_proj_points(sketch.proj_points)
|
|
||||||
|
|
||||||
self.sketchWidget.convert_proj_lines(sketch.proj_lines)
|
|
||||||
self.sketchWidget.update()
|
|
||||||
|
|
||||||
# CLear all selections after it has been projected
|
|
||||||
self.custom_3D_Widget.project_tosketch_points.clear()
|
|
||||||
self.custom_3D_Widget.project_tosketch_lines.clear()
|
|
||||||
self.custom_3D_Widget.clear_actors_projection()
|
|
||||||
self.custom_3D_Widget.clear_actors_normals()
|
|
||||||
|
|
||||||
def add_sketch(self):
|
|
||||||
"""
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
sketch = Sketch()
|
|
||||||
sketch_from_widget = self.sketchWidget.get_sketch()
|
|
||||||
points = sketch_from_widget.points
|
|
||||||
|
|
||||||
sketch.convert_points_for_sdf(points)
|
|
||||||
sketch.id = sketch_from_widget.id
|
|
||||||
|
|
||||||
sketch.filter_lines_for_interactor(sketch_from_widget.lines)
|
|
||||||
|
|
||||||
# Register sketch to timeline
|
|
||||||
self.project.timeline[-1].sketches[sketch.id] = sketch
|
|
||||||
|
|
||||||
# Add Item to slection menu
|
|
||||||
self.ui.sketch_list.addItem(sketch.id)
|
|
||||||
|
|
||||||
# Deactivate drawing
|
|
||||||
self.ui.pb_linetool.setChecked(False)
|
|
||||||
self.sketchWidget.line_mode = False
|
|
||||||
|
|
||||||
items = self.ui.sketch_list.findItems(sketch.id, Qt.MatchExactly)[0]
|
|
||||||
self.ui.sketch_list.setCurrentItem(items)
|
|
||||||
|
|
||||||
def edit_sketch(self):
|
|
||||||
name = self.ui.sketch_list.currentItem().text()
|
|
||||||
|
|
||||||
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]
|
|
||||||
|
|
||||||
self.sketchWidget.set_sketch(sketch)
|
|
||||||
|
|
||||||
self.sketchWidget.update()
|
|
||||||
|
|
||||||
def del_sketch(self):
|
|
||||||
# Old
|
|
||||||
print("Deleting")
|
|
||||||
name = self.ui.sketch_list.currentItem() # Get the current item
|
|
||||||
|
|
||||||
print(self.model)
|
|
||||||
|
|
||||||
if name is not None:
|
|
||||||
item_name = name.text()
|
|
||||||
print("obj_name", item_name)
|
|
||||||
|
|
||||||
# Check if the 'sketches' key exists in the model dictionary
|
|
||||||
if 'sketches' in self.model and item_name in self.model['sketches']:
|
|
||||||
if self.model['sketches'][item_name]['id'] == item_name:
|
|
||||||
row = self.ui.sketch_list.row(name) # Get the row of the current item
|
|
||||||
self.ui.sketch_list.takeItem(row) # Remove the item from the list widget
|
|
||||||
self.sketchWidget.clear_sketch()
|
|
||||||
self.model['sketches'].pop(item_name) # Remove the item from the sketches dictionary
|
|
||||||
print(f"Removed sketches: {item_name}")
|
|
||||||
|
|
||||||
# Check if the 'operation' key exists in the model dictionary
|
|
||||||
elif 'operation' in self.model and item_name in self.model['operation']:
|
|
||||||
if self.model['operation'][item_name]['id'] == item_name:
|
|
||||||
row = self.ui.sketch_list.row(name) # Get the row of the current item
|
|
||||||
self.ui.sketch_list.takeItem(row) # Remove the item from the list widget
|
|
||||||
self.sketchWidget.clear_sketch()
|
|
||||||
self.model['operation'].pop(item_name) # Remove the item from the operation dictionary
|
|
||||||
print(f"Removed operation: {item_name}")
|
|
||||||
|
|
||||||
else:
|
|
||||||
print(f"Item '{item_name}' not found in either 'sketches' or 'operation' dictionary.")
|
|
||||||
else:
|
|
||||||
print("No item selected.")
|
|
||||||
|
|
||||||
def update_body(self):
|
def update_body(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -411,7 +443,7 @@ class MainWindow(QMainWindow):
|
|||||||
name = selected.text()
|
name = selected.text()
|
||||||
|
|
||||||
# TODO: add selected element from timeline
|
# TODO: add selected element from timeline
|
||||||
sel_compo = self.project.timeline[-1]
|
sel_compo = self.project.timeline[self.get_activated_compo()]
|
||||||
#print(sel_compo)
|
#print(sel_compo)
|
||||||
sketch = sel_compo.sketches[name]
|
sketch = sel_compo.sketches[name]
|
||||||
#print(sketch)
|
#print(sketch)
|
||||||
@ -510,11 +542,10 @@ class MainWindow(QMainWindow):
|
|||||||
self.custom_3D_Widget.load_stl(file)
|
self.custom_3D_Widget.load_stl(file)
|
||||||
self.custom_3D_Widget.update()
|
self.custom_3D_Widget.update()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Timeline:
|
class Timeline:
|
||||||
"""Timeline """
|
"""Timeline """
|
||||||
|
### Collection of the Components
|
||||||
timeline: list = None
|
timeline: list = None
|
||||||
|
|
||||||
"""add to time,
|
"""add to time,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user