重做
<h2>类图</h2>
<p><strong>LabMainWnd</strong>:播放器UI主窗口
<strong>LabLearnStep_Wnd</strong>:实验学习步骤UI窗口
<strong>MasterController</strong>:主控外壳
<strong>CourseScene</strong>:处理实验用品序列化数据类
<strong>StepManager</strong>:控制实验步骤播放业务的管理器
<strong>TeachingStepController</strong>:控制学习步骤的控制器类
<strong>IVLabExprimentStep</strong>:实验步骤控制器接口</p>
<pre><code class="language-plantuml">@startuml
class LabMainWnd
{
Dictionary<int, string> _stepSaveData
void RedoStepFromBegin();
void StartRedoStep(int index)
void ReloadStepData()
}
class LabLearnStep_Wnd
{
void UpdateLearnStepState_Finish(int index)
void UpdateLearnStepState_Waiting(int index)
}
class MasterController
{
void MasterMsgEvent_Register()
void MasterMsgEvent_UnRegister()
void StepRestartFrom(string msgName, object content);
}
class CourseScene
{
void GetEquipObjectModel();
}
class StepManager
{
void RestartFrom(int stepIndex)
}
class TeachingStepController
{
void Init()
void Start()
void Stop()
}
interface IVLabExprimentStep
{
void Init()
void Stop()
void Start()
}
LabLearnStep_Wnd --* LabMainWnd
LabMainWnd --> CourseScene
MasterController --> StepManager
TeachingStepController --* StepManager
IVLabExprimentStep --* TeachingStepController
note "通过消息" as N1
LabMainWnd .. N1
N1 .. MasterController
@enduml</code></pre>
<h2>时序图</h2>
<pre><code class="language-plantuml">participant User
User -> LabMainWnd: StartRedoStep
activate LabMainWnd
LabMainWnd -> LabMainWnd: ResetView()
LabMainWnd -> LabMainWnd: HideOherButton()
LabMainWnd -> LabMainWnd: OpenWaitingWnd()
LabMainWnd -> LabMainWnd: UpdateStepBegaviourByIndex()
LabMainWnd -> LabMainWnd: ReloadProcess()
activate LabMainWnd
LabMainWnd -> LabLearnStep_Wnd: ActiveLearnStepWnd()
LabLearnStep_Wnd --> LabMainWnd
LabMainWnd -> LabMainWnd: StopEngine()
LabMainWnd -> LabMainWnd: ReloadStepData()
activate LabMainWnd
LabMainWnd -> CourseScene:ResetEquipObjectModel
CourseScene --> LabMainWnd:
LabMainWnd -> ICoursewarePlayer:Rebuild3DSceneRuntimeAsync
ICoursewarePlayer --> LabMainWnd
LabMainWnd -> MasterController: sendMsg(Master_Step_RestartFrom)
activate MasterController
MasterController -> StepManager:RestartFrom
StepManager -> TeachingStepController:Start
TeachingStepController --> StepManager
StepManager --> MasterController
MasterController --> LabMainWnd
LabMainWnd -> LabMainWnd: ReopenEngine()
@enduml</code></pre>