Files
wg_cpso/CPSO/Forms/11_MeshSetup/FrmMeshSetupItem.cs
2026-03-25 18:20:24 +08:00

791 lines
33 KiB
C#

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<string[], MeshSetupItem, Task> 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;
}
}
}