#include "CCOS.Dev.CollimatorMoudle.hpp" #include "CCOSDICOMInfo.h" using namespace CCOS::Dev; using namespace CCOS::Dev::Detail::Collimator; namespace nsColli = CCOS::Dev::Detail::Collimator; nsColli::CollimatorDevice::CollimatorDevice(std::shared_ptr EventCenter) :super(EventCenter) { m_EventCenter = EventCenter; m_nXSize = 0; m_nYSize = 0; m_nFilter = 0; m_nSID = 0; m_nAngle = 0; m_nMode = -1; } nsColli::CollimatorDevice::~CollimatorDevice() { } void nsColli::CollimatorDevice::FireNotify(string key, unsigned short value) { char szInfo[64] = { 0 }; snprintf(szInfo, sizeof(szInfo), "%d", value); std::string str = szInfo; m_EventCenter->OnNotify(1, key, str);//(int)ATTRACTION_SET 2 } void nsColli::CollimatorDevice::Register() { auto Disp = m_Dispatch.Lock().As(); Disp->Action.Push("SetCollimatorSize", this, &nsColli::CollimatorDevice::JSSetCollimatorSize); Disp->Get.Push("Mode", this, &nsColli::CollimatorDevice::JSGetCollimatorMode); } bool nsColli::CollimatorDevice::Prepare() { Register(); return true; } std::string nsColli::CollimatorDevice::GetGUID() const { return CollimatorUnitType; } RET_STATUS CollimatorDevice::JSSetStudyInfo(std::string in, std::string& out) { ResDataObject json; json.decode(in.c_str()); return SetStudyInfo(json); } RET_STATUS CollimatorDevice::JSSetTechParamsInfo(std::string in, std::string& out) { ResDataObject json; json.decode(in.c_str()); return SetTechParamsInfo(json); } RET_STATUS CollimatorDevice::JSSetCollimatorSize(std::string in, std::string& out) { ResDataObject json; json.decode(in.c_str()); unsigned short xsize, ysize; xsize = json[0]; ysize = json[1]; return SetCollimatorSize(xsize, ysize); } RET_STATUS CollimatorDevice::JSSetCollimatorSID(std::string in, std::string& out) { ResDataObject json; json.decode(in.c_str()); unsigned short nParam = json[0]; return SetCollimatorSID(nParam); } RET_STATUS CollimatorDevice::JSSetCollimatorFilter(std::string in, std::string& out) { ResDataObject json; json.decode(in.c_str()); unsigned short nParam = json[0]; return SetCollimatorFilter(nParam); } RET_STATUS CollimatorDevice::JSSetCollimatorAngle(std::string in, std::string& out) { ResDataObject json; json.decode(in.c_str()); unsigned short nParam = json[0]; return SetCollimatorAngle(nParam); } RET_STATUS CollimatorDevice::JSSetCollimatorMode(std::string in, std::string& out) { ResDataObject json; json.decode(in.c_str()); unsigned short nParam = json[0]; return SetCollimatorMode(nParam); } RET_STATUS CollimatorDevice::JSGetCollimatorXSize(std::string& out) { char szInfo[64] = { 0 }; snprintf(szInfo, sizeof(szInfo), "%d", m_nXSize); out = szInfo; return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::JSGetCollimatorYSize(std::string& out) { char szInfo[64] = { 0 }; snprintf(szInfo, sizeof(szInfo), "%d", m_nYSize); out = szInfo; return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::JSGetCollimatorSID(std::string& out) { char szInfo[64] = { 0 }; snprintf(szInfo, sizeof(szInfo), "%d", m_nSID); out = szInfo; return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::JSGetCollimatorFilter(std::string& out) { char szInfo[64] = { 0 }; snprintf(szInfo, sizeof(szInfo), "%d", m_nFilter); out = szInfo; return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::JSGetCollimatorAngle(std::string& out) { char szInfo[64] = { 0 }; snprintf(szInfo, sizeof(szInfo), "%d", m_nAngle); out = szInfo; return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::JSGetCollimatorMode(std::string& out) { char szInfo[64] = { 0 }; snprintf(szInfo, sizeof(szInfo), "%d", m_nMode); out = szInfo; return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::SetCollimatorSize(unsigned short xsize, unsigned short ysize) { return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::SetCollimatorSID(unsigned short sid) { return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::SetCollimatorFilter(unsigned short pParams) { return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::SetCollimatorAngle(unsigned short pParams) { return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::SetCollimatorMode(unsigned short Param) { return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::UpdateCollimatorXSize(unsigned short Param) { m_nXSize = Param; FireNotify("XSize", Param); return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::UpdateCollimatorYSize(unsigned short Param) { m_nYSize = Param; FireNotify("YSize", Param); return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::UpdateCollimatorSID(unsigned short Param) { m_nSID = Param; FireNotify("SID", Param); return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::UpdateCollimatorAngle(unsigned short Param) { m_nAngle = Param; FireNotify("Angle", Param); return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::UpdateCollimatorFilter(unsigned short Param) { m_nFilter = Param; FireNotify("Filter", Param); return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::UpdateCollimatorMode(unsigned short Param) { m_nMode = Param; FireNotify("Mode", Param); return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::SetStudyInfo(ResDataObject & pParam) { return RET_STATUS::RET_SUCCEED; } RET_STATUS CollimatorDevice::SetTechParamsInfo(ResDataObject& pParam) { TECHPARAM_INFO info; info.SetVal(pParam.encode()); std::string strcollimatorwidth = info.m_CollimatorWidth; std::string strcollimatorheight = info.m_CollimatorHeight; std::string strcollimatorfilter = info.m_CollimatorFilter; unsigned short Width = 0; // 使用标准类型 unsigned short 替代 Dunsigned short unsigned short Height = 0; unsigned short dwFilter = 0; // 处理宽度(单位转换:若包含"IN"则英寸转厘米,否则直接取数值) if (strcollimatorwidth.find("IN") != std::string::npos) { // 截取数值部分(去掉末尾"IN"),转换为double后乘以2.54(英寸转厘米) std::string numStr = strcollimatorwidth.substr(0, strcollimatorwidth.size() - 2); Width = static_cast(atof(numStr.c_str()) * 2.54); } else { // 截取数值部分(假设单位为厘米,去掉末尾单位),直接转换为整数 std::string numStr = strcollimatorwidth.substr(0, strcollimatorwidth.size() - 2); Width = static_cast(atoi(numStr.c_str())); } // 处理高度(逻辑同宽度) if (strcollimatorheight.find("IN") != std::string::npos) { std::string numStr = strcollimatorheight.substr(0, strcollimatorheight.size() - 2); Height = static_cast(atof(numStr.c_str()) * 2.54); } else { std::string numStr = strcollimatorheight.substr(0, strcollimatorheight.size() - 2); Height = static_cast(atoi(numStr.c_str())); } // 设置准直器尺寸(非零值才生效) if (Width != 0 && Height != 0) { SetCollimatorSize(Width, Height); } // 处理过滤器参数 dwFilter = static_cast(atoi(strcollimatorfilter.c_str())); if (dwFilter >= 0) // unsigned short 本身非负,此判断可简化为 if (true),但保留原逻辑 { SetCollimatorFilter(dwFilter); } return RET_STATUS::RET_SUCCEED; }