using NResUI.Rendering.Inspection;
namespace NResUI.Models;
///
/// Общее состояние mesh viewport и inspector.
/// Панели синхронизируются через эту модель, чтобы выбор piece/batch не жил отдельно в каждом окне.
///
public sealed class MeshViewportViewModel
{
public MeshDocument? Document { get; private set; }
public MeshRenderState RenderState { get; } = new();
public string? LoadError { get; private set; }
public bool NeedsSceneRebuild { get; private set; }
public bool HasDocument => Document != null;
/// Заменяет текущий документ и сбрасывает все viewport-only overrides.
public void SetDocument(MeshDocument document)
{
Document = document;
LoadError = null;
RenderState.HiddenPieceIds.Clear();
RenderState.ClearAllPieceOverrides();
RenderState.ClearSelection();
NeedsSceneRebuild = true;
}
public void SetError(string error)
{
Document = null;
LoadError = error;
RenderState.HiddenPieceIds.Clear();
RenderState.ClearAllPieceOverrides();
RenderState.ClearSelection();
NeedsSceneRebuild = true;
}
public void ClearDocument()
{
Document = null;
LoadError = null;
RenderState.HiddenPieceIds.Clear();
RenderState.ClearAllPieceOverrides();
RenderState.ClearSelection();
NeedsSceneRebuild = true;
}
public void MarkSceneRebuildNeeded()
{
NeedsSceneRebuild = true;
}
public void MarkSceneRebuilt()
{
NeedsSceneRebuild = false;
}
}