feat: 完善 STEP 一级参数化编辑识别与关系式建模
This commit is contained in:
+102
-1
@@ -12,13 +12,14 @@ import vtkmodules.vtkInteractionWidgets # noqa: F401
|
||||
import vtkmodules.vtkInteractionStyle # noqa: F401
|
||||
import vtkmodules.vtkRenderingFreeType # noqa: F401
|
||||
import vtkmodules.vtkRenderingOpenGL2 # noqa: F401
|
||||
from PySide6.QtCore import Qt, QThread, QTimer, Signal, Slot
|
||||
from PySide6.QtCore import Qt, QThread, QTimer, Signal, Slot, QStringListModel
|
||||
from PySide6.QtGui import QIcon
|
||||
from PySide6.QtWidgets import (
|
||||
QAbstractItemView,
|
||||
QApplication,
|
||||
QCheckBox,
|
||||
QComboBox,
|
||||
QCompleter,
|
||||
QFileDialog,
|
||||
QFrame,
|
||||
QGridLayout,
|
||||
@@ -161,6 +162,9 @@ class StepEditorWindow(WindowCoreMixin, WindowStateMixin, WindowActionMixin, Inf
|
||||
self.selected_face_id: int | None = None
|
||||
self.selected_edge_id: int | None = None
|
||||
self.selected_pick_position: tuple[float, float, float] | None = None
|
||||
self.multi_selected_feature_face_ids: list[int] = []
|
||||
self.multi_selected_hole_entries: list[dict[str, object]] = []
|
||||
self.multi_selection_active = False
|
||||
|
||||
self.model_actor = None
|
||||
self.edge_actor = None
|
||||
@@ -253,6 +257,9 @@ class StepEditorWindow(WindowCoreMixin, WindowStateMixin, WindowActionMixin, Inf
|
||||
self.pending_scan_kind: str | None = None
|
||||
self.pending_scan_context: dict[str, object] | None = None
|
||||
self.scan_wait_cursor_active = False
|
||||
self.asitus_thread: QThread | None = None
|
||||
self.asitus_worker: ScanWorker | None = None
|
||||
self.pending_asitus_context: dict[str, object] | None = None
|
||||
self.load_in_progress = False
|
||||
self.load_thread: QThread | None = None
|
||||
self.load_worker: LoadWorker | None = None
|
||||
@@ -278,6 +285,8 @@ class StepEditorWindow(WindowCoreMixin, WindowStateMixin, WindowActionMixin, Inf
|
||||
self.property_editor_selected_row: int | None = None
|
||||
self.property_command_active_key = ""
|
||||
self.property_command_buttons: dict[str, QPushButton] = {}
|
||||
self.relation_formula_items: list[dict[str, object]] = []
|
||||
self.relation_formula_next_id = 1
|
||||
|
||||
self._build_ui()
|
||||
self._build_vtk()
|
||||
@@ -879,6 +888,47 @@ class StepEditorWindow(WindowCoreMixin, WindowStateMixin, WindowActionMixin, Inf
|
||||
QLineEdit#propertyCardTargetEditor:focus {
|
||||
border-color: #2563eb;
|
||||
}
|
||||
QGroupBox#relationFormulaBox {
|
||||
margin-top: 2px;
|
||||
}
|
||||
QLineEdit#relationFormulaInput {
|
||||
background: #ffffff;
|
||||
border: 1px solid #b7c6d9;
|
||||
border-radius: 5px;
|
||||
color: #172033;
|
||||
min-height: 24px;
|
||||
padding: 3px 6px;
|
||||
}
|
||||
QLineEdit#relationFormulaInput:focus {
|
||||
border: 1px solid #2563eb;
|
||||
}
|
||||
QPushButton#relationFormulaAddButton,
|
||||
QPushButton#relationFormulaRemoveButton {
|
||||
background: #f8fafc;
|
||||
border: 1px solid #94a3b8;
|
||||
border-radius: 5px;
|
||||
color: #1f2937;
|
||||
font-weight: 700;
|
||||
min-height: 26px;
|
||||
padding: 3px 8px;
|
||||
}
|
||||
QPushButton#relationFormulaAddButton:hover,
|
||||
QPushButton#relationFormulaRemoveButton:hover {
|
||||
background: #eef6ff;
|
||||
border-color: #2563eb;
|
||||
color: #1e3a8a;
|
||||
}
|
||||
QPushButton#relationFormulaAddButton:disabled,
|
||||
QPushButton#relationFormulaRemoveButton:disabled {
|
||||
background: #eef2f6;
|
||||
border: 1px dashed #bcc7d4;
|
||||
color: #8f99a8;
|
||||
}
|
||||
QListWidget#relationFormulaList {
|
||||
background: #ffffff;
|
||||
border: 1px solid #d8e0eb;
|
||||
border-radius: 5px;
|
||||
}
|
||||
QTabWidget::pane {
|
||||
border: 1px solid #d8e0eb;
|
||||
border-radius: 6px;
|
||||
@@ -1237,6 +1287,57 @@ class StepEditorWindow(WindowCoreMixin, WindowStateMixin, WindowActionMixin, Inf
|
||||
self.property_expand_button.setMaximumHeight(22)
|
||||
self.property_expand_button.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
|
||||
object_edit_layout.addWidget(self.property_expand_button)
|
||||
|
||||
self.relation_formula_box = QGroupBox("关系式")
|
||||
self.relation_formula_box.setObjectName("relationFormulaBox")
|
||||
help_tip(
|
||||
self.relation_formula_box,
|
||||
"用 FaceID.参数 = 表达式 的形式建立关系式。第一版会先计算公式并回填当前参数表目标值,再执行参数化建模。",
|
||||
)
|
||||
relation_layout = QVBoxLayout(self.relation_formula_box)
|
||||
relation_layout.setContentsMargins(6, 8, 6, 6)
|
||||
relation_layout.setSpacing(5)
|
||||
relation_input_row = QHBoxLayout()
|
||||
relation_input_row.setContentsMargins(0, 0, 0, 0)
|
||||
relation_input_row.setSpacing(5)
|
||||
self.relation_formula_input = QLineEdit("")
|
||||
self.relation_formula_input.setObjectName("relationFormulaInput")
|
||||
self.relation_formula_input.setPlaceholderText("Face87.直径 = Face85.直径")
|
||||
help_tip(
|
||||
self.relation_formula_input,
|
||||
"示例:Face87.直径 = Face85.直径,或 Face87.位置 = Face85.位置 + (0, 0, -3.5)。输入 Face87. 后会提示当前可用参数。",
|
||||
)
|
||||
self.relation_formula_completer_model = QStringListModel(self)
|
||||
self.relation_formula_completer = QCompleter(self.relation_formula_completer_model, self)
|
||||
self.relation_formula_completer.setCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive)
|
||||
self.relation_formula_completer.setCompletionMode(QCompleter.CompletionMode.PopupCompletion)
|
||||
self.relation_formula_input.setCompleter(self.relation_formula_completer)
|
||||
self.relation_formula_input.installEventFilter(self)
|
||||
self.relation_formula_input.textChanged.connect(self._on_relation_formula_input_changed)
|
||||
self.relation_formula_input.returnPressed.connect(self.add_relation_formula)
|
||||
self.add_relation_formula_button = QPushButton("添加公式")
|
||||
self.add_relation_formula_button.setObjectName("relationFormulaAddButton")
|
||||
self.add_relation_formula_button.clicked.connect(self.add_relation_formula)
|
||||
relation_input_row.addWidget(self.relation_formula_input, stretch=1)
|
||||
relation_input_row.addWidget(self.add_relation_formula_button)
|
||||
relation_layout.addLayout(relation_input_row)
|
||||
self.relation_formula_list = QListWidget()
|
||||
self.relation_formula_list.setObjectName("relationFormulaList")
|
||||
self.relation_formula_list.setMinimumHeight(54)
|
||||
self.relation_formula_list.setMaximumHeight(86)
|
||||
self.relation_formula_list.itemSelectionChanged.connect(self._update_relation_formula_buttons)
|
||||
help_tip(self.relation_formula_list, "已建立的关系式。失效或暂不能映射的公式会在这里标出原因。")
|
||||
relation_layout.addWidget(self.relation_formula_list)
|
||||
relation_button_row = QHBoxLayout()
|
||||
relation_button_row.setContentsMargins(0, 0, 0, 0)
|
||||
relation_button_row.addStretch(1)
|
||||
self.remove_relation_formula_button = QPushButton("删除公式")
|
||||
self.remove_relation_formula_button.setObjectName("relationFormulaRemoveButton")
|
||||
self.remove_relation_formula_button.clicked.connect(self.remove_selected_relation_formula)
|
||||
relation_button_row.addWidget(self.remove_relation_formula_button)
|
||||
relation_layout.addLayout(relation_button_row)
|
||||
object_edit_layout.addWidget(self.relation_formula_box)
|
||||
|
||||
property_action_row = QHBoxLayout()
|
||||
property_action_row.setContentsMargins(0, 0, 0, 0)
|
||||
self.apply_property_button = QPushButton("参数化建模")
|
||||
|
||||
Reference in New Issue
Block a user