namespace Yw.WpfUI.Hydro
|
{
|
/// <summary>
|
/// 抽象3D可见元素
|
/// </summary>
|
internal abstract class LogicalVisual3D : MeshGeometryVisual3D
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public LogicalVisual3D() { }
|
|
/// <summary>
|
///
|
/// </summary>
|
public LogicalVisual3D
|
(
|
VisualL3d vmo,
|
LogicalStateHelper stateHelper,
|
LogicalMaterialHelper materialHelper,
|
LogicalOverrideColorHelper overrideColorHelper,
|
LogicalOverrideOpacityHelper overrideOpacityHelper,
|
LogicalOverrideVisibleHelper overrideVisibleHelper
|
)
|
{
|
this.Vmo = vmo;
|
_stateHelper = stateHelper;
|
_materialHelper = materialHelper;
|
_overrideColorHelper = overrideColorHelper;
|
_overrideOpacityHelper = overrideOpacityHelper;
|
_overrideVisibleHelper = overrideVisibleHelper;
|
UpdateVisual();
|
}
|
|
protected readonly LogicalStateHelper _stateHelper = null; //状态辅助类
|
protected readonly LogicalMaterialHelper _materialHelper = null; //材质辅助类
|
protected readonly LogicalOverrideColorHelper _overrideColorHelper = null;//覆盖颜色辅助类
|
protected readonly LogicalOverrideOpacityHelper _overrideOpacityHelper = null;//覆盖透明度辅助类
|
protected readonly LogicalOverrideVisibleHelper _overrideVisibleHelper = null;//覆盖可见性辅助类
|
|
#region 事件集合
|
|
/// <summary>
|
/// 状态改变事件
|
/// </summary>
|
public event Action VisualChangedEvent;
|
|
#endregion
|
|
/// <summary>
|
/// Vmo
|
/// </summary>
|
public VisualL3d Vmo
|
{
|
get { return _vmo; }
|
set { _vmo = value; }
|
}
|
protected VisualL3d _vmo = null;
|
|
/// <summary>
|
/// 更新可见元素
|
/// 包含位置、材质、几何图形和可见性
|
/// </summary>
|
public virtual void UpdateVisual()
|
{
|
this.UpdatePositions();
|
this.UpdateGeometry();
|
this.UpdateMaterial();
|
this.UpdateTransform();
|
this.UpdateVisibility();
|
this.VisualChangedEvent?.Invoke();
|
}
|
|
/// <summary>
|
/// 更新位置
|
/// </summary>
|
public abstract void UpdatePositions();
|
|
/// <summary>
|
/// 更新材质
|
/// </summary>
|
public abstract void UpdateMaterial();
|
|
/// <summary>
|
/// 更新几何图形
|
/// </summary>
|
public abstract void UpdateGeometry();
|
|
/// <summary>
|
/// 更新变换矩阵
|
/// </summary>
|
public abstract void UpdateTransform();
|
|
/// <summary>
|
/// 更新可见性
|
/// </summary>
|
public virtual void UpdateVisibility()
|
{
|
bool visible = true;
|
var state = _stateHelper.GetState(this.Vmo);
|
if (state.HasFlag(eLogicalState.Visible))
|
{
|
visible = _overrideVisibleHelper.GetVisible(this.Vmo);
|
}
|
this.Visible = visible;
|
}
|
|
/// <summary>
|
/// 验证
|
/// </summary>
|
public virtual bool Verify()
|
{
|
if (this.Vmo == null)
|
{
|
return false;
|
}
|
return true;
|
}
|
|
|
}
|
}
|