#pragma once #include "IMotionModel.h" namespace DIOS::Dev::Detail::MachineryECOM { class CBCTMotionStageArgs; class ICircularController; class ISwingController; class ISensorEncoderController; class IExposureController; class IOutputController; class CBCTMotionModel : public IMotionModel { public: CBCTMotionModel(); ~CBCTMotionModel(); public: virtual void ChangeStage(const std::string &stageName) override; virtual std::string GetStageName() override; virtual IMotionStageArgs *GetStageArgs() override; public: virtual void Initialize(IMachineryManager *machineryManager, IPositionManager *coordinates) override; virtual void LoadMachineryParams(ResDataObject ¶ms) override; virtual void LoadModelParams(ResDataObject ¶ms) override; virtual void SetTechnicalParams(ResDataObject ¶ms) override; virtual void OnFeedbackMotionParams(ResDataObject ¶ms) override; virtual BOOL GetMotionParams(ResDataObject ¶ms) override; virtual void SwitchScanningComponents(int nSwitch) override; virtual void SwitchWorkstation(string ws) override; private: void OnMotionStage(const std::string &stageName); void MotionStageClearParams(); void MotionStageCalculateParams(); void MotionStageSetCBCTMotionSlice(); void MotionStageMovetoEndPos(); void MotionStageMovetoStartPos(); void MotionStageErrorStop(); void MotionStageErrorRecover(); void TubeSwingToStartPostion(); void TubeCircularToStartPosition(); int JudgeDirectionInTubeSwingAxis(float current, float target); void RotateTubeSwing(int direction, float offset, float spd = 0.0f); int JudgeDirectionInTubeHeightAxis(float current, float target); void MoveTubeCircular(int direction, float offset, float spd = 0.0f); void OnStartExposure(); void OnStopExposure(); private: std::string m_StageName; CBCTMotionStageArgs *m_stageArgs; IPositionManager *m_coordinates; IMachineryManager *m_machineryManager; ICircularController *m_circular; ISwingController *m_swing; ISensorEncoderController *m_circularencoder; ISensorEncoderController *m_swingencoder; IExposureController *m_exposure; IOutputController* m_fluoroSwitch; ResDataObject m_MachineryParams; ResDataObject m_ModelParams; ResDataObject m_TechnicalParams; float m_startPos; float m_endPos; std::vector m_exposureTriggerSlice; std::vector m_FeedbackTubeCircularEncoders; bool m_bUseCARMRotationScanning; //false:»¬¹ì»¬¶¯É¨Ãè true:ÖáÏòת¶¯É¨Ãè }; }