- Added construction lines switching

- Moved callbacks into sketchwidget from main.
- Changed reset on right click
This commit is contained in:
bklronin 2025-02-16 22:00:59 +01:00
parent 878b6093b7
commit 2a7f718b3e
4 changed files with 106 additions and 68 deletions

31
Gui.py
View File

@ -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

View File

@ -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

31
gui.ui
View File

@ -733,6 +733,9 @@
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0">
@ -813,6 +816,9 @@
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
@ -838,7 +844,7 @@
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="">
<widget class="QWidget" name="snaps">
<attribute name="title">
<string>Setg 1</string>
</attribute>
@ -882,6 +888,9 @@
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
@ -919,6 +928,9 @@
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0">
@ -929,6 +941,9 @@
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
<item row="6" column="1">
@ -949,6 +964,12 @@
<property name="text">
<string>Pnt</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="1">
@ -959,6 +980,9 @@
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="1">
@ -969,6 +993,9 @@
<property name="checkable">
<bool>true</bool>
</property>
<property name="autoExclusive">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
@ -976,7 +1003,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="">
<widget class="QWidget" name="settings">
<attribute name="title">
<string>Setg 2</string>
</attribute>

63
main.py
View File

@ -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)