From 2a7f718b3e3bab505bfe26694d05dec72b175cf0 Mon Sep 17 00:00:00 2001 From: bklronin Date: Sun, 16 Feb 2025 22:00:59 +0100 Subject: [PATCH] - Added construction lines switching - Moved callbacks into sketchwidget from main. - Changed reset on right click --- Gui.py | 31 +++++++++----- drawing_modules/draw_widget_solve.py | 49 +++++++++++++++++++++- gui.ui | 31 +++++++++++++- main.py | 63 ++++------------------------ 4 files changed, 106 insertions(+), 68 deletions(-) diff --git a/Gui.py b/Gui.py index 941b27f..3ac61e0 100644 --- a/Gui.py +++ b/Gui.py @@ -419,6 +419,7 @@ class Ui_fluencyCAD(object): self.pb_con_perp = QPushButton(self.groupBox_3) self.pb_con_perp.setObjectName(u"pb_con_perp") self.pb_con_perp.setCheckable(True) + self.pb_con_perp.setAutoExclusive(False) self.gridLayout_4.addWidget(self.pb_con_perp, 1, 1, 1, 1) @@ -454,6 +455,7 @@ class Ui_fluencyCAD(object): self.pb_con_mid = QPushButton(self.groupBox_3) self.pb_con_mid.setObjectName(u"pb_con_mid") self.pb_con_mid.setCheckable(True) + self.pb_con_mid.setAutoExclusive(False) self.gridLayout_4.addWidget(self.pb_con_mid, 1, 0, 1, 1) @@ -469,11 +471,11 @@ class Ui_fluencyCAD(object): self.tabWidget.setSizePolicy(sizePolicy5) self.tabWidget.setMaximumSize(QSize(200, 16777215)) self.tabWidget.setTabPosition(QTabWidget.South) - self.widget = QWidget() - self.widget.setObjectName(u"widget") - self.verticalLayout_3 = QVBoxLayout(self.widget) + self.snaps = QWidget() + self.snaps.setObjectName(u"snaps") + self.verticalLayout_3 = QVBoxLayout(self.snaps) self.verticalLayout_3.setObjectName(u"verticalLayout_3") - self.groupBox_5 = QGroupBox(self.widget) + self.groupBox_5 = QGroupBox(self.snaps) self.groupBox_5.setObjectName(u"groupBox_5") sizePolicy6 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred) sizePolicy6.setHorizontalStretch(0) @@ -491,6 +493,7 @@ class Ui_fluencyCAD(object): self.pb_snap_vert = QPushButton(self.groupBox_5) self.pb_snap_vert.setObjectName(u"pb_snap_vert") self.pb_snap_vert.setCheckable(True) + self.pb_snap_vert.setAutoExclusive(False) self.gridLayout_11.addWidget(self.pb_snap_vert, 2, 1, 1, 1) @@ -516,12 +519,14 @@ class Ui_fluencyCAD(object): self.pushButton_7 = QPushButton(self.groupBox_5) self.pushButton_7.setObjectName(u"pushButton_7") self.pushButton_7.setCheckable(True) + self.pushButton_7.setAutoExclusive(False) self.gridLayout_11.addWidget(self.pushButton_7, 3, 0, 1, 1) self.pb_snap_horiz = QPushButton(self.groupBox_5) self.pb_snap_horiz.setObjectName(u"pb_snap_horiz") self.pb_snap_horiz.setCheckable(True) + self.pb_snap_horiz.setAutoExclusive(False) self.gridLayout_11.addWidget(self.pb_snap_horiz, 2, 0, 1, 1) @@ -534,28 +539,32 @@ class Ui_fluencyCAD(object): self.pushButton_8 = QPushButton(self.groupBox_5) self.pushButton_8.setObjectName(u"pushButton_8") + self.pushButton_8.setCheckable(True) + self.pushButton_8.setAutoExclusive(False) self.gridLayout_11.addWidget(self.pushButton_8, 0, 0, 1, 1) self.pb_snap_midp = QPushButton(self.groupBox_5) self.pb_snap_midp.setObjectName(u"pb_snap_midp") self.pb_snap_midp.setCheckable(True) + self.pb_snap_midp.setAutoExclusive(False) self.gridLayout_11.addWidget(self.pb_snap_midp, 0, 1, 1, 1) self.pb_snap_angle = QPushButton(self.groupBox_5) self.pb_snap_angle.setObjectName(u"pb_snap_angle") self.pb_snap_angle.setCheckable(True) + self.pb_snap_angle.setAutoExclusive(False) self.gridLayout_11.addWidget(self.pb_snap_angle, 3, 1, 1, 1) self.verticalLayout_3.addWidget(self.groupBox_5) - self.tabWidget.addTab(self.widget, "") - self.widget1 = QWidget() - self.widget1.setObjectName(u"widget1") - self.tabWidget.addTab(self.widget1, "") + self.tabWidget.addTab(self.snaps, "") + self.settings = QWidget() + self.settings.setObjectName(u"settings") + self.tabWidget.addTab(self.settings, "") self.gridLayout.addWidget(self.tabWidget, 3, 0, 1, 1) @@ -582,7 +591,7 @@ class Ui_fluencyCAD(object): self.retranslateUi(fluencyCAD) self.InputTab.setCurrentIndex(0) - self.tabWidget.setCurrentIndex(1) + self.tabWidget.setCurrentIndex(0) QMetaObject.connectSlotsByName(fluencyCAD) @@ -710,8 +719,8 @@ class Ui_fluencyCAD(object): self.pushButton_8.setText(QCoreApplication.translate("fluencyCAD", u"Pnt", None)) self.pb_snap_midp.setText(QCoreApplication.translate("fluencyCAD", u"MidP", None)) self.pb_snap_angle.setText(QCoreApplication.translate("fluencyCAD", u"Angles", None)) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.widget), QCoreApplication.translate("fluencyCAD", u"Setg 1", None)) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.widget1), QCoreApplication.translate("fluencyCAD", u"Setg 2", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.snaps), QCoreApplication.translate("fluencyCAD", u"Setg 1", None)) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.settings), QCoreApplication.translate("fluencyCAD", u"Setg 2", None)) self.menuFile.setTitle(QCoreApplication.translate("fluencyCAD", u"File", None)) self.menuSettings.setTitle(QCoreApplication.translate("fluencyCAD", u"Settings", None)) # retranslateUi diff --git a/drawing_modules/draw_widget_solve.py b/drawing_modules/draw_widget_solve.py index 15d145b..fe8fc3a 100644 --- a/drawing_modules/draw_widget_solve.py +++ b/drawing_modules/draw_widget_solve.py @@ -24,15 +24,48 @@ class SketchWidget(QWidget): self.hovered_point = None self.selected_line = None + ### Display Settings self.snapping_range = 20 # Range in pixels for snapping self.zoom = 1 + # Mouse Input self.setMouseTracking(True) self.mouse_mode = False + self.is_construct = False + + # Solver self.solv = SolverSystem() self.sketch = Sketch2d() + def act_line_mode(self, checked): + if checked: + self.mouse_mode = 'line' + print(self.mouse_mode) + else: + self.mouse_mode = None + + def act_constrain_pt_pt_mode(self): + self.mouse_mode = 'pt_pt' + + def act_constrain_pt_line_mode(self): + self.mouse_mode = 'pt_line' + + def act_constrain_horiz_line_mode(self): + self.mouse_mode = 'horiz' + + def act_constrain_vert_line_mode(self): + self.mouse_mode = 'vert' + + def act_constrain_distance_mode(self): + self.mouse_mode = 'distance' + + def act_constrain_mid_point_mode(self): + self.sketchWidget.mouse_mode = 'pb_con_mid' + + def on_construct_change(self, checked): + self.is_construct = checked + def create_sketch(self, sketch_in ): self.sketch = Sketch2d() self.sketch.id = sketch_in.id @@ -46,6 +79,7 @@ class SketchWidget(QWidget): return self.sketch def reset_buffers(self): + self.mouse_mode = None self.line_draw_buffer = [None, None] self.drag_buffer = [None, None] self.main_buffer = [None, None] @@ -315,6 +349,7 @@ class SketchWidget(QWidget): self.drag_buffer[0] = self.get_handle_from_ui_point(self.hovered_point) if event.button() == Qt.RightButton and self.mouse_mode: + self.constrain_done.emit() self.reset_buffers() if event.button() == Qt.LeftButton and self.mouse_mode == "line": @@ -329,6 +364,10 @@ class SketchWidget(QWidget): v = clicked_pos.y() point = Point2D(u,v) + print("construct", self.is_construct ) + # Construction mode + point.is_helper = self.is_construct + self.sketch.add_point(point) self.line_draw_buffer[0] = point @@ -337,8 +376,12 @@ class SketchWidget(QWidget): u = clicked_pos.x() v = clicked_pos.y() - + print("construct", self.is_construct) point = Point2D(u, v) + + # Construction mode + point.is_helper = self.is_construct + self.sketch.add_point(point) self.line_draw_buffer[1] = point @@ -348,6 +391,10 @@ class SketchWidget(QWidget): if self.line_draw_buffer[0] and self.line_draw_buffer[1]: line = Line2D(self.line_draw_buffer[0], self.line_draw_buffer[1]) + + # Construction mode + line.is_helper = self.is_construct + self.sketch.add_line(line) # Reset the buffer for the next line segment diff --git a/gui.ui b/gui.ui index 2d34b13..55daca4 100644 --- a/gui.ui +++ b/gui.ui @@ -733,6 +733,9 @@ true + + false + @@ -813,6 +816,9 @@ true + + false + @@ -838,7 +844,7 @@ 0 - + Setg 1 @@ -882,6 +888,9 @@ true + + false + @@ -919,6 +928,9 @@ true + + false + @@ -929,6 +941,9 @@ true + + false + @@ -949,6 +964,12 @@ Pnt + + true + + + false + @@ -959,6 +980,9 @@ true + + false + @@ -969,6 +993,9 @@ true + + false + @@ -976,7 +1003,7 @@ - + Setg 2 diff --git a/main.py b/main.py index 2b5588a..6e67dfe 100644 --- a/main.py +++ b/main.py @@ -120,13 +120,13 @@ class MainWindow(QMainWindow): self.ui.pb_flip_face.pressed.connect(self.on_flip_face) ###Modes - self.ui.pb_linetool.pressed.connect(self.act_line_mode) - self.ui.pb_con_ptpt.pressed.connect(self.act_constrain_pt_pt_mode) - self.ui.pb_con_line.pressed.connect(self.act_constrain_pt_line_mode) - self.ui.pb_con_horiz.pressed.connect(self.act_constrain_horiz_line_mode) - self.ui.pb_con_vert.pressed.connect(self.act_constrain_vert_line_mode) - self.ui.pb_con_dist.pressed.connect(self.act_constrain_distance_mode) - self.ui.pb_con_mid.pressed.connect(self.act_constrain_mid_point_mode) + self.ui.pb_linetool.clicked.connect(self.sketchWidget.act_line_mode) + self.ui.pb_con_ptpt.clicked.connect(self.sketchWidget.act_constrain_pt_pt_mode) + self.ui.pb_con_line.clicked.connect(self.sketchWidget.act_constrain_pt_line_mode) + self.ui.pb_con_horiz.clicked.connect(self.sketchWidget.act_constrain_horiz_line_mode) + self.ui.pb_con_vert.clicked.connect(self.sketchWidget.act_constrain_vert_line_mode) + self.ui.pb_con_dist.clicked.connect(self.sketchWidget.act_constrain_distance_mode) + self.ui.pb_con_mid.clicked.connect(self.sketchWidget.act_constrain_mid_point_mode) ### Operations self.ui.pb_extrdop.pressed.connect(self.send_extrude) @@ -137,9 +137,8 @@ class MainWindow(QMainWindow): self.setFocusPolicy(Qt.StrongFocus) self.send_command.connect(self.custom_3D_Widget.on_receive_command) - self.ui.actionNew_Project.triggered.connect(self.new_project) - + self.ui.pb_enable_construct.clicked.connect(self.sketchWidget.on_construct_change) self.project = Project() self.new_project() @@ -156,7 +155,6 @@ class MainWindow(QMainWindow): self.project.timeline = timeline self.new_component() - def new_component(self): print("Creating a new component...") @@ -270,7 +268,7 @@ class MainWindow(QMainWindow): sketch.original_sketch = sketch_from_widget #Get parameters - points = sketch_from_widget.points + points = [point for point in sketch_from_widget.points if hasattr(point, 'is_helper') and not point.is_helper] sketch.convert_points_for_sdf(points) sketch.id = sketch_from_widget.id @@ -353,49 +351,6 @@ class MainWindow(QMainWindow): def on_flip_face(self): self.send_command.emit("flip") - def act_line_mode(self): - if not self.ui.pb_linetool.isChecked(): - self.sketchWidget.mouse_mode = 'line' - else: - 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' - else: - self.sketchWidget.mouse_mode = None - - def act_constrain_pt_line_mode(self): - if not self.ui.pb_con_line.isChecked(): - self.sketchWidget.mouse_mode = 'pt_line' - else: - self.sketchWidget.mouse_mode = None - - def act_constrain_horiz_line_mode(self): - if not self.ui.pb_con_horiz.isChecked(): - self.sketchWidget.mouse_mode = 'horiz' - else: - self.sketchWidget.mouse_mode = None - - def act_constrain_vert_line_mode(self): - if not self.ui.pb_con_vert.isChecked(): - self.sketchWidget.mouse_mode = 'vert' - else: - self.sketchWidget.mouse_mode = None - - def act_constrain_distance_mode(self): - if not self.ui.pb_con_dist.isChecked(): - self.sketchWidget.mouse_mode = 'distance' - else: - self.sketchWidget.mouse_mode = None - - def act_constrain_mid_point_mode(self): - if not self.ui.pb_con_mid.isChecked(): - self.sketchWidget.mouse_mode = 'pb_con_mid' - else: - self.sketchWidget.mouse_mode = None - def draw_op_complete(self): # safely disable the line modes self.ui.pb_linetool.setChecked(False)