From 0c3e4eeb5e0d74c912153769e00fd88b17be179e Mon Sep 17 00:00:00 2001 From: bklronin Date: Sat, 13 Jul 2024 13:46:13 +0200 Subject: [PATCH] - Sketch projection and extrude in place working --- Gui.py | 425 +++++++++++++--------- drawing_modules/draw_widget2d.py | 21 +- drawing_modules/vtk_widget.py | 148 +++++--- gui.ui | 607 +++++++++++++++++-------------- main.py | 19 +- 5 files changed, 726 insertions(+), 494 deletions(-) diff --git a/Gui.py b/Gui.py index 704c271..c58dfcd 100644 --- a/Gui.py +++ b/Gui.py @@ -29,65 +29,50 @@ class Ui_fluencyCAD(object): self.centralwidget.setObjectName(u"centralwidget") self.gridLayout = QGridLayout(self.centralwidget) self.gridLayout.setObjectName(u"gridLayout") - self.InputTab = QTabWidget(self.centralwidget) - self.InputTab.setObjectName(u"InputTab") - sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.InputTab.sizePolicy().hasHeightForWidth()) - self.InputTab.setSizePolicy(sizePolicy) - self.sketch_tab = QWidget() - self.sketch_tab.setObjectName(u"sketch_tab") - self.verticalLayout_4 = QVBoxLayout(self.sketch_tab) - self.verticalLayout_4.setObjectName(u"verticalLayout_4") - self.InputTab.addTab(self.sketch_tab, "") - self.code_tab = QWidget() - self.code_tab.setObjectName(u"code_tab") - self.verticalLayout = QVBoxLayout(self.code_tab) - self.verticalLayout.setObjectName(u"verticalLayout") - self.textEdit = QTextEdit(self.code_tab) - self.textEdit.setObjectName(u"textEdit") + self.groupBox = QGroupBox(self.centralwidget) + self.groupBox.setObjectName(u"groupBox") + self.gridLayout_3 = QGridLayout(self.groupBox) + self.gridLayout_3.setObjectName(u"gridLayout_3") + self.pb_revop = QPushButton(self.groupBox) + self.pb_revop.setObjectName(u"pb_revop") - self.verticalLayout.addWidget(self.textEdit) + self.gridLayout_3.addWidget(self.pb_revop, 2, 1, 1, 1) - self.groupBox_7 = QGroupBox(self.code_tab) - self.groupBox_7.setObjectName(u"groupBox_7") - self.gridLayout_5 = QGridLayout(self.groupBox_7) - self.gridLayout_5.setObjectName(u"gridLayout_5") - self.pushButton_5 = QPushButton(self.groupBox_7) - self.pushButton_5.setObjectName(u"pushButton_5") + self.pb_extrdop = QPushButton(self.groupBox) + self.pb_extrdop.setObjectName(u"pb_extrdop") - self.gridLayout_5.addWidget(self.pushButton_5, 2, 0, 1, 1) + self.gridLayout_3.addWidget(self.pb_extrdop, 0, 0, 1, 1) - self.pushButton_4 = QPushButton(self.groupBox_7) - self.pushButton_4.setObjectName(u"pushButton_4") + self.pb_arrayop = QPushButton(self.groupBox) + self.pb_arrayop.setObjectName(u"pb_arrayop") - self.gridLayout_5.addWidget(self.pushButton_4, 2, 1, 1, 1) + self.gridLayout_3.addWidget(self.pb_arrayop, 2, 0, 1, 1) - self.pb_apply_code = QPushButton(self.groupBox_7) - self.pb_apply_code.setObjectName(u"pb_apply_code") + self.pb_cutop = QPushButton(self.groupBox) + self.pb_cutop.setObjectName(u"pb_cutop") - self.gridLayout_5.addWidget(self.pb_apply_code, 1, 0, 1, 1) + self.gridLayout_3.addWidget(self.pb_cutop, 0, 1, 1, 1) - self.pushButton = QPushButton(self.groupBox_7) - self.pushButton.setObjectName(u"pushButton") + self.pb_combop = QPushButton(self.groupBox) + self.pb_combop.setObjectName(u"pb_combop") - self.gridLayout_5.addWidget(self.pushButton, 1, 1, 1, 1) + self.gridLayout_3.addWidget(self.pb_combop, 1, 0, 1, 1) + + self.pb_moveop = QPushButton(self.groupBox) + self.pb_moveop.setObjectName(u"pb_moveop") + + self.gridLayout_3.addWidget(self.pb_moveop, 1, 1, 1, 1) - self.verticalLayout.addWidget(self.groupBox_7) - - self.InputTab.addTab(self.code_tab, "") - - self.gridLayout.addWidget(self.InputTab, 0, 2, 11, 1) + self.gridLayout.addWidget(self.groupBox, 0, 5, 10, 1, Qt.AlignTop) self.groupBox_5 = QGroupBox(self.centralwidget) self.groupBox_5.setObjectName(u"groupBox_5") - sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - sizePolicy1.setHorizontalStretch(0) - sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.groupBox_5.sizePolicy().hasHeightForWidth()) - self.groupBox_5.setSizePolicy(sizePolicy1) + sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.groupBox_5.sizePolicy().hasHeightForWidth()) + self.groupBox_5.setSizePolicy(sizePolicy) self.groupBox_5.setMaximumSize(QSize(300, 16777215)) self.verticalLayout_3 = QVBoxLayout(self.groupBox_5) self.verticalLayout_3.setObjectName(u"verticalLayout_3") @@ -99,11 +84,11 @@ class Ui_fluencyCAD(object): self.groupBox_6 = QGroupBox(self.groupBox_5) self.groupBox_6.setObjectName(u"groupBox_6") - sizePolicy2 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) - sizePolicy2.setHorizontalStretch(0) - sizePolicy2.setVerticalStretch(0) - sizePolicy2.setHeightForWidth(self.groupBox_6.sizePolicy().hasHeightForWidth()) - self.groupBox_6.setSizePolicy(sizePolicy2) + sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.groupBox_6.sizePolicy().hasHeightForWidth()) + self.groupBox_6.setSizePolicy(sizePolicy1) self.gridLayout_6 = QGridLayout(self.groupBox_6) self.gridLayout_6.setObjectName(u"gridLayout_6") self.gridLayout_6.setContentsMargins(2, 2, 2, 2) @@ -133,8 +118,8 @@ class Ui_fluencyCAD(object): self.groupBox_8 = QGroupBox(self.groupBox_5) self.groupBox_8.setObjectName(u"groupBox_8") - sizePolicy2.setHeightForWidth(self.groupBox_8.sizePolicy().hasHeightForWidth()) - self.groupBox_8.setSizePolicy(sizePolicy2) + sizePolicy1.setHeightForWidth(self.groupBox_8.sizePolicy().hasHeightForWidth()) + self.groupBox_8.setSizePolicy(sizePolicy1) self.gridLayout_8 = QGridLayout(self.groupBox_8) self.gridLayout_8.setObjectName(u"gridLayout_8") self.gridLayout_8.setContentsMargins(2, 2, 2, 2) @@ -157,65 +142,7 @@ class Ui_fluencyCAD(object): self.verticalLayout_3.addWidget(self.groupBox_8) - self.gridLayout.addWidget(self.groupBox_5, 0, 3, 11, 1) - - self.groupBox_4 = QGroupBox(self.centralwidget) - self.groupBox_4.setObjectName(u"groupBox_4") - self.verticalLayout_2 = QVBoxLayout(self.groupBox_4) - self.verticalLayout_2.setObjectName(u"verticalLayout_2") - self.pushButton_2 = QPushButton(self.groupBox_4) - self.pushButton_2.setObjectName(u"pushButton_2") - - self.verticalLayout_2.addWidget(self.pushButton_2) - - - self.gridLayout.addWidget(self.groupBox_4, 10, 5, 1, 1) - - self.gl_box = QGroupBox(self.centralwidget) - self.gl_box.setObjectName(u"gl_box") - sizePolicy3 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - sizePolicy3.setHorizontalStretch(0) - sizePolicy3.setVerticalStretch(4) - sizePolicy3.setHeightForWidth(self.gl_box.sizePolicy().hasHeightForWidth()) - self.gl_box.setSizePolicy(sizePolicy3) - font = QFont() - font.setPointSize(12) - self.gl_box.setFont(font) - self.horizontalLayout_4 = QHBoxLayout(self.gl_box) -#ifndef Q_OS_MAC - self.horizontalLayout_4.setSpacing(-1) -#endif - self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") - self.horizontalLayout_4.setContentsMargins(12, -1, -1, -1) - - self.gridLayout.addWidget(self.gl_box, 0, 4, 11, 1) - - self.groupBox = QGroupBox(self.centralwidget) - self.groupBox.setObjectName(u"groupBox") - self.gridLayout_3 = QGridLayout(self.groupBox) - self.gridLayout_3.setObjectName(u"gridLayout_3") - self.pb_extrdop = QPushButton(self.groupBox) - self.pb_extrdop.setObjectName(u"pb_extrdop") - - self.gridLayout_3.addWidget(self.pb_extrdop, 0, 0, 1, 1) - - self.pb_cutop = QPushButton(self.groupBox) - self.pb_cutop.setObjectName(u"pb_cutop") - - self.gridLayout_3.addWidget(self.pb_cutop, 0, 1, 1, 1) - - self.pb_arrayop = QPushButton(self.groupBox) - self.pb_arrayop.setObjectName(u"pb_arrayop") - - self.gridLayout_3.addWidget(self.pb_arrayop, 1, 0, 1, 1) - - self.pb_revop = QPushButton(self.groupBox) - self.pb_revop.setObjectName(u"pb_revop") - - self.gridLayout_3.addWidget(self.pb_revop, 1, 1, 1, 1) - - - self.gridLayout.addWidget(self.groupBox, 0, 5, 10, 1, Qt.AlignTop) + self.gridLayout.addWidget(self.groupBox_5, 0, 3, 12, 1) self.groupBox_9 = QGroupBox(self.centralwidget) self.groupBox_9.setObjectName(u"groupBox_9") @@ -231,50 +158,23 @@ class Ui_fluencyCAD(object): self.gridLayout_7.addWidget(self.pb_origin_face, 0, 1, 1, 1) + self.pb_flip_face = QPushButton(self.groupBox_9) + self.pb_flip_face.setObjectName(u"pb_flip_face") + + self.gridLayout_7.addWidget(self.pb_flip_face, 1, 0, 1, 1) + + self.pb_move_wp = QPushButton(self.groupBox_9) + self.pb_move_wp.setObjectName(u"pb_move_wp") + + self.gridLayout_7.addWidget(self.pb_move_wp, 1, 1, 1, 1) + self.gridLayout.addWidget(self.groupBox_9, 0, 0, 1, 1) - self.groupBox_2 = QGroupBox(self.centralwidget) - self.groupBox_2.setObjectName(u"groupBox_2") - sizePolicy2.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth()) - self.groupBox_2.setSizePolicy(sizePolicy2) - self.gridLayout_2 = QGridLayout(self.groupBox_2) - self.gridLayout_2.setObjectName(u"gridLayout_2") - self.pb_rectool = QPushButton(self.groupBox_2) - self.pb_rectool.setObjectName(u"pb_rectool") - self.pb_rectool.setCheckable(True) - self.pb_rectool.setAutoExclusive(False) - - self.gridLayout_2.addWidget(self.pb_rectool, 1, 1, 1, 1, Qt.AlignTop) - - self.pb_circtool = QPushButton(self.groupBox_2) - self.pb_circtool.setObjectName(u"pb_circtool") - self.pb_circtool.setCheckable(True) - self.pb_circtool.setAutoExclusive(False) - - self.gridLayout_2.addWidget(self.pb_circtool, 2, 0, 1, 1, Qt.AlignTop) - - self.pb_slotool = QPushButton(self.groupBox_2) - self.pb_slotool.setObjectName(u"pb_slotool") - self.pb_slotool.setCheckable(True) - self.pb_slotool.setAutoExclusive(False) - - self.gridLayout_2.addWidget(self.pb_slotool, 2, 1, 1, 1, Qt.AlignTop) - - self.pb_linetool = QPushButton(self.groupBox_2) - self.pb_linetool.setObjectName(u"pb_linetool") - self.pb_linetool.setCheckable(True) - self.pb_linetool.setAutoExclusive(False) - - self.gridLayout_2.addWidget(self.pb_linetool, 1, 0, 1, 1) - - - self.gridLayout.addWidget(self.groupBox_2, 1, 0, 1, 1) - self.groupBox_3 = QGroupBox(self.centralwidget) self.groupBox_3.setObjectName(u"groupBox_3") - sizePolicy2.setHeightForWidth(self.groupBox_3.sizePolicy().hasHeightForWidth()) - self.groupBox_3.setSizePolicy(sizePolicy2) + sizePolicy1.setHeightForWidth(self.groupBox_3.sizePolicy().hasHeightForWidth()) + self.groupBox_3.setSizePolicy(sizePolicy1) self.groupBox_3.setMaximumSize(QSize(16777214, 16777213)) self.gridLayout_4 = QGridLayout(self.groupBox_3) self.gridLayout_4.setObjectName(u"gridLayout_4") @@ -336,6 +236,126 @@ class Ui_fluencyCAD(object): self.gridLayout.addWidget(self.groupBox_3, 2, 0, 1, 1) + self.InputTab = QTabWidget(self.centralwidget) + self.InputTab.setObjectName(u"InputTab") + sizePolicy2 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + sizePolicy2.setHorizontalStretch(0) + sizePolicy2.setVerticalStretch(0) + sizePolicy2.setHeightForWidth(self.InputTab.sizePolicy().hasHeightForWidth()) + self.InputTab.setSizePolicy(sizePolicy2) + self.sketch_tab = QWidget() + self.sketch_tab.setObjectName(u"sketch_tab") + self.verticalLayout_4 = QVBoxLayout(self.sketch_tab) + self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.InputTab.addTab(self.sketch_tab, "") + self.code_tab = QWidget() + self.code_tab.setObjectName(u"code_tab") + self.verticalLayout = QVBoxLayout(self.code_tab) + self.verticalLayout.setObjectName(u"verticalLayout") + self.textEdit = QTextEdit(self.code_tab) + self.textEdit.setObjectName(u"textEdit") + + self.verticalLayout.addWidget(self.textEdit) + + self.groupBox_7 = QGroupBox(self.code_tab) + self.groupBox_7.setObjectName(u"groupBox_7") + self.gridLayout_5 = QGridLayout(self.groupBox_7) + self.gridLayout_5.setObjectName(u"gridLayout_5") + self.pushButton_5 = QPushButton(self.groupBox_7) + self.pushButton_5.setObjectName(u"pushButton_5") + + self.gridLayout_5.addWidget(self.pushButton_5, 2, 0, 1, 1) + + self.pushButton_4 = QPushButton(self.groupBox_7) + self.pushButton_4.setObjectName(u"pushButton_4") + + self.gridLayout_5.addWidget(self.pushButton_4, 2, 1, 1, 1) + + self.pb_apply_code = QPushButton(self.groupBox_7) + self.pb_apply_code.setObjectName(u"pb_apply_code") + + self.gridLayout_5.addWidget(self.pb_apply_code, 1, 0, 1, 1) + + self.pushButton = QPushButton(self.groupBox_7) + self.pushButton.setObjectName(u"pushButton") + + self.gridLayout_5.addWidget(self.pushButton, 1, 1, 1, 1) + + + self.verticalLayout.addWidget(self.groupBox_7) + + self.InputTab.addTab(self.code_tab, "") + + self.gridLayout.addWidget(self.InputTab, 0, 2, 12, 1) + + self.groupBox_4 = QGroupBox(self.centralwidget) + self.groupBox_4.setObjectName(u"groupBox_4") + self.verticalLayout_2 = QVBoxLayout(self.groupBox_4) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.pushButton_2 = QPushButton(self.groupBox_4) + self.pushButton_2.setObjectName(u"pushButton_2") + + self.verticalLayout_2.addWidget(self.pushButton_2) + + + self.gridLayout.addWidget(self.groupBox_4, 11, 5, 1, 1) + + self.groupBox_2 = QGroupBox(self.centralwidget) + self.groupBox_2.setObjectName(u"groupBox_2") + sizePolicy1.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth()) + self.groupBox_2.setSizePolicy(sizePolicy1) + self.gridLayout_2 = QGridLayout(self.groupBox_2) + self.gridLayout_2.setObjectName(u"gridLayout_2") + self.pb_rectool = QPushButton(self.groupBox_2) + self.pb_rectool.setObjectName(u"pb_rectool") + self.pb_rectool.setCheckable(True) + self.pb_rectool.setAutoExclusive(False) + + self.gridLayout_2.addWidget(self.pb_rectool, 1, 1, 1, 1, Qt.AlignTop) + + self.pb_circtool = QPushButton(self.groupBox_2) + self.pb_circtool.setObjectName(u"pb_circtool") + self.pb_circtool.setCheckable(True) + self.pb_circtool.setAutoExclusive(False) + + self.gridLayout_2.addWidget(self.pb_circtool, 2, 0, 1, 1, Qt.AlignTop) + + self.pb_slotool = QPushButton(self.groupBox_2) + self.pb_slotool.setObjectName(u"pb_slotool") + self.pb_slotool.setCheckable(True) + self.pb_slotool.setAutoExclusive(False) + + self.gridLayout_2.addWidget(self.pb_slotool, 2, 1, 1, 1, Qt.AlignTop) + + self.pb_linetool = QPushButton(self.groupBox_2) + self.pb_linetool.setObjectName(u"pb_linetool") + self.pb_linetool.setCheckable(True) + self.pb_linetool.setAutoExclusive(False) + + self.gridLayout_2.addWidget(self.pb_linetool, 1, 0, 1, 1) + + + self.gridLayout.addWidget(self.groupBox_2, 1, 0, 1, 1) + + self.gl_box = QGroupBox(self.centralwidget) + self.gl_box.setObjectName(u"gl_box") + sizePolicy3 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + sizePolicy3.setHorizontalStretch(0) + sizePolicy3.setVerticalStretch(4) + sizePolicy3.setHeightForWidth(self.gl_box.sizePolicy().hasHeightForWidth()) + self.gl_box.setSizePolicy(sizePolicy3) + font = QFont() + font.setPointSize(12) + self.gl_box.setFont(font) + self.horizontalLayout_4 = QHBoxLayout(self.gl_box) +#ifndef Q_OS_MAC + self.horizontalLayout_4.setSpacing(-1) +#endif + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.horizontalLayout_4.setContentsMargins(12, -1, -1, -1) + + self.gridLayout.addWidget(self.gl_box, 0, 4, 12, 1) + fluencyCAD.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(fluencyCAD) self.menubar.setObjectName(u"menubar") @@ -355,13 +375,13 @@ class Ui_fluencyCAD(object): def retranslateUi(self, fluencyCAD): fluencyCAD.setWindowTitle(QCoreApplication.translate("fluencyCAD", u"fluencyCAD", None)) - self.InputTab.setTabText(self.InputTab.indexOf(self.sketch_tab), QCoreApplication.translate("fluencyCAD", u"Sketch", None)) - self.groupBox_7.setTitle(QCoreApplication.translate("fluencyCAD", u"Executive", None)) - self.pushButton_5.setText(QCoreApplication.translate("fluencyCAD", u"Load Code", None)) - self.pushButton_4.setText(QCoreApplication.translate("fluencyCAD", u"Save code", None)) - self.pb_apply_code.setText(QCoreApplication.translate("fluencyCAD", u"Apply Code", None)) - self.pushButton.setText(QCoreApplication.translate("fluencyCAD", u"Delete Code", None)) - self.InputTab.setTabText(self.InputTab.indexOf(self.code_tab), QCoreApplication.translate("fluencyCAD", u"Code", None)) + self.groupBox.setTitle(QCoreApplication.translate("fluencyCAD", u"Modify", None)) + self.pb_revop.setText(QCoreApplication.translate("fluencyCAD", u"Rev", None)) + self.pb_extrdop.setText(QCoreApplication.translate("fluencyCAD", u"Extrd", None)) + self.pb_arrayop.setText(QCoreApplication.translate("fluencyCAD", u"Arry", None)) + self.pb_cutop.setText(QCoreApplication.translate("fluencyCAD", u"Cut", None)) + self.pb_combop.setText(QCoreApplication.translate("fluencyCAD", u"Comb", None)) + self.pb_moveop.setText(QCoreApplication.translate("fluencyCAD", u"Mve", None)) self.groupBox_5.setTitle(QCoreApplication.translate("fluencyCAD", u"Sketch", None)) self.groupBox_6.setTitle(QCoreApplication.translate("fluencyCAD", u"Tools", None)) self.pb_del_sketch.setText(QCoreApplication.translate("fluencyCAD", u"Del sketch", None)) @@ -371,30 +391,85 @@ class Ui_fluencyCAD(object): self.pb_del_body.setText(QCoreApplication.translate("fluencyCAD", u"Del Bdy", None)) self.pb_update_body.setText(QCoreApplication.translate("fluencyCAD", u"Bdy Upd", None)) self.pb_edt_sktch_3.setText(QCoreApplication.translate("fluencyCAD", u"Nothing", None)) + self.groupBox_9.setTitle(QCoreApplication.translate("fluencyCAD", u"Workplanes", None)) +#if QT_CONFIG(tooltip) + self.pb_origin_wp.setToolTip(QCoreApplication.translate("fluencyCAD", u"orking Plane at 0, 0, 0", None)) +#endif // QT_CONFIG(tooltip) + self.pb_origin_wp.setText(QCoreApplication.translate("fluencyCAD", u"WP Origin", None)) +#if QT_CONFIG(shortcut) + self.pb_origin_wp.setShortcut(QCoreApplication.translate("fluencyCAD", u"W", None)) +#endif // QT_CONFIG(shortcut) +#if QT_CONFIG(tooltip) + self.pb_origin_face.setToolTip(QCoreApplication.translate("fluencyCAD", u"Working Plane >PNMS 2: pass + def clear_edge_select(self, ): + # Clear selection after projection was succesful + self.selected_edges = [] + self.selected_normal = [] + def clear_actors_projection(self): + """Removes all actors that were used for projection""" + for edge_line in self.picked_edge_actors: + self.renderer.RemoveActor(edge_line) + + for normals in self.displayed_normal_actors: + self.renderer.RemoveActor(normals) + + def compute_projection(self, direction_invert: bool= False): + # Compute the normal from the two selected edges ) + edge1 = self.selected_edges[0][1] - self.selected_edges[0][0] + edge2 = self.selected_edges[1][1] - self.selected_edges[1][0] + selected_normal = np.cross(edge1, edge2) + selected_normal = selected_normal / np.linalg.norm(selected_normal) + #print("Computed normal:", self.selected_normal) + + # Invert the normal in local z if direction_invert is True + if direction_invert: + self.selected_normal = -selected_normal + else: + self.selected_normal = selected_normal + + centroid = np.mean([point for edge in self.selected_edges for point in edge], axis=0) + + # Draw the normal line + normal_length = 50 # Adjust this value to change the length of the normal line + normal_actor = self.add_normal_line(centroid, self.selected_normal, length=normal_length, + color=(1, 0, 0)) + + polydata = self.picker.GetActor().GetMapper().GetInput() + + projected_polydata = self.project_mesh_to_plane(polydata, self.selected_normal, centroid) + projected_points = projected_polydata.GetPoints() + #print("proj_points", projected_points) + + # Extract 2D coordinates + self.project_tosketch_edge = self.compute_2d_coordinates(projected_polydata, self.selected_normal) + #print("3d_points_proj", self.project_tosketch_edge) + + # Create a mapper and actor for the projected data + mapper = vtk.vtkPolyDataMapper() + mapper.SetInputData(projected_polydata) + + actor = vtk.vtkActor() + actor.SetMapper(mapper) + actor.GetProperty().SetColor(0.0, 1.0, 0.0) # Set color to green + actor.GetProperty().SetLineWidth(4) # Set line width + + self.renderer.AddActor(normal_actor) + self.displayed_normal_actors.append(normal_actor) + + # Add the actor to the scene + self.renderer.AddActor(actor) + self.picked_edge_actors.append(actor) # Render the scene self.vtk_widget.GetRenderWindow().Render() diff --git a/gui.ui b/gui.ui index c056d4b..fbeea87 100644 --- a/gui.ui +++ b/gui.ui @@ -15,73 +15,58 @@ - - - - - 0 - 0 - + + + + Modify - - 0 - - - - Sketch - - - - - - Code - - - - - - - - - Executive - - - - - - Load Code - - - - - - - Save code - - - - - - - Apply Code - - - - - - - Delete Code - - - - - - - - + + + + + Rev + + + + + + + Extrd + + + + + + + Arry + + + + + + + Cut + + + + + + + Comb + + + + + + + Mve + + + + - + @@ -212,7 +197,277 @@ - + + + + Workplanes + + + + + + <W>orking Plane at 0, 0, 0 + + + WP Origin + + + W + + + + + + + Working Plane >P<rojection at selected edges face + + + WP Face + + + P + + + + + + + Flip >N<ormal of projected mesh. + + + WP Flip + + + N + + + + + + + >M<ove projected mesh workplane + + + WP Mve + + + M + + + + + + + + + + + 0 + 0 + + + + + 16777214 + 16777213 + + + + Constrain + + + + + + Point to Line Constrain + + + Pt_Lne + + + true + + + false + + + + + + + Poin to Point Constrain + + + Pt_Pt + + + true + + + false + + + + + + + Horizontal Constrain + + + Horiz + + + true + + + false + + + + + + + Vertical Constrain + + + Vert + + + true + + + false + + + + + + + Symetrc + + + true + + + false + + + + + + + Dimension of Line of Distance from Point to Line + + + Distnce + + + true + + + false + + + 297 + + + + + + + Point to Middle Point Constrain + + + Pt_Mid_L + + + true + + + + + + + Constrain Line perpendicular to another line. + + + Perp_Lne + + + true + + + + + + + + + + + 0 + 0 + + + + 0 + + + + Sketch + + + + + + Code + + + + + + + + + Executive + + + + + + Load Code + + + + + + + Save code + + + + + + + Apply Code + + + + + + + Delete Code + + + + + + + + + + + Export @@ -228,92 +483,6 @@ - - - - - 0 - 4 - - - - - 12 - - - - Model Viewer - - - - -1 - - - 12 - - - - - - - - Modify - - - - - - Extrd - - - - - - - Cut - - - - - - - Arry - - - - - - - Rev - - - - - - - - - - Workplanes - - - - - - WP Origin - - - - - - - WP Face - - - - - - @@ -367,8 +536,14 @@ + + Line >S<egment + - Line + Line + + + S true @@ -381,125 +556,29 @@ - - + + - + 0 - 0 + 4 - - - 16777214 - 16777213 - + + + 12 + - Constrain + Model Viewer - - - - - Pt_Lne - - - true - - - false - - - - - - - Pt_Pt - - - true - - - false - - - - - - - Horiz - - - true - - - false - - - - - - - Vert - - - true - - - false - - - - - - - Symetrc - - - true - - - false - - - - - - - Distnce - - - true - - - false - - - 297 - - - - - - - Pt_Mid_L - - - true - - - - - - - Perp_Lne - - - true - - - + + + -1 + + + 12 + diff --git a/main.py b/main.py index ed027e8..c39de80 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ import uuid import names -from PySide6.QtCore import Qt, QPoint +from PySide6.QtCore import Qt, QPoint, Signal from PySide6.QtWidgets import QApplication, QMainWindow, QSizePolicy, QInputDialog, QDialog, QVBoxLayout, QHBoxLayout, QLabel, QDoubleSpinBox, QCheckBox, QPushButton from Gui import Ui_fluencyCAD # Import the generated GUI module from drawing_modules.vtk_widget import VTKWidget @@ -10,7 +10,6 @@ from sdf import * from python_solvespace import SolverSystem, ResultFlag from mesh_modules import simple_mesh, vesta_mesh, interactor_mesh - # main, draw_widget, gl_widget class ExtrudeDialog(QDialog): @@ -52,6 +51,8 @@ class ExtrudeDialog(QDialog): return self.length_input.value(), self.symmetric_checkbox.isChecked() class MainWindow(QMainWindow): + send_command = Signal(str) + def __init__(self): super().__init__() @@ -90,6 +91,8 @@ class MainWindow(QMainWindow): self.ui.pb_del_sketch.pressed.connect(self.del_sketch) self.ui.pb_edt_sktch.pressed.connect(self.edit_sketch) + 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) @@ -105,6 +108,12 @@ class MainWindow(QMainWindow): self.ui.pb_del_body.pressed.connect(self.del_body) self.sketchWidget.constrain_done.connect(self.draw_op_complete) + self.setFocusPolicy(Qt.StrongFocus) + + self.send_command.connect(self.custom_3D_Widget.on_receive_command) + + def on_flip_face(self): + self.send_command.emit("flip") def add_new_sketch_origin(self): self.sketchWidget.clear_sketch() @@ -119,6 +128,10 @@ class MainWindow(QMainWindow): self.sketchWidget.create_workplane_projected() self.sketchWidget.create_proj_lines(edges) + # CLear all selections after it has been projected + self.custom_3D_Widget.clear_edge_select() + self.custom_3D_Widget.clear_actors_projection() + #self.sketchWidget.create_workplane_space(edges, normal) def act_line_mode(self): @@ -476,4 +489,4 @@ if __name__ == "__main__": window.show() app.exec() - #pyside6-uic gui.ui > Gui.py -g python \ No newline at end of file +