675 lines
29 KiB
C#
675 lines
29 KiB
C#
|
|
using CaeGlobals;
|
|||
|
|
using CaeModel;
|
|||
|
|
using System;
|
|||
|
|
using System.ComponentModel;
|
|||
|
|
using System.Drawing;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
using CPSO.PropertyViews;
|
|||
|
|
|
|||
|
|
namespace CPSO.Forms
|
|||
|
|
{
|
|||
|
|
public partial class FrmMaterial : UserControls.PrePoMaxChildForm, IFormBase
|
|||
|
|
{
|
|||
|
|
// Variables
|
|||
|
|
private string[] _materialNames;
|
|||
|
|
private string _materialToEditName;
|
|||
|
|
private Material _material;
|
|||
|
|
private Controller _controller;
|
|||
|
|
private TabPage[] _pages;
|
|||
|
|
private bool _useSimpleEditor; // a switch to change the form into a simple material editor form
|
|||
|
|
private bool _preview; // a switch to change the form into a preview material form
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Properties
|
|||
|
|
public Material Material
|
|||
|
|
{
|
|||
|
|
get { return _material; }
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
_material = value.DeepClone();
|
|||
|
|
// Save selected property
|
|||
|
|
int selectedId = -1;
|
|||
|
|
if (lvAddedProperties.SelectedIndices.Count > 0)
|
|||
|
|
selectedId = lvAddedProperties.SelectedIndices[0];
|
|||
|
|
//
|
|||
|
|
ShowMaterial();
|
|||
|
|
// Select previous property
|
|||
|
|
if (selectedId >= 0 && selectedId < lvAddedProperties.Items.Count)
|
|||
|
|
lvAddedProperties.Items[selectedId].Selected = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public bool UseSimpleEditor { get { return _useSimpleEditor; } set { _useSimpleEditor = value.DeepClone(); } }
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Constructors
|
|||
|
|
public FrmMaterial(Controller controller)
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
//
|
|||
|
|
_controller = controller;
|
|||
|
|
_material = null;
|
|||
|
|
//
|
|||
|
|
int i = 0;
|
|||
|
|
_pages = new TabPage[tcProperties.TabPages.Count];
|
|||
|
|
foreach (TabPage tabPage in tcProperties.TabPages)
|
|||
|
|
{
|
|||
|
|
tabPage.Paint += TabPage_Paint;
|
|||
|
|
_pages[i++] = tabPage;
|
|||
|
|
}
|
|||
|
|
//
|
|||
|
|
ClearControls();
|
|||
|
|
//
|
|||
|
|
_useSimpleEditor = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Event handlers
|
|||
|
|
private void FrmMaterial_VisibleChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
cbTemperatureDependent.Enabled = !(_useSimpleEditor || _preview);
|
|||
|
|
tvProperties.Visible = !_useSimpleEditor;
|
|||
|
|
lvAddedProperties.Visible = !_useSimpleEditor;
|
|||
|
|
//
|
|||
|
|
if (Visible) { }
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
dgvData.HidePlot();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private void TabPage_Paint(object sender, PaintEventArgs e)
|
|||
|
|
{
|
|||
|
|
SolidBrush fillBrush = new SolidBrush(((TabPage)sender).BackColor);
|
|||
|
|
e.Graphics.FillRectangle(fillBrush, e.ClipRectangle);
|
|||
|
|
// Enable copy/paste without first selecting the cell 0,0
|
|||
|
|
if (sender == tpDataPoints)
|
|||
|
|
{
|
|||
|
|
ActiveControl = dgvData;
|
|||
|
|
dgvData[0, 0].Selected = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private void tvProperties_DoubleClick(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
btnAdd_Click(null, null);
|
|||
|
|
}
|
|||
|
|
private void tbName_KeyDown(object sender, KeyEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (e.KeyCode == Keys.Enter)
|
|||
|
|
{
|
|||
|
|
e.SuppressKeyPress = true; // no beep
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private void tbDescription_TextChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
_propertyItemChanged = true;
|
|||
|
|
}
|
|||
|
|
private void cbTemperatureDependent_CheckedChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
HideShowTemperature();
|
|||
|
|
_propertyItemChanged = true;
|
|||
|
|
}
|
|||
|
|
private void btnAdd_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (!_preview && tvProperties.SelectedNodes != null)
|
|||
|
|
{
|
|||
|
|
foreach (TreeNode treeNode in tvProperties.SelectedNodes)
|
|||
|
|
{
|
|||
|
|
if (treeNode.Tag != null)
|
|||
|
|
{
|
|||
|
|
string propertyText = treeNode.Text;
|
|||
|
|
//
|
|||
|
|
ListViewItem existingItem = null;
|
|||
|
|
if (lvAddedProperties.Items.Count > 0)
|
|||
|
|
existingItem = lvAddedProperties.FindItemWithText(propertyText, true, 0, false);
|
|||
|
|
//
|
|||
|
|
if (existingItem == null)
|
|||
|
|
{
|
|||
|
|
ListViewItem item = new ListViewItem(propertyText);
|
|||
|
|
if (treeNode.Tag is MaterialProperty mp)
|
|||
|
|
{
|
|||
|
|
if (mp is Density de)
|
|||
|
|
item.Tag = new ViewDensity(de.DeepClone());
|
|||
|
|
else if (mp is SlipWear sw)
|
|||
|
|
item.Tag = new ViewSlipWear(sw.DeepClone());
|
|||
|
|
else if (mp is Elastic el)
|
|||
|
|
item.Tag = new ViewElastic(el.DeepClone());
|
|||
|
|
else if (mp is Plastic pl)
|
|||
|
|
item.Tag = new ViewPlastic(pl.DeepClone());
|
|||
|
|
else if (mp is ThermalExpansion te)
|
|||
|
|
item.Tag = new ViewThermalExpansion(te.DeepClone(), cbTemperatureDependent.Checked);
|
|||
|
|
else if (mp is ThermalConductivity tc)
|
|||
|
|
item.Tag = new ViewThermalConductivity(tc.DeepClone());
|
|||
|
|
else if (mp is SpecificHeat sh)
|
|||
|
|
item.Tag = new ViewSpecificHeat(sh.DeepClone());
|
|||
|
|
else throw new NotSupportedException();
|
|||
|
|
}
|
|||
|
|
else throw new NotSupportedException();
|
|||
|
|
//
|
|||
|
|
lvAddedProperties.Items.Add(item);
|
|||
|
|
int id = lvAddedProperties.Items.IndexOf(item);
|
|||
|
|
lvAddedProperties.Items[id].Selected = true;
|
|||
|
|
lvAddedProperties.Select();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
tvProperties.SelectedNodes.Clear();
|
|||
|
|
}
|
|||
|
|
_propertyItemChanged = true;
|
|||
|
|
}
|
|||
|
|
private void btnMoveUp_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
int currentIndex = lvAddedProperties.PossiblySelectedItems[0].Index;
|
|||
|
|
ListViewItem item = lvAddedProperties.Items[currentIndex];
|
|||
|
|
if (currentIndex > 0)
|
|||
|
|
{
|
|||
|
|
lvAddedProperties.Items.RemoveAt(currentIndex);
|
|||
|
|
lvAddedProperties.Items.Insert(currentIndex - 1, item);
|
|||
|
|
}
|
|||
|
|
_propertyItemChanged = true;
|
|||
|
|
}
|
|||
|
|
catch
|
|||
|
|
{ }
|
|||
|
|
}
|
|||
|
|
private void btnMoveDown_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
int currentIndex = lvAddedProperties.PossiblySelectedItems[0].Index;
|
|||
|
|
ListViewItem item = lvAddedProperties.Items[currentIndex];
|
|||
|
|
if (currentIndex < lvAddedProperties.Items.Count - 1)
|
|||
|
|
{
|
|||
|
|
lvAddedProperties.Items.RemoveAt(currentIndex);
|
|||
|
|
lvAddedProperties.Items.Insert(currentIndex + 1, item);
|
|||
|
|
}
|
|||
|
|
_propertyItemChanged = true;
|
|||
|
|
}
|
|||
|
|
catch
|
|||
|
|
{ }
|
|||
|
|
}
|
|||
|
|
private void btnRemove_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (lvAddedProperties.PossiblySelectedItems.Count == 1)
|
|||
|
|
{
|
|||
|
|
ListViewItem item = lvAddedProperties.PossiblySelectedItems[0];
|
|||
|
|
int index = item.Index;
|
|||
|
|
if (index == lvAddedProperties.Items.Count - 1) index--;
|
|||
|
|
lvAddedProperties.Items.Remove(item);
|
|||
|
|
//
|
|||
|
|
if (lvAddedProperties.Items.Count > 0) lvAddedProperties.Items[index].Selected = true;
|
|||
|
|
else ClearControls();
|
|||
|
|
//
|
|||
|
|
_propertyItemChanged = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//
|
|||
|
|
private void lvAddedProperties_SelectedIndexChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (lvAddedProperties.PossiblySelectedItems.Count == 1)
|
|||
|
|
{
|
|||
|
|
// Clear
|
|||
|
|
dgvData.DataSource = null;
|
|||
|
|
dgvData.Columns.Clear();
|
|||
|
|
tcProperties.TabPages.Clear();
|
|||
|
|
//
|
|||
|
|
if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewDensity vd)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]); // properties
|
|||
|
|
tcProperties.TabPages.Add(_pages[1]); // data points
|
|||
|
|
//
|
|||
|
|
SetDataGridViewBinding(vd.DataPoints);
|
|||
|
|
}
|
|||
|
|
else if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewElastic ve)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]); // properties
|
|||
|
|
tcProperties.TabPages.Add(_pages[1]); // data points
|
|||
|
|
//
|
|||
|
|
SetDataGridViewBinding(ve.DataPoints);
|
|||
|
|
}
|
|||
|
|
else if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewElasticWithDensity)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]); // properties
|
|||
|
|
}
|
|||
|
|
else if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewPlastic vp)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Add(_pages[1]); // data points
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]); // properties
|
|||
|
|
//
|
|||
|
|
SetDataGridViewBinding(vp.DataPoints);
|
|||
|
|
}
|
|||
|
|
else if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewThermalExpansion vte)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]); // properties
|
|||
|
|
tcProperties.TabPages.Add(_pages[1]); // data points
|
|||
|
|
//
|
|||
|
|
SetDataGridViewBinding(vte.DataPoints);
|
|||
|
|
}
|
|||
|
|
else if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewThermalConductivity vtc)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]); // properties
|
|||
|
|
tcProperties.TabPages.Add(_pages[1]); // data points
|
|||
|
|
//
|
|||
|
|
SetDataGridViewBinding(vtc.DataPoints);
|
|||
|
|
}
|
|||
|
|
else if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewSpecificHeat vsh)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]); // properties
|
|||
|
|
tcProperties.TabPages.Add(_pages[1]); // data points
|
|||
|
|
//
|
|||
|
|
SetDataGridViewBinding(vsh.DataPoints);
|
|||
|
|
}
|
|||
|
|
else if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewSlipWear vsw)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]); // properties
|
|||
|
|
}
|
|||
|
|
else throw new NotSupportedException();
|
|||
|
|
//
|
|||
|
|
propertyGrid.SelectedObject = lvAddedProperties.PossiblySelectedItems[0].Tag;
|
|||
|
|
//
|
|||
|
|
SetAllGridViewUnits();
|
|||
|
|
//
|
|||
|
|
HideShowTemperature();
|
|||
|
|
}
|
|||
|
|
lvAddedProperties.Select();
|
|||
|
|
}
|
|||
|
|
private void Binding_ListChanged(object sender, ListChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
_propertyItemChanged = true;
|
|||
|
|
}
|
|||
|
|
private void propertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
propertyGrid.Refresh();
|
|||
|
|
_propertyItemChanged = true;
|
|||
|
|
}
|
|||
|
|
private void btnOK_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
Add();
|
|||
|
|
//
|
|||
|
|
Hide();
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
ExceptionTools.Show(this, ex);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
private void btnOKAddNew_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
Add();
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
PrepareForm(null, null);
|
|||
|
|
}
|
|||
|
|
catch (Exception ex)
|
|||
|
|
{
|
|||
|
|
ExceptionTools.Show(this, ex);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private void btnCancel_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
_useSimpleEditor = false;
|
|||
|
|
//
|
|||
|
|
Hide();
|
|||
|
|
}
|
|||
|
|
private void FrmMaterial_FormClosing(object sender, FormClosingEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (e.CloseReason == CloseReason.UserClosing)
|
|||
|
|
{
|
|||
|
|
e.Cancel = true;
|
|||
|
|
btnCancel_Click(null, null);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Methods
|
|||
|
|
public bool PrepareForm(string stepName, string materialToEditName)
|
|||
|
|
{
|
|||
|
|
_propertyItemChanged = false;
|
|||
|
|
_materialNames = null;
|
|||
|
|
_materialToEditName = null;
|
|||
|
|
_material = null;
|
|||
|
|
_preview = false;
|
|||
|
|
lvAddedProperties.Items.Clear();
|
|||
|
|
ClearControls();
|
|||
|
|
SetControlStates();
|
|||
|
|
//
|
|||
|
|
_materialNames = _controller.GetMaterialNames();
|
|||
|
|
_materialToEditName = materialToEditName;
|
|||
|
|
this.btnOKAddNew.Visible = _materialToEditName == null; // must be here
|
|||
|
|
// Initialize material properties
|
|||
|
|
TreeNode node;
|
|||
|
|
node = tvProperties.Nodes.Find("Density", true)[0];
|
|||
|
|
node.Tag = new Density(new double[][] { new double[] { 0, 0 } });
|
|||
|
|
node = tvProperties.Nodes.Find("Slip Wear", true)[0];
|
|||
|
|
node.Tag = new SlipWear(0, 0);
|
|||
|
|
node = tvProperties.Nodes.Find("Elastic", true)[0];
|
|||
|
|
node.Tag = new Elastic(new double[][] { new double[] { 0, 0, 0 } });
|
|||
|
|
node = tvProperties.Nodes.Find("Plastic", true)[0];
|
|||
|
|
node.Tag = new Plastic(new double[][] { new double[] { 0, 0, 0 } });
|
|||
|
|
node = tvProperties.Nodes.Find("Thermal Expansion", true)[0];
|
|||
|
|
node.Tag = new ThermalExpansion(new double[][] { new double[] { 0, 0 } });
|
|||
|
|
node = tvProperties.Nodes.Find("Thermal Conductivity", true)[0];
|
|||
|
|
node.Tag = new ThermalConductivity(new double[][] { new double[] { 0, 0 } });
|
|||
|
|
node = tvProperties.Nodes.Find("Specific Heat", true)[0];
|
|||
|
|
node.Tag = new SpecificHeat(new double[][] { new double[] { 0, 0 } });
|
|||
|
|
//
|
|||
|
|
tvProperties.ExpandAll();
|
|||
|
|
//
|
|||
|
|
if (_materialToEditName == null)
|
|||
|
|
{
|
|||
|
|
_material = null;
|
|||
|
|
tbName.Text = GetMaterialName();
|
|||
|
|
tbDescription.Text = "";
|
|||
|
|
cbTemperatureDependent.Checked = false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Material = _controller.GetMaterial(_materialToEditName); // to clone
|
|||
|
|
ShowMaterial();
|
|||
|
|
}
|
|||
|
|
// Simple material editor
|
|||
|
|
int delta;
|
|||
|
|
if (_useSimpleEditor)
|
|||
|
|
{
|
|||
|
|
if (_materialToEditName == null)
|
|||
|
|
{
|
|||
|
|
ViewMaterialProperty view = new ViewElasticWithDensity(new ElasticWithDensity(0, 0, 0));
|
|||
|
|
ListViewItem item = new ListViewItem(view.Name);
|
|||
|
|
item.Tag = view;
|
|||
|
|
lvAddedProperties.Items.Add(item);
|
|||
|
|
lvAddedProperties.Items[0].Selected = true;
|
|||
|
|
lvAddedProperties.Select();
|
|||
|
|
lvAddedProperties_SelectedIndexChanged(null, null);
|
|||
|
|
}
|
|||
|
|
delta = tcProperties.Top - labAvailable.Top;
|
|||
|
|
tcProperties.Top = labAvailable.Top;
|
|||
|
|
tcProperties.Height += delta;
|
|||
|
|
this.Height -= delta;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
delta = (tvProperties.Bottom + 5) - tcProperties.Top;
|
|||
|
|
tcProperties.Top = tvProperties.Bottom + 5;
|
|||
|
|
tcProperties.Height -= delta;
|
|||
|
|
this.Height += delta;
|
|||
|
|
}
|
|||
|
|
//
|
|||
|
|
_controller.SetSelectByToOff();
|
|||
|
|
//
|
|||
|
|
propertyGrid.BuildAutocompleteMenu(_controller.GetAllParameterNames());
|
|||
|
|
dgvData.BuildAutocompleteMenu(_controller.GetAllParameterNames());
|
|||
|
|
//
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
public void ShowMaterial()
|
|||
|
|
{
|
|||
|
|
lvAddedProperties.Items.Clear();
|
|||
|
|
//
|
|||
|
|
tbName.Text = _material.Name;
|
|||
|
|
tbDescription.Text = _material.Description;
|
|||
|
|
cbTemperatureDependent.Checked = _material.TemperatureDependent;
|
|||
|
|
//
|
|||
|
|
if (_material.Properties.Count > 0)
|
|||
|
|
{
|
|||
|
|
ListViewItem item;
|
|||
|
|
ViewMaterialProperty view = null;
|
|||
|
|
foreach (var property in _material.Properties)
|
|||
|
|
{
|
|||
|
|
if (property is Density den) view = new ViewDensity(den);
|
|||
|
|
else if (property is SlipWear sw) view = new ViewSlipWear(sw);
|
|||
|
|
else if (property is Elastic el) view = new ViewElastic(el);
|
|||
|
|
else if (property is ElasticWithDensity ewd)
|
|||
|
|
{
|
|||
|
|
view = new ViewElasticWithDensity(ewd);
|
|||
|
|
_useSimpleEditor = true;
|
|||
|
|
}
|
|||
|
|
else if (property is Plastic pl) view = new ViewPlastic(pl);
|
|||
|
|
else if (property is ThermalExpansion te)
|
|||
|
|
view = new ViewThermalExpansion(te, cbTemperatureDependent.Checked);
|
|||
|
|
else if (property is ThermalConductivity tc) view = new ViewThermalConductivity(tc);
|
|||
|
|
else if (property is SpecificHeat sh) view = new ViewSpecificHeat(sh);
|
|||
|
|
else throw new NotSupportedException();
|
|||
|
|
//
|
|||
|
|
item = new ListViewItem(view.Name);
|
|||
|
|
item.Tag = view;
|
|||
|
|
item = lvAddedProperties.Items.Add(item);
|
|||
|
|
}
|
|||
|
|
//
|
|||
|
|
lvAddedProperties.Items[0].Selected = true;
|
|||
|
|
lvAddedProperties.Select();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public void PrepareFormForPreview()
|
|||
|
|
{
|
|||
|
|
PrepareForm(null, null);
|
|||
|
|
tbName.Text = "";
|
|||
|
|
//
|
|||
|
|
_preview = true;
|
|||
|
|
SetControlStates();
|
|||
|
|
}
|
|||
|
|
private void SetControlStates()
|
|||
|
|
{
|
|||
|
|
tbName.ReadOnly = _preview;
|
|||
|
|
tbName.BackColor = SystemColors.Window;
|
|||
|
|
tbDescription.ReadOnly = _preview;
|
|||
|
|
tbDescription.BackColor = SystemColors.Window;
|
|||
|
|
// Buttons
|
|||
|
|
btnAdd.Visible = !_preview;
|
|||
|
|
btnMoveUp.Visible = !_preview;
|
|||
|
|
btnMoveDown.Visible = !_preview;
|
|||
|
|
btnRemove.Visible = !_preview;
|
|||
|
|
// All models
|
|||
|
|
tvProperties.Visible = !_preview;
|
|||
|
|
// Added models
|
|||
|
|
if (_preview)
|
|||
|
|
{
|
|||
|
|
lvAddedProperties.Left = tvProperties.Left;
|
|||
|
|
lvAddedProperties.Width = (btnMoveUp.Left + btnMoveUp.Width) - lvAddedProperties.Left;
|
|||
|
|
lvAddedProperties.Top = labAvailable.Top;
|
|||
|
|
lvAddedProperties.Height = tvProperties.Bottom - lvAddedProperties.Top;
|
|||
|
|
lvAddedProperties.BringToFront();
|
|||
|
|
}
|
|||
|
|
// Property grid
|
|||
|
|
propertyGrid.ReadOnly = _preview;
|
|||
|
|
// Data grid
|
|||
|
|
dgvData.AllowUserToAddRows = !_preview;
|
|||
|
|
dgvData.AllowUserToDeleteRows = !_preview;
|
|||
|
|
dgvData.ReadOnly = _preview;
|
|||
|
|
// Buttons
|
|||
|
|
btnOKAddNew.Visible = !_preview;
|
|||
|
|
btnOK.Visible = !_preview;
|
|||
|
|
//btnCancel.Visible = !_preview;
|
|||
|
|
}
|
|||
|
|
private void ClearControls()
|
|||
|
|
{
|
|||
|
|
propertyGrid.SelectedObject = null;
|
|||
|
|
dgvData.DataSource = null;
|
|||
|
|
//
|
|||
|
|
tcProperties.TabPages.Clear();
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]);
|
|||
|
|
}
|
|||
|
|
public void Add()
|
|||
|
|
{
|
|||
|
|
// Check if the name exists
|
|||
|
|
UserControls.FrmProperties.CheckName(_materialToEditName, tbName.Text, _materialNames, "material");
|
|||
|
|
//
|
|||
|
|
_material = new Material(tbName.Text);
|
|||
|
|
_material.Description = tbDescription.Text;
|
|||
|
|
_material.TemperatureDependent = cbTemperatureDependent.Checked;
|
|||
|
|
//
|
|||
|
|
ViewMaterialProperty property;
|
|||
|
|
MaterialProperty materialProperty;
|
|||
|
|
foreach (ListViewItem item in lvAddedProperties.Items)
|
|||
|
|
{
|
|||
|
|
property = (ViewMaterialProperty)item.Tag;
|
|||
|
|
materialProperty = property.GetBase();
|
|||
|
|
// Check equations
|
|||
|
|
materialProperty.CheckEquations();
|
|||
|
|
//
|
|||
|
|
if (property is ViewDensity vd)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < vd.DataPoints.Count; i++)
|
|||
|
|
{
|
|||
|
|
if (vd.DataPoints[i].Density.Value <= 0) throw new CaeException("The density must be larger than 0.");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (property is ViewElastic ve && ve.GetYoungsModulusValue() <= 0)
|
|||
|
|
{
|
|||
|
|
throw new CaeException("The Young's modulus must be larger than 0.");
|
|||
|
|
}
|
|||
|
|
else if (property is ViewElasticWithDensity ewd)
|
|||
|
|
{
|
|||
|
|
if (ewd.GetYoungsModulusValue() <= 0) throw new CaeException("The Young's modulus must be larger than 0.");
|
|||
|
|
if (ewd.GetDensityValue() <= 0) throw new CaeException("The density must be larger than 0.");
|
|||
|
|
}
|
|||
|
|
else if (property is ViewThermalExpansion vex)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < vex.DataPoints.Count; i++)
|
|||
|
|
{
|
|||
|
|
if (vex.DataPoints[i].ThermalExpansion.Value <= 0)
|
|||
|
|
throw new CaeException("The thermal expansion coefficient must be larger than 0.");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (property is ViewThermalConductivity vtc)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < vtc.DataPoints.Count; i++)
|
|||
|
|
{
|
|||
|
|
if (vtc.DataPoints[i].ThermalConductivity.Value <= 0)
|
|||
|
|
throw new CaeException("The thermal conductivity coefficient must be larger than 0.");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (property is ViewSpecificHeat vsh)
|
|||
|
|
{
|
|||
|
|
for (int i = 0; i < vsh.DataPoints.Count; i++)
|
|||
|
|
{
|
|||
|
|
if (vsh.DataPoints[i].SpecificHeat.Value <= 0)
|
|||
|
|
throw new CaeException("The thermal conductivity coefficient must be larger than 0.");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (property is ViewSlipWear vsw)
|
|||
|
|
{
|
|||
|
|
if (vsw.GetHardnessValue() <= 0) throw new CaeException("The hardness must be larger than 0.");
|
|||
|
|
if (vsw.GetWearCoefficientValue() <= 0) throw new CaeException("The wear coefficient must be larger than 0.");
|
|||
|
|
}
|
|||
|
|
//
|
|||
|
|
_material.AddProperty(materialProperty);
|
|||
|
|
}
|
|||
|
|
//
|
|||
|
|
if (_materialToEditName == null)
|
|||
|
|
{
|
|||
|
|
// Create
|
|||
|
|
_controller.AddMaterialCommand(Material);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// Replace
|
|||
|
|
if (_materialToEditName != Material.Name || _propertyItemChanged)
|
|||
|
|
{
|
|||
|
|
_controller.ReplaceMaterialCommand(_materialToEditName, Material);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private void SetAllGridViewUnits()
|
|||
|
|
{
|
|||
|
|
string noUnit = "/";
|
|||
|
|
// Density
|
|||
|
|
SetGridViewUnit(nameof(DensityDataPoint.DensityEq), _controller.Model.UnitSystem.DensityUnitAbbreviation,
|
|||
|
|
new StringDensityFromConverter());
|
|||
|
|
// Elastic
|
|||
|
|
SetGridViewUnit(nameof(ElasticDataPoint.YoungsModulusEq), _controller.Model.UnitSystem.PressureUnitAbbreviation,
|
|||
|
|
new StringPressureFromConverter());
|
|||
|
|
SetGridViewUnit(nameof(ElasticDataPoint.PoissonsRatioEq), noUnit,
|
|||
|
|
new StringDoubleConverter());
|
|||
|
|
// Plastic
|
|||
|
|
SetGridViewUnit(nameof(PlasticDataPoint.StressEq), _controller.Model.UnitSystem.PressureUnitAbbreviation,
|
|||
|
|
new StringPressureFromConverter());
|
|||
|
|
SetGridViewUnit(nameof(PlasticDataPoint.StrainEq), noUnit,
|
|||
|
|
new StringDoubleConverter());
|
|||
|
|
// Thermal expansion
|
|||
|
|
SetGridViewUnit(nameof(ThermalExpansionDataPoint.ThermalExpansionEq),
|
|||
|
|
_controller.Model.UnitSystem.ThermalExpansionUnitAbbreviation,
|
|||
|
|
new StringThermalExpansionFromConverter());
|
|||
|
|
// Thermal conductivity
|
|||
|
|
SetGridViewUnit(nameof(ThermalConductivityDataPoint.ThermalConductivityEq),
|
|||
|
|
_controller.Model.UnitSystem.ThermalConductivityUnitAbbreviation,
|
|||
|
|
new StringThermalConductivityFromConverter());
|
|||
|
|
// Specific heat
|
|||
|
|
SetGridViewUnit(nameof(SpecificHeatDataPoint.SpecificHeatEq), _controller.Model.UnitSystem.SpecificHeatUnitAbbreviation,
|
|||
|
|
new StringSpecificHeatFromConverter());
|
|||
|
|
// Temperature
|
|||
|
|
SetGridViewUnit(nameof(TempDataPoint.TemperatureEq), _controller.Model.UnitSystem.TemperatureUnitAbbreviation,
|
|||
|
|
new StringTemperatureFromConverter());
|
|||
|
|
//
|
|||
|
|
dgvData.XColIndex = 1;
|
|||
|
|
dgvData.StartPlotAtZero = true;
|
|||
|
|
}
|
|||
|
|
private void SetGridViewUnit(string columnName, string unit, TypeConverter converter)
|
|||
|
|
{
|
|||
|
|
DataGridViewColumn col = dgvData.Columns[columnName];
|
|||
|
|
if (col != null)
|
|||
|
|
{
|
|||
|
|
// Unit
|
|||
|
|
if (col.HeaderText != null) col.HeaderText = col.HeaderText.Replace("?", unit);
|
|||
|
|
// Alignment
|
|||
|
|
col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter;
|
|||
|
|
// Converter
|
|||
|
|
col.Tag = converter;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private string GetMaterialName()
|
|||
|
|
{
|
|||
|
|
return _materialNames.GetNextNumberedKey("Material");
|
|||
|
|
}
|
|||
|
|
private void SetDataGridViewBinding(object data)
|
|||
|
|
{
|
|||
|
|
BindingSource binding = new BindingSource();
|
|||
|
|
binding.DataSource = data;
|
|||
|
|
dgvData.DataSource = binding; // bind datagridview to binding source - enables adding of new lines
|
|||
|
|
binding.ListChanged += Binding_ListChanged;
|
|||
|
|
}
|
|||
|
|
private void HideShowTemperature()
|
|||
|
|
{
|
|||
|
|
if (lvAddedProperties.PossiblySelectedItems.Count > 0)
|
|||
|
|
{
|
|||
|
|
if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewDensity ||
|
|||
|
|
lvAddedProperties.PossiblySelectedItems[0].Tag is ViewElastic ||
|
|||
|
|
lvAddedProperties.PossiblySelectedItems[0].Tag is ViewThermalConductivity ||
|
|||
|
|
lvAddedProperties.PossiblySelectedItems[0].Tag is ViewSpecificHeat)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Clear();
|
|||
|
|
// Properites
|
|||
|
|
if (!cbTemperatureDependent.Checked) tcProperties.TabPages.Add(_pages[0]);
|
|||
|
|
// Data points
|
|||
|
|
if (cbTemperatureDependent.Checked) tcProperties.TabPages.Add(_pages[1]);
|
|||
|
|
}
|
|||
|
|
else if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewThermalExpansion vte)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Clear();
|
|||
|
|
// Properites
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]);
|
|||
|
|
// Data points
|
|||
|
|
if (cbTemperatureDependent.Checked) tcProperties.TabPages.Add(_pages[1]);
|
|||
|
|
//
|
|||
|
|
vte.SetTemperatureDependence(cbTemperatureDependent.Checked);
|
|||
|
|
propertyGrid.Refresh();
|
|||
|
|
}
|
|||
|
|
else if (lvAddedProperties.PossiblySelectedItems[0].Tag is ViewSlipWear)
|
|||
|
|
{
|
|||
|
|
tcProperties.TabPages.Clear();
|
|||
|
|
tcProperties.TabPages.Add(_pages[0]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//
|
|||
|
|
string temperatureName = nameof(TempDataPoint.TemperatureEq);
|
|||
|
|
DataGridViewColumn col = dgvData.Columns[temperatureName];
|
|||
|
|
if (col != null) col.Visible = cbTemperatureDependent.Checked;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|