using CaeGlobals; using CaeMesh; using CaeModel; using System; using System.Drawing; using System.Threading.Tasks; using System.Windows.Forms; // ReSharper disable CheckNamespace #pragma warning disable IDE0130 namespace CPSO.Forms { partial class FrmMeshSetupItem : UserControls.FrmPropertyListView, IFormBase, IFormItemSetDataParent, IFormHighlight { // Variables private string[] _meshSetupItemNames; private string _meshSetupItemToEditName; private ViewMeshSetupItem _viewMeshSetupItem; private Controller _controller; private bool _meshingParametersChanged; // 控件 private ContextMenuStrip cmsPropertyGrid; private System.ComponentModel.IContainer components; private ToolStripMenuItem tsmiResetAll; private ToolTip ttText; private Button btnPreview; // Callbacks public Func PreviewEdgeMeshAsync; // Properties public MeshSetupItem MeshSetupItem { get => _viewMeshSetupItem?.GetBase(); set { if (value is MeshingParameters mp) { bool defaultSizeIsRelative = _controller.Settings.Meshing.MeshingParameters.RelativeSize; // bool advancedView = mp.AdvancedView; if (_viewMeshSetupItem != null && _viewMeshSetupItem is ViewMeshingParameters vmp) advancedView = vmp.AdvancedView; // _viewMeshSetupItem = new ViewMeshingParameters(mp.DeepClone(), defaultSizeIsRelative, advancedView); } else if (value is FeMeshRefinement mr) _viewMeshSetupItem = new ViewFeMeshRefinement(mr.DeepClone()); else if (value is ShellGmsh sg) _viewMeshSetupItem = new ViewShellGmsh(sg.DeepClone()); else if (value is ThickenShellMesh tsm) _viewMeshSetupItem = new ViewThickenShellMesh(tsm.DeepClone()); else if (value is TetrahedralGmsh tg) _viewMeshSetupItem = new ViewTetrahedralGmsh(tg.DeepClone()); else if (value is TransfiniteMesh tm) _viewMeshSetupItem = new ViewTransfiniteMesh(tm.DeepClone()); else if (value is ExtrudeMesh em) _viewMeshSetupItem = new ViewExtrudeMesh(em.DeepClone()); else if (value is SweepMesh sm) _viewMeshSetupItem = new ViewSweepMesh(sm.DeepClone()); else if (value is RevolveMesh rm) _viewMeshSetupItem = new ViewRevolveMesh(rm.DeepClone()); else throw new NotImplementedException("MeshSetupItemTypeException"); } } // Constructors public FrmMeshSetupItem(Controller controller) : base(1.72) { InitializeComponent(); _controller = controller; _viewMeshSetupItem = null; // 界面本地化 gbType.Text = @"类型"; gbProperties.Text = @"参数"; // 大图标方式显示 ImageList imageList = new ImageList(); imageList.ImageSize = new Size(32, 32); foreach (var key in new[]{"Meshing_Parameters", "Mesh_Refinement", "Shell_Gmsh", "Thicken_Shell_Mesh", "Tetrahedral_Gmsh", "Transfinite_Mesh", "Extrude_Mesh", "Sweep_Mesh", "Revolve_Mesh" }) { imageList.Images.Add(key, EmbeddedResource.Properties.Resource.Icon1); } lvTypes.LargeImageList = imageList; lvTypes.View = View.LargeIcon; } private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.cmsPropertyGrid = new System.Windows.Forms.ContextMenuStrip(this.components); this.tsmiResetAll = new System.Windows.Forms.ToolStripMenuItem(); this.btnPreview = new System.Windows.Forms.Button(); this.ttText = new System.Windows.Forms.ToolTip(this.components); this.gbType.SuspendLayout(); this.gbProperties.SuspendLayout(); this.cmsPropertyGrid.SuspendLayout(); this.SuspendLayout(); // // gbType // this.gbType.Size = new System.Drawing.Size(340, 101); // // lvTypes // this.lvTypes.Size = new System.Drawing.Size(328, 73); // // gbProperties // this.gbProperties.Size = new System.Drawing.Size(340, 310); // // propertyGrid // this.propertyGrid.ContextMenuStrip = this.cmsPropertyGrid; this.propertyGrid.Size = new System.Drawing.Size(328, 282); // // btnOK // this.btnOK.Location = new System.Drawing.Point(190, 436); // // btnCancel // this.btnCancel.Location = new System.Drawing.Point(271, 436); // // btnOkAddNew // this.btnOkAddNew.Location = new System.Drawing.Point(109, 436); // // cmsPropertyGrid // this.cmsPropertyGrid.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.tsmiResetAll}); this.cmsPropertyGrid.Name = "cmsPropertyGrid"; this.cmsPropertyGrid.Size = new System.Drawing.Size(118, 26); // // tsmiResetAll // this.tsmiResetAll.Name = "tsmiResetAll"; this.tsmiResetAll.Size = new System.Drawing.Size(117, 22); this.tsmiResetAll.Text = @"Reset all"; this.tsmiResetAll.Click += new System.EventHandler(this.tsmiResetAll_Click); // // btnPreview // this.btnPreview.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.btnPreview.Image = global::CPSO.Properties.Resources.Show; this.btnPreview.Location = new System.Drawing.Point(75, 436); this.btnPreview.Name = "btnPreview"; this.btnPreview.Size = new System.Drawing.Size(28, 23); this.btnPreview.TabIndex = 17; this.ttText.SetToolTip(this.btnPreview, "Preview"); this.btnPreview.UseVisualStyleBackColor = true; this.btnPreview.Click += new System.EventHandler(this.btnPreview_Click); // // FrmMeshSetupItem // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.ClientSize = new System.Drawing.Size(364, 471); this.Controls.Add(this.btnPreview); this.MinimumSize = new System.Drawing.Size(380, 510); this.Name = "FrmMeshSetupItem"; this.Text = "Edit Mesh Setup Item"; this.VisibleChanged += new System.EventHandler(this.FrmMeshSetupItem_VisibleChanged); this.Controls.SetChildIndex(this.gbProperties, 0); this.Controls.SetChildIndex(this.btnCancel, 0); this.Controls.SetChildIndex(this.btnOK, 0); this.Controls.SetChildIndex(this.btnOkAddNew, 0); this.Controls.SetChildIndex(this.gbType, 0); this.Controls.SetChildIndex(this.btnPreview, 0); this.gbType.ResumeLayout(false); this.gbProperties.ResumeLayout(false); this.cmsPropertyGrid.ResumeLayout(false); this.ResumeLayout(false); } // Event handlers private void FrmMeshSetupItem_VisibleChanged(object sender, EventArgs e) { _controller.Selection.LimitSelectionToFirstMesherType = Visible; // accounts for minimizing/maximizing the main form if (Visible) { ShowHideSelectionForm(); } } // 重新设置参数 private void tsmiResetAll_Click(object sender, EventArgs e) { if (MeshSetupItem != null) { if (MeshSetupItem is MeshingParameters mp) { mp.CopyFrom(GetDefaultMeshingParameters(MeshSetupItem.CreationIds)); ((ViewMeshingParameters)_viewMeshSetupItem).AdvancedView = mp.AdvancedView; // update advanced view _meshingParametersChanged = false; } else if (MeshSetupItem is FeMeshRefinement mr) mr.Reset(); else if (MeshSetupItem is ShellGmsh sg) sg.Reset(); else if (MeshSetupItem is ThickenShellMesh tsm) tsm.Reset(); else if (MeshSetupItem is TetrahedralGmsh tg) tg.Reset(); else if (MeshSetupItem is TransfiniteMesh tm) tm.Reset(); else if (MeshSetupItem is ExtrudeMesh em) em.Reset(); else if (MeshSetupItem is SweepMesh sm) sm.Reset(); else if (MeshSetupItem is RevolveMesh rm) rm.Reset(); else throw new NotSupportedException("MeshSetupItemTypeException"); // _propertyItemChanged = true; // propertyGrid.Refresh(); } } private async void btnPreview_Click(object sender, EventArgs e) { try { Enabled = false; ItemSetDataEditor.SelectionForm.Enabled = false; // string[] partNames; if (MeshSetupItem is MeshingParameters || MeshSetupItem is TetrahedralGmsh || MeshSetupItem is TransfiniteMesh) { partNames = _controller.DisplayedMesh.GetPartNamesFromPartIds(MeshSetupItem.CreationIds); } else if (MeshSetupItem is ShellGmsh || MeshSetupItem is ThickenShellMesh || MeshSetupItem is FeMeshRefinement || MeshSetupItem is ExtrudeMesh || MeshSetupItem is SweepMesh || MeshSetupItem is RevolveMesh) { partNames = _controller.DisplayedMesh.GetPartNamesFromGeometryIds(MeshSetupItem.CreationIds); } else throw new NotSupportedException("MeshSetupItemTypeException"); // if (partNames != null && partNames.Length > 0) { HighlightMeshSetupItem(false); // await PreviewEdgeMeshAsync?.Invoke(partNames, MeshSetupItem); } } catch (Exception ex) { ExceptionTools.Show(this, ex); } finally { Enabled = true; ItemSetDataEditor.SelectionForm.Enabled = true; } } // Overrides protected override void OnListViewTypeSelectedIndexChanged() { // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (lvTypes.SelectedItems != null && lvTypes.SelectedItems.Count > 0) { object itemTag = lvTypes.SelectedItems[0].Tag; if (itemTag != null) { if (itemTag is ViewMeshingParameters vmp) _viewMeshSetupItem = vmp; else if (itemTag is ViewFeMeshRefinement vmr) _viewMeshSetupItem = vmr; else if (itemTag is ViewShellGmsh vsg) _viewMeshSetupItem = vsg; else if (itemTag is ViewThickenShellMesh vtsm) _viewMeshSetupItem = vtsm; else if (itemTag is ViewTetrahedralGmsh vtg) _viewMeshSetupItem = vtg; else if (itemTag is ViewTransfiniteMesh vtm) _viewMeshSetupItem = vtm; else if (itemTag is ViewExtrudeMesh vem) _viewMeshSetupItem = vem; else if (itemTag is ViewSweepMesh vsm) _viewMeshSetupItem = vsm; else if (itemTag is ViewRevolveMesh vrm) _viewMeshSetupItem = vrm; else throw new NotImplementedException("MeshSetupItemTypeException"); } // 显示选择对话框 ShowHideSelectionForm(); // propertyGrid.SelectedObject = _viewMeshSetupItem; // HighlightMeshSetupItem(); } } protected override void OnPropertyGridPropertyValueChanged() { if (propertyGrid.SelectedGridItem.PropertyDescriptor != null) { string property = propertyGrid.SelectedGridItem.PropertyDescriptor.Name; // if (_viewMeshSetupItem is ViewMeshingParameters vmp && property != nameof(vmp.Name) && property != nameof(vmp.AdvancedView)) { _meshingParametersChanged = true; } } HighlightMeshSetupItem(); base.OnPropertyGridPropertyValueChanged(); } protected override void OnApply(bool onOkAddNew) { _viewMeshSetupItem = (ViewMeshSetupItem)propertyGrid.SelectedObject; // if (_viewMeshSetupItem == null) throw new CaeException("No mesh setup item was selected."); // Check if the name exists CheckName(_meshSetupItemToEditName, MeshSetupItem.Name, _meshSetupItemNames, "mesh setup item"); // if (MeshSetupItem.CreationIds == null || MeshSetupItem.CreationIds.Length == 0) throw new CaeException("The mesh setup item selection must contain at least one item."); // string error = _controller.IsMeshSetupItemProperlyDefined(MeshSetupItem); if (error != null) throw new CaeException(error); // When opened from regenerate if (this.Modal) { } // When opened normally else { // Create if (_meshSetupItemToEditName == null) { _controller.AddMeshSetupItemCommand(MeshSetupItem); } // Replace else if (_propertyItemChanged) { _controller.ReplaceMeshSetupItemCommand(_meshSetupItemToEditName, MeshSetupItem); } } // If all is successful close the ItemSetSelectionForm - except for OKAddNew if (!onOkAddNew) { DialogResult = DialogResult.OK; ItemSetDataEditor.SelectionForm.Hide(); } } protected override void OnHideOrClose() { // Close the ItemSetSelectionForm ItemSetDataEditor.SelectionForm.Hide(); // base.OnHideOrClose(); } protected override bool OnPrepareForm(string stepName, string meshSetupItemToEditName) { DialogResult = DialogResult.None; // int dx = btnCancel.Left - btnOK.Right; if (meshSetupItemToEditName == null) { btnOkAddNew.Visible = true; btnPreview.Visible = true; btnPreview.Location = new System.Drawing.Point(btnOkAddNew.Left - dx - btnPreview.Width, btnOkAddNew.Top); } else { btnOkAddNew.Visible = false; btnPreview.Visible = true; btnPreview.Location = new System.Drawing.Point(btnOK.Left - dx - btnPreview.Width, btnOkAddNew.Top); } // _propertyItemChanged = false; _meshSetupItemNames = null; _meshSetupItemToEditName = null; _viewMeshSetupItem = null; lvTypes.Items.Clear(); propertyGrid.SelectedObject = null; _meshingParametersChanged = false; _controller.ClearAllSelection(); // _meshSetupItemNames = _controller.GetMeshSetupItemNames(); _meshSetupItemToEditName = meshSetupItemToEditName; _meshingParametersChanged = _meshSetupItemToEditName != null; // if (_meshSetupItemNames == null) throw new CaeException("The mesh setup item names must be defined first."); // PopulateListOfMeshSetupItems(); // Create new mesh setup item if (_meshSetupItemToEditName == null) { lvTypes.Enabled = true; _viewMeshSetupItem = null; } // Edit existing mesh setup item else { MeshSetupItem = _controller.GetMeshSetupItem(_meshSetupItemToEditName); // to clone // Check validity if (!MeshSetupItem.Valid) { MeshSetupItem.CreationData = null; MeshSetupItem.CreationIds = null; MeshSetupItem.Valid = true; } int selectedId; if (_viewMeshSetupItem is ViewMeshingParameters) selectedId = 0; else if (_viewMeshSetupItem is ViewFeMeshRefinement) selectedId = 1; else if (_viewMeshSetupItem is ViewShellGmsh) selectedId = 2; else if (_viewMeshSetupItem is ViewThickenShellMesh) selectedId = 3; else if (_viewMeshSetupItem is ViewTetrahedralGmsh) selectedId = 4; else if (_viewMeshSetupItem is ViewTransfiniteMesh) selectedId = 5; else if (_viewMeshSetupItem is ViewExtrudeMesh) selectedId = 6; else if (_viewMeshSetupItem is ViewSweepMesh) selectedId = 7; else if (_viewMeshSetupItem is ViewRevolveMesh) selectedId = 8; else throw new NotSupportedException("MeshSetupItemTypeException"); // lvTypes.Items[selectedId].Tag = _viewMeshSetupItem; _preselectIndex = selectedId; } // ShowHideSelectionForm(); // propertyGrid.BuildAutocompleteMenu(_controller.GetAllParameterNames()); // return true; } // Methods private MeshingParameters GetDefaultMeshingParameters(int[] ids) { MeshingParameters meshingParameters = _controller.Settings.Meshing.MeshingParameters; // if (MeshSetupItem is MeshingParameters mp) { meshingParameters.Name = mp.Name; // if (ids != null && ids.Length > 0) { string[] partNames = _controller.Model.Geometry.GetPartNamesFromPartIds(ids); MeshingParameters defaultMeshingParameters = _controller.GetPartDefaultMeshingParameters(partNames); // if (defaultMeshingParameters != null) { defaultMeshingParameters.Name = mp.Name; meshingParameters = defaultMeshingParameters; } } // Copy relative meshingParameters.RelativeSize = mp.RelativeSize; // Copy creation data meshingParameters.CreationIds = mp.CreationIds; meshingParameters.CreationData = mp.CreationData; } return meshingParameters; } public void SetMeshSetupItem(MeshSetupItem meshSetupItem) { int selectedId; _meshSetupItemToEditName = meshSetupItem.Name; // the OnApply checks this name // if (meshSetupItem is MeshingParameters mp) { selectedId = 0; bool defaultSizeIsRelative = _controller.Settings.Meshing.MeshingParameters.RelativeSize; _viewMeshSetupItem = new ViewMeshingParameters(mp.DeepClone(), defaultSizeIsRelative); } else if (meshSetupItem is FeMeshRefinement mr) { selectedId = 1; _viewMeshSetupItem = new ViewFeMeshRefinement(mr.DeepClone()); } else if (meshSetupItem is ShellGmsh sg) { selectedId = 2; _viewMeshSetupItem = new ViewShellGmsh(sg.DeepClone()); } else if (meshSetupItem is ThickenShellMesh tsm) { selectedId = 3; _viewMeshSetupItem = new ViewThickenShellMesh(tsm.DeepClone()); } else if (meshSetupItem is TetrahedralGmsh tg) { selectedId = 4; _viewMeshSetupItem = new ViewTetrahedralGmsh(tg.DeepClone()); } else if (meshSetupItem is TransfiniteMesh tm) { selectedId = 5; _viewMeshSetupItem = new ViewTransfiniteMesh(tm.DeepClone()); } else if (meshSetupItem is ExtrudeMesh em) { selectedId = 6; _viewMeshSetupItem = new ViewExtrudeMesh(em.DeepClone()); } else if (meshSetupItem is SweepMesh sm) { selectedId = 7; _viewMeshSetupItem = new ViewSweepMesh(sm.DeepClone()); } else if (meshSetupItem is RevolveMesh rm) { selectedId = 8; _viewMeshSetupItem = new ViewRevolveMesh(rm.DeepClone()); } else { throw new NotSupportedException("MeshSetupItemTypeException"); } // _viewMeshSetupItem.HideName(); btnOkAddNew.Visible = false; btnPreview.Visible = false; // lvTypes.Items[selectedId].Tag = _viewMeshSetupItem; // PreselectListViewItem(selectedId); // ItemSetDataEditor.SelectionForm.Hide(); } // private void PopulateListOfMeshSetupItems() { bool twoD = _controller.Model.Properties.ModelSpace.IsTwoD(); // Meshing parameters MeshingParameters mp = _controller.GetDefaultMeshingParameters(GetMeshSetupItemName("Meshing_Parameters")); bool defaultSizeIsRelative = mp.RelativeSize; ViewMeshingParameters vmp = new ViewMeshingParameters(mp, defaultSizeIsRelative); var item = new ListViewItem { Text = @"网格参数", Name = @"Meshing Parameters", ImageKey = @"Meshing_Parameters", Tag = vmp }; lvTypes.Items.Add(item); // Mesh refinement FeMeshRefinement mr = new FeMeshRefinement(GetMeshSetupItemName("Mesh_Refinement")); ViewFeMeshRefinement vmr = new ViewFeMeshRefinement(mr); item = new ListViewItem { Text = @"细化网格", Name = @"Mesh Refinement", ImageKey = @"Mesh_Refinement", Tag = vmr }; lvTypes.Items.Add(item); // Shell gmsh ShellGmsh sg = new ShellGmsh(GetMeshSetupItemName("Shell_Gmsh")); ViewShellGmsh vsg = new ViewShellGmsh(sg); item = new ListViewItem { Text = @"Gmsh壳单元", Name = @"Shell Gmsh", ImageKey = @"Shell_Gmsh", Tag = vsg }; lvTypes.Items.Add(item); // Thicken shell mesh ThickenShellMesh tsm = new ThickenShellMesh(GetMeshSetupItemName("Thicken_Shell_Mesh")); ViewThickenShellMesh vtsm = new ViewThickenShellMesh(tsm); item = new ListViewItem { Text = @"厚壳单元", Name = @"Thicken Shell Mesh", ImageKey = @"Thicken_Shell_Mesh", Tag = vtsm }; lvTypes.Items.Add(item); // Tetrahedral gmsh TetrahedralGmsh tg = new TetrahedralGmsh(GetMeshSetupItemName("Tetrahedral_Gmsh")); ViewTetrahedralGmsh vtg = new ViewTetrahedralGmsh(tg); item = new ListViewItem { Text = @"四面体单元", Name = @"Tetrahedral Gmsh", ImageKey = @"Tetrahedral_Gmsh", Tag = vtg }; lvTypes.Items.Add(item); // Transfinite mesh TransfiniteMesh tm = new TransfiniteMesh(GetMeshSetupItemName("Transfinite_Mesh")); ViewTransfiniteMesh vtm = new ViewTransfiniteMesh(tm); item = new ListViewItem { Text = @"超限插值", Name = @"Transfinite Mesh", ImageKey = @"Transfinite_Mesh", Tag = vtm }; lvTypes.Items.Add(item); if (!twoD) { // Extrude mesh ExtrudeMesh em = new ExtrudeMesh(GetMeshSetupItemName("Extrude_Mesh")); ViewExtrudeMesh vem = new ViewExtrudeMesh(em); item = new ListViewItem { Text = @"网格拉伸", Name = @"Extrude Mesh", ImageKey = @"Extrude_Mesh", Tag = vem }; lvTypes.Items.Add(item); // Sweep mesh SweepMesh sm = new SweepMesh(GetMeshSetupItemName("Sweep_Mesh")); ViewSweepMesh vsm = new ViewSweepMesh(sm); item = new ListViewItem { Text = @"网格扫略", Name = @"Sweep Mesh", ImageKey = @"Sweep_Mesh", Tag = vsm }; lvTypes.Items.Add(item); // Revolve mesh RevolveMesh rm = new RevolveMesh(GetMeshSetupItemName("Revolve_Mesh")); ViewRevolveMesh vrm = new ViewRevolveMesh(rm); item = new ListViewItem { Text = @"网格回转", Name = @"Revolve Mesh", ImageKey = @"Revolve_Mesh", Tag = vrm }; lvTypes.Items.Add(item); } } private string GetMeshSetupItemName(string name) { return _meshSetupItemNames.GetNextNumberedKey(name); } private void HighlightMeshSetupItem(bool highlightNodes = true) { try { // This calls selection which might change the view which calls clear // which calls SelectionChanged which changes the MeshSetupItem !!! if (Modal) return; // _controller.ClearSelectionHistory(); // if (_viewMeshSetupItem == null) { } else { if (MeshSetupItem.CreationData != null && MeshSetupItem.CreationIds != null && MeshSetupItem.CreationIds.Length > 0) { try { if (MeshSetupItem is ExtrudeMesh || MeshSetupItem is SweepMesh || MeshSetupItem is RevolveMesh) { _controller.IsMeshSetupItemProperlyDefined(MeshSetupItem); } // _controller.HighlightMeshSetupItem(MeshSetupItem, highlightNodes); } catch { } // Set previous selection to continue it _controller.Selection = MeshSetupItem.CreationData.DeepClone(); } } } catch { } } private void ShowHideSelectionForm() { // When opened from regenerate if (!Visible || this.Modal) ItemSetDataEditor.SelectionForm.Hide(); // When opened normally else { if (MeshSetupItem != null) { ItemSetDataEditor.SelectionForm.ItemSetData = new ItemSetData(MeshSetupItem.CreationIds); ItemSetDataEditor.SelectionForm.ShowIfHidden(this.Owner); } else ItemSetDataEditor.SelectionForm.Hide(); } // SetSelectItem(); } private void SetSelectItem() { if (MeshSetupItem != null) { if (MeshSetupItem is MeshingParameters) _controller.SetSelectItemToPart(); else if (MeshSetupItem is FeMeshRefinement) _controller.SetSelectItemToGeometry(); else if (MeshSetupItem is ShellGmsh) _controller.SetSelectItemToPart(); else if (MeshSetupItem is ThickenShellMesh) _controller.SetSelectItemToPart(); else if (MeshSetupItem is TetrahedralGmsh) _controller.SetSelectItemToPart(); else if (MeshSetupItem is TransfiniteMesh) _controller.SetSelectItemToPart(); else if (MeshSetupItem is ExtrudeMesh) _controller.SetSelectItemToGeometrySurface(); else if (MeshSetupItem is SweepMesh) _controller.SetSelectItemToGeometrySurface(); else if (MeshSetupItem is RevolveMesh) _controller.SetSelectItemToGeometrySurface(); else throw new NotSupportedException("MeshSetupItemTypeException"); } else _controller.SetSelectByToOff(); } // public void SelectionChanged(int[] ids) { if (MeshSetupItem != null) { if (MeshSetupItem is MeshingParameters || MeshSetupItem is FeMeshRefinement || MeshSetupItem is ShellGmsh || MeshSetupItem is ThickenShellMesh || MeshSetupItem is TetrahedralGmsh || MeshSetupItem is TransfiniteMesh || MeshSetupItem is ExtrudeMesh || MeshSetupItem is SweepMesh || MeshSetupItem is RevolveMesh) { if (MeshSetupItem is MeshingParameters mp && !_meshingParametersChanged) { mp.CopyFrom(GetDefaultMeshingParameters(ids)); } else if (MeshSetupItem is ThickenShellMesh tsm) { tsm.PartNames = _controller.DisplayedMesh.GetPartNamesFromGeometryIds(ids); } MeshSetupItem.CreationIds = ids; MeshSetupItem.CreationData = _controller.Selection.DeepClone(); // 更新propertyGrid propertyGrid.Refresh(); _propertyItemChanged = true; // this will redraw the selection with correct backfaceCulling if (ids.Length != 0) { HighlightMeshSetupItem(); } } else { throw new NotSupportedException("MeshSetupItemTypeException"); } } } // IFormHighlight public void Highlight() { if (!_closing) HighlightMeshSetupItem(); } // IFormItemSetDataParent public bool IsSelectionGeometryBased() { // Prepare ItemSetDataEditor - prepare Geometry or Mesh based selection // All meshing parameters are geometry based return true; } public bool IsGeometrySelectionIdBased() { bool defaultMode = _controller.Settings.Pre.GeometrySelectMode == GeometrySelectModeEnum.SelectId; // Prepare ItemSetDataEditor - prepare Geometry or Mesh based selection MeshSetupItem meshSetupItem = MeshSetupItem; // if (meshSetupItem.CreationData != null && IsSelectionGeometryBased()) return meshSetupItem.CreationData.IsGeometryIdBased(defaultMode); else return defaultMode; } } }