Files
wg_cpso/CPSO/Forms/02_View/ViewExplodedViewParameters.cs
2026-03-25 18:20:24 +08:00

155 lines
5.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CaeMesh;
using CaeGlobals;
using System.ComponentModel;
using DynamicTypeDescriptor;
using System.Drawing.Design;
namespace CPSO.Forms
{
[Serializable]
public class ViewExplodedViewParameters
{
// Variables
private DynamicCustomTypeDescriptor _dctd = null;
private ExplodedViewParameters _explodedViewParameters;
// Properties
[Browsable(false)]
public ExplodedViewParameters Parameters
{
get { return _explodedViewParameters; }
set { _explodedViewParameters = value; }
}
//
[Category("Method")]
[OrderedDisplayName(0, 10, "Exploded view method")]
[Description("Select the exploded view method.")]
[Id(1, 1)]
public ExplodedViewMethodEnum Method
{
get { return _explodedViewParameters.Method; }
set
{
_explodedViewParameters.Method = value;
//
Magnification = _explodedViewParameters.Magnification; // check the limits
//
UpdateVisibility();
}
}
//
[Category("Method")]
[OrderedDisplayName(1, 10, "X coordinate")]
[Description("Enter the center point X coordinate.")]
[TypeConverter(typeof(StringLengthConverter))]
[Id(2, 1)]
public double CenterX
{
get { return _explodedViewParameters.CenterX; }
set { _explodedViewParameters.CenterX = value; }
}
//
[Category("Method")]
[OrderedDisplayName(2, 10, "Y coordinate")]
[Description("Enter the center point Y coordinate.")]
[TypeConverter(typeof(StringLengthConverter))]
[Id(3, 1)]
public double CenterY
{
get { return _explodedViewParameters.CenterY; }
set { _explodedViewParameters.CenterY = value; }
}
//
[Category("Method")]
[OrderedDisplayName(3, 10, "Z coordinate")]
[Description("Enter the center point Z coordinate.")]
[TypeConverter(typeof(StringLengthConverter))]
[Id(4, 1)]
public double CenterZ
{
get { return _explodedViewParameters.CenterZ; }
set { _explodedViewParameters.CenterZ = value; }
}
//
[Category("Direction and scaling")]
[OrderedDisplayName(0, 10, "Exploded view direction")]
[Description("Select the exploded view direction.")]
[Id(1, 2)]
public ExplodedViewDirectionEnum Direction
{
get { return _explodedViewParameters.Direction; }
set { _explodedViewParameters.Direction = value; }
}
//
[Category("Direction and scaling")]
[OrderedDisplayName(1, 10, "Magnification")]
[Description("Select the exploded view magnification (larger than 1).")]
[TypeConverter(typeof(StringDoubleConverter))]
[Id(2, 2)]
public double Magnification
{
get { return _explodedViewParameters.Magnification; }
set
{
_explodedViewParameters.Magnification = value;
int upperLimit = -1;
if (_explodedViewParameters.Magnification < 1) _explodedViewParameters.Magnification = 1;
else if (_explodedViewParameters.Method == ExplodedViewMethodEnum.Default &&
_explodedViewParameters.Magnification > 25) upperLimit = 25;
else if (_explodedViewParameters.Method == ExplodedViewMethodEnum.CenterPoint &&
_explodedViewParameters.Magnification > 1000) upperLimit = 1000;
//
if (upperLimit != -1) _explodedViewParameters.Magnification = upperLimit;
}
}
//
[Category("Direction and scaling")]
[OrderedDisplayName(2, 10, "Scale factor")]
[Description("Select the exploded view scale factor [0, 1].")]
[TypeConverter(typeof(StringDoubleConverter))]
[Id(3, 2)]
public double ScaleFactor
{
get { return _explodedViewParameters.ScaleFactor; }
set
{
_explodedViewParameters.ScaleFactor = value;
if (_explodedViewParameters.ScaleFactor < 0) _explodedViewParameters.ScaleFactor = 0;
else if (_explodedViewParameters.ScaleFactor > 1) _explodedViewParameters.ScaleFactor = 1;
}
}
// Constructors
public ViewExplodedViewParameters()
{
_explodedViewParameters = new ExplodedViewParameters();
//
_dctd = ProviderInstaller.Install(this);
_dctd.CategorySortOrder = CustomSortOrder.AscendingById;
_dctd.PropertySortOrder = CustomSortOrder.AscendingById;
//
UpdateVisibility();
}
// Methods
public void UpdateVisibility()
{
bool visible = _explodedViewParameters.Method == ExplodedViewMethodEnum.CenterPoint;
_dctd.GetProperty(nameof(CenterX)).SetIsBrowsable(visible);
_dctd.GetProperty(nameof(CenterY)).SetIsBrowsable(visible);
_dctd.GetProperty(nameof(CenterZ)).SetIsBrowsable(visible);
}
}
}