Files
wg_cpso/CPSO/Forms/46_Distribution/ViewDistributionFromEquation.cs

137 lines
5.2 KiB
C#
Raw Normal View History

2026-03-25 18:20:24 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using CaeGlobals;
using CaeModel;
using DynamicTypeDescriptor;
using System.Security.Policy;
namespace CPSO
{
[Serializable]
public class ViewDistributionFromEquation : ViewDistribution
{
// Variables
private DistributionFromEquation _distributionFromEquation;
// Properties
public override string Name
{
get { return _distributionFromEquation.Name; }
set { _distributionFromEquation.Name = value; }
}
public override DistributionTypeEnum DistributionType
{
get { return _distributionFromEquation.DistributionType; }
set
{
if (_distributionFromEquation.DistributionType != value)
{
_distributionFromEquation.DistributionType = value;
UpdateVisibility();
}
}
}
//
[Category("Distribution magnitude")]
[OrderedDisplayName(0, 10, "Magnitude")]
[Description("Enter magnitude equation. Example equation: =Sin(x+y+z). " +
"To include coordinates into the equation refer to them as x, y and z.")]
[Id(1, 2)]
public string EquationMagnitude
{
get { return _distributionFromEquation.EquationMagnitude; }
set
{
if (!value.Trim().StartsWith("=")) value = "=" + value;
_distributionFromEquation.EquationMagnitude = value;
}
}
//
[Category("Distribution components")]
[OrderedDisplayName(0, 10, "D1")]
[Description("Enter distribution equation for the direction of the first axis. Example equation: " +
"=Sin(x+y+z). To include coordinates into the equation refer to them as x, y and z.")]
[Id(2, 2)]
public string EquationD1
{
get { return _distributionFromEquation.EquationD1; }
set
{
if (!value.Trim().StartsWith("=")) value = "=" + value;
_distributionFromEquation.EquationD1 = value;
}
}
//
[Category("Distribution components")]
[OrderedDisplayName(1, 10, "D2")]
[Description("Enter distribution equation for the direction of the second axis. Example equation: " +
"=Sin(x+y+z). To include coordinates into the equation refer to them as x, y and z.")]
[Id(3, 2)]
public string EquationD2
{
get { return _distributionFromEquation.EquationD2; }
set
{
if (!value.Trim().StartsWith("=")) value = "=" + value;
_distributionFromEquation.EquationD2 = value;
}
}
//
[Category("Distribution components")]
[OrderedDisplayName(2, 10, "D3")]
[Description("Enter distribution equation for the direction of the third axis. Example equation: " +
"=Sin(x+y+z). To include coordinates into the equation refer to them as x, y and z.")]
[Id(4, 2)]
public string EquationD3
{
get { return _distributionFromEquation.EquationD3; }
set
{
if (!value.Trim().StartsWith("=")) value = "=" + value;
_distributionFromEquation.EquationD3 = value;
}
}
//
public override string CoordinateSystemName
{
get { return _distributionFromEquation.CoordinateSystemName; }
set { _distributionFromEquation.CoordinateSystemName = value; }
}
// Constructors
public ViewDistributionFromEquation(DistributionFromEquation distributionFromEquation)
{
_distributionFromEquation = distributionFromEquation;
//
DynamicCustomTypeDescriptor = ProviderInstaller.Install(this);
//
UpdateVisibility();
}
// Methods
public override Distribution GetBase()
{
return _distributionFromEquation;
}
public void PopulateDropDownLists(string[] coordinateSystemNames)
{
base.PopulateCoordinateSystemNames(coordinateSystemNames);
}
private void UpdateVisibility()
{
bool visible = _distributionFromEquation.DistributionType == DistributionTypeEnum.Scalar;
DynamicCustomTypeDescriptor.GetProperty(nameof(EquationMagnitude)).SetIsBrowsable(visible);
DynamicCustomTypeDescriptor.GetProperty(nameof(EquationD1)).SetIsBrowsable(!visible);
DynamicCustomTypeDescriptor.GetProperty(nameof(EquationD2)).SetIsBrowsable(!visible);
DynamicCustomTypeDescriptor.GetProperty(nameof(EquationD3)).SetIsBrowsable(!visible);
}
}
}