OTSProgMgr.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435
  1. //#define _CRTDBG_MAP_ALLOC
  2. #include <stdlib.h>
  3. #include <crtdbg.h>
  4. #include "stdafx.h"
  5. #include "OTSModelresource.h"
  6. #include "OTSDATAresource.h"
  7. #include "OTSProgMgr.h"
  8. #include "OTSFileSys.h"
  9. #include "MultiLang.h"
  10. namespace OTSMODEL {
  11. // parameter initialization value
  12. // auto name
  13. const CString AUTO_NAME = _T("Sample");
  14. // sample name
  15. const CString SAMPLE_NAME = _T("Sample");
  16. // measure switch
  17. const BOOL MEASURE_SWITCH = TRUE;
  18. // stop mode
  19. const OTS_MEASURE_STOP_MODE STOPT_MODE = OTS_MEASURE_STOP_MODE::CoverMode;
  20. // stop time
  21. const int MEASURE_TIME = 360;
  22. // stop field num
  23. const int FIELDS_NUM = 200;
  24. // stop part num
  25. const int PARTICL_NUM = 50000;
  26. // get image mode
  27. const OTS_GET_IMAGE_MODE FETCH_IMAGE_MODE = OTS_GET_IMAGE_MODE::FROM_CENTER;
  28. // scan speed
  29. const OTS_THREE_TIES_OPTIONS SCAN_SPEED = OTS_THREE_TIES_OPTIONS::TIE2;
  30. // image size
  31. const OTS_FIVE_TIES_OPTIONS IMAGE_WIDTH = OTS_FIVE_TIES_OPTIONS::TIE1;
  32. // particle area
  33. const CDoubleRange INCA_AREA = { 5, 100 };
  34. // background gray
  35. const CIntRange BACK_GRAY = { 100, 255 };
  36. // particle gray
  37. const CIntRange INCA_GRAY = { 5, 100 };
  38. // XRay scan mode
  39. const OTS_X_RAY_SCAN_MODE SCAN_MODE = OTS_X_RAY_SCAN_MODE::PointMode;
  40. // XRay search speed
  41. const OTS_THREE_TIES_OPTIONS SEARCH_SPEED = OTS_THREE_TIES_OPTIONS::TIE2;
  42. // XRay search count
  43. const int SEARCH_COUNT = 5000;
  44. // XRay analysis speed
  45. const OTS_THREE_TIES_OPTIONS ANALYSIS_SPEED = OTS_THREE_TIES_OPTIONS::TIE2;
  46. // XRay analysis expect count
  47. const int ANALYSIS_EXPECT_COUNT = 10000;
  48. //stage data x start
  49. const long STAGE_DATA_X_AXIS_START = -100000;
  50. //stage data x end
  51. const long STAGE_DATA_X_AXIS_END = 100000;
  52. //stage data y start
  53. const long STAGE_DATA_Y_AXIS_START = -100000;
  54. //stage data y end
  55. const long STAGE_DATA_Y_AXIS_END = 100000;
  56. //stage data x direction
  57. const OTS_X_AXIS_DIRECTION STAGE_DATA_X_AXIS_DIRECTION = OTS_X_AXIS_DIRECTION::LEFT_TOWARD;
  58. //stage data y direction
  59. const OTS_Y_AXIS_DIRECTION STAGE_DATA_Y_AXIS_DIRECTION = OTS_Y_AXIS_DIRECTION::UP_TOWARD;
  60. //100 scan screen width
  61. const int SCREEN_WIDTH_MAG100 = 1142;
  62. COTSProgMgr::COTSProgMgr()
  63. {
  64. }
  65. COTSProgMgr::~COTSProgMgr()
  66. {
  67. }
  68. //
  69. // function: LoadInfoFromProgMgrFile
  70. // input: soft ware id, IncA is 0, ParA is 1
  71. // action: normally, there is a program manager file in system data, this function is used to read the file
  72. // get information from it. Once there is no such file, this function can create a file.
  73. // return: program manager file containing parameter data, nullptr if failed
  74. COTSProgMgrParamFilePtr COTSProgMgr::LoadInfoFromProgMgrFile(OTS_SOFT_PACKAGE_ID a_nPackId)
  75. {
  76. /*int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
  77. tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
  78. _CrtSetDbgFlag(tmpFlag);*/
  79. //_CrtSetBreakAlloc(1963);
  80. // create a program (preference) file manager pointer
  81. COTSProgMgrParamFilePtr pProgMgrParamFile = COTSProgMgrParamFilePtr(new COTSProgMgrParamFile());
  82. // get software pack measure preference file pathname
  83. CString strProgMgrParamFilePathName = COTSFileSys::GetOTSPackMeasurePrefFilePathName(a_nPackId);
  84. if (strProgMgrParamFilePathName.IsEmpty())
  85. {
  86. // shouldn't happen, software pack measure preference file pathname is empty, return nullptr
  87. LogErrorTrace(__FILE__, __LINE__, _T("LoadInfoFromProgMgrFile: failed to find program manager param file pathname."));
  88. return nullptr;
  89. }
  90. // program manager param file exists?
  91. if (COTSFileSys::Exists(strProgMgrParamFilePathName))
  92. {
  93. // tried to load it
  94. if (!pProgMgrParamFile->Load(strProgMgrParamFilePathName))
  95. {
  96. // failed to load the license info file
  97. LogErrorTrace(__FILE__, __LINE__, _T("LoadLicenseInfoFile: failed to load license info file. pathname: %s"), strProgMgrParamFilePathName);
  98. return nullptr;
  99. }
  100. }
  101. else
  102. {
  103. // get app system file path
  104. CString strCompanySysDataPath = COTSFileSys::GetOTSPackSysDataPathName(a_nPackId);
  105. if (strCompanySysDataPath.IsEmpty())
  106. {
  107. // shouldn't happen, program manager param file pathname is empty, return nullptr
  108. LogErrorTrace(__FILE__, __LINE__, _T("LoadInfoFromProgMgrFile: failed to company system data pathname."));
  109. return nullptr;
  110. }
  111. // company system data path exists?
  112. if (!COTSFileSys::Exists(strCompanySysDataPath))
  113. {
  114. // company system data path doesn't exists, create it
  115. if (!COTSFileSys::CreateFolder(strCompanySysDataPath))
  116. {
  117. // failed to create company system data path, can't go any further, return nullptr
  118. LogErrorTrace(__FILE__, __LINE__, _T("LoadInfoFromProgMgrFile: failed to create system path."));
  119. return nullptr;
  120. }
  121. }
  122. // SEM stage
  123. CSEMStageDataPtr pStageData = CSEMStageDataPtr(new CSEMStageData());
  124. pStageData->SetScanFieldSize100(SCREEN_WIDTH_MAG100);
  125. CIntRangePtr pXAxis = CIntRangePtr(new CIntRange(STAGE_DATA_X_AXIS_START, STAGE_DATA_X_AXIS_END));
  126. pStageData->SetXAxis(pXAxis);
  127. CIntRangePtr pYAxis = CIntRangePtr(new CIntRange(STAGE_DATA_Y_AXIS_START, STAGE_DATA_Y_AXIS_END));
  128. pStageData->SetYAxis(pYAxis);
  129. pStageData->SetXAxisDir(STAGE_DATA_X_AXIS_DIRECTION);
  130. pStageData->SetYAxisDir(STAGE_DATA_Y_AXIS_DIRECTION);
  131. pStageData->SetMinMag(MAGNIFICATION_MIN);
  132. // general parameter
  133. COTSGeneralParametersPtr pGenParam = COTSGeneralParametersPtr(new COTSGeneralParameters());
  134. pGenParam->SetSampleName(SAMPLE_NAME);
  135. pGenParam->SetMeasurementSwitch(MEASURE_SWITCH);
  136. // get software pack program data path
  137. CString strOTSProDataPathName = COTSFileSys::GetOTSPackProgDataPathName(a_nPackId);
  138. if (strOTSProDataPathName.IsEmpty())
  139. {
  140. // shouldn't happen, software pack program data path is empty
  141. LogErrorTrace(__FILE__, __LINE__, _T("LoadInfoFromProgMgrFile: failed to get software pack program data path."));
  142. return FALSE;
  143. }
  144. pGenParam->SetMsrParamFileFolderName(strOTSProDataPathName);
  145. pGenParam->SetPartSTDLibFolderName(strOTSProDataPathName);
  146. //image scan parameter
  147. COTSImageScanParamPtr pImageScanParam = COTSImageScanParamPtr(new COTSImageScanParam());
  148. pImageScanParam->SetStopMode(STOPT_MODE);
  149. pImageScanParam->SetStopParamMeasTime(MEASURE_TIME);
  150. pImageScanParam->SetStopParamFields(FIELDS_NUM);
  151. pImageScanParam->SetStopParamParticles(PARTICL_NUM);
  152. pImageScanParam->SetStartImageMode(FETCH_IMAGE_MODE);
  153. pImageScanParam->SetScanImageSpeed(SCAN_SPEED);
  154. pImageScanParam->SetImagePixelSize(IMAGE_WIDTH);
  155. //image process parameter
  156. COTSImageProcessParamPtr pImageProcParam = COTSImageProcessParamPtr(new COTSImageProcessParam());
  157. pImageProcParam->SetIncArea(INCA_AREA);
  158. pImageProcParam->SetBGGray(BACK_GRAY);
  159. pImageProcParam->SetParticleGray(INCA_GRAY);
  160. // X-Ray parameter
  161. COTSXRayParamPtr pXRayParam = COTSXRayParamPtr(new COTSXRayParam());
  162. pXRayParam->SetScanMode(SCAN_MODE);
  163. pXRayParam->SetSearchSpeed(SEARCH_SPEED);
  164. pXRayParam->SetXRaySearchCount(SEARCH_COUNT);
  165. pXRayParam->SetAnalySpeed(ANALYSIS_SPEED);
  166. pXRayParam->SetAnalyExpCount(ANALYSIS_EXPECT_COUNT);
  167. // set the program (preference) file to default
  168. pProgMgrParamFile->SetStageData(pStageData);
  169. pProgMgrParamFile->SetGenParam(pGenParam);
  170. pProgMgrParamFile->SetImageScanParam(pImageScanParam);
  171. pProgMgrParamFile->SetImageProcParam(pImageProcParam);
  172. pProgMgrParamFile->SetXRayParam(pXRayParam);
  173. // create the program (preference) file
  174. if (!pProgMgrParamFile->Save(strProgMgrParamFilePathName))
  175. {
  176. // failed to create
  177. LogErrorTrace(__FILE__, __LINE__, _T("LoadInfoFromProgMgrFile: create program manager file failed."));
  178. return nullptr;
  179. }
  180. }
  181. // ok, return the program (preference) file
  182. return pProgMgrParamFile;
  183. }
  184. // safe parameters into program preference file
  185. BOOL COTSProgMgr::SaveInfoToProgMgrFile(OTS_SOFT_PACKAGE_ID a_nPackId,
  186. CSEMStageDataPtr a_pStageData,
  187. COTSGeneralParametersPtr a_pGenParam,
  188. COTSImageScanParamPtr a_pImageScanParam,
  189. COTSImageProcessParamPtr a_pImageProcParam,
  190. COTSXRayParamPtr a_pXRayParam)
  191. {
  192. // input validation
  193. ASSERT(a_pStageData);
  194. if (!a_pStageData)
  195. {
  196. LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: invalid stage pointer ."));
  197. return FALSE;
  198. }
  199. ASSERT(a_pGenParam);
  200. if (!a_pGenParam)
  201. {
  202. LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: invalid GenParam pointer ."));
  203. return FALSE;
  204. }
  205. ASSERT(a_pImageProcParam);
  206. if (!a_pImageProcParam)
  207. {
  208. LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: invalid ImageProcParam pointer ."));
  209. return FALSE;
  210. }
  211. ASSERT(a_pImageScanParam);
  212. if (!a_pImageScanParam)
  213. {
  214. LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: invalid ImageScanParam pointer ."));
  215. return FALSE;
  216. }
  217. ASSERT(a_pXRayParam);
  218. if (!a_pXRayParam)
  219. {
  220. LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: invalid XRayParam pointer ."));
  221. return FALSE;
  222. }
  223. // create a preference file
  224. COTSProgMgrParamFilePtr pProgMgrParamFile = COTSProgMgrParamFilePtr(new COTSProgMgrParamFile());
  225. // set the new preference file
  226. pProgMgrParamFile->SetStageData(a_pStageData);
  227. pProgMgrParamFile->SetGenParam(a_pGenParam);
  228. pProgMgrParamFile->SetImageScanParam(a_pImageScanParam);
  229. pProgMgrParamFile->SetImageProcParam(a_pImageProcParam);
  230. pProgMgrParamFile->SetXRayParam(a_pXRayParam);
  231. // get software package system data path
  232. CString strSoftwareSysDataPath = COTSFileSys::GetOTSPackSysDataPathName(a_nPackId);
  233. if (strSoftwareSysDataPath.IsEmpty())
  234. {
  235. // shouldn't happen, software package system data path string is empty
  236. LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: failed to software package system data path string."));
  237. return FALSE;
  238. }
  239. // software package system data path exists?
  240. if (!COTSFileSys::Exists(strSoftwareSysDataPath))
  241. {
  242. // software package system data path doesn't exists, create it
  243. if (!COTSFileSys::CreateFolder(strSoftwareSysDataPath))
  244. {
  245. // failed to create software package system data path, return FALSE
  246. LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: failed to create software package system data path."));
  247. return FALSE;
  248. }
  249. }
  250. // get software pack measure preference file pathname
  251. CString strProgMgrParamFilePathName = COTSFileSys::GetOTSPackMeasurePrefFilePathName(a_nPackId);
  252. if (strProgMgrParamFilePathName.IsEmpty())
  253. {
  254. // shouldn't happen, software pack measure preference file pathname is empty, return nullptr
  255. LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: failed to find program manager param file pathname."));
  256. return FALSE;
  257. }
  258. // save parameters into program preference file
  259. if (!pProgMgrParamFile->Save(strProgMgrParamFilePathName))
  260. {
  261. // failed to save program preference file, return FALSE
  262. LogErrorTrace(__FILE__, __LINE__, _T("SaveInfoToProgMgrFile: failed to save program preference file."));
  263. return FALSE;
  264. }
  265. // ok, return TRUE
  266. return TRUE;
  267. }
  268. CString COTSProgMgr::GetStopModeIdString(OTS_MEASURE_STOP_MODE a_nStopMode)
  269. {
  270. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  271. CString strStopModeId = _T("");
  272. if (a_nStopMode >= OTS_MEASURE_STOP_MODE::MIN && a_nStopMode <= OTS_MEASURE_STOP_MODE::MAX)
  273. {
  274. strStopModeId=MultiLang::GetInstance ().GetCStringByKey (IDS_SCANSTOPMODE + (int)a_nStopMode);
  275. }
  276. return strStopModeId;
  277. }
  278. CString COTSProgMgr::GetScanSpeedString(OTS_THREE_TIES_OPTIONS a_nScanSpeed)
  279. {
  280. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  281. CString strScanSpeedId = _T("");
  282. if (a_nScanSpeed >= OTS_THREE_TIES_OPTIONS::MIN && a_nScanSpeed <= OTS_THREE_TIES_OPTIONS::MAX)
  283. {
  284. strScanSpeedId=MultiLang::GetInstance ().GetCStringByKey (IDS_SCANSPEED + (int)a_nScanSpeed);
  285. }
  286. return strScanSpeedId;
  287. }
  288. CString COTSProgMgr::GetImageSizeIdString(OTS_FIVE_TIES_OPTIONS a_nImageSize)
  289. {
  290. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  291. CString strImageSizeId = _T("");
  292. if (a_nImageSize >= OTS_FIVE_TIES_OPTIONS::MIN && a_nImageSize <= OTS_FIVE_TIES_OPTIONS::MAX)
  293. {
  294. strImageSizeId=MultiLang::GetInstance ().GetCStringByKey (IDS_SCANSIZE + (int)a_nImageSize);
  295. }
  296. return strImageSizeId;
  297. }
  298. CString COTSProgMgr::GetGetImageIdString(OTS_GET_IMAGE_MODE a_nGetImageMode)
  299. {
  300. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  301. CString strGetImageId = _T("");
  302. if (a_nGetImageMode >= OTS_GET_IMAGE_MODE::MIN && a_nGetImageMode <= OTS_GET_IMAGE_MODE::MAX)
  303. {
  304. strGetImageId=MultiLang::GetInstance ().GetCStringByKey (IDS_FETCHIMAGEMODE + (int)a_nGetImageMode);
  305. }
  306. return strGetImageId;
  307. }
  308. CString COTSProgMgr::GetXRayAnalySpeedIdString(OTS_THREE_TIES_OPTIONS a_nXRayAnalySpeed)
  309. {
  310. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  311. CString strXRayAnalySpeedId = _T("");
  312. if (a_nXRayAnalySpeed >= OTS_THREE_TIES_OPTIONS::MIN && a_nXRayAnalySpeed <= OTS_THREE_TIES_OPTIONS::MAX)
  313. {
  314. strXRayAnalySpeedId=MultiLang::GetInstance ().GetCStringByKey (IDS_ANALYSPEED + (int)a_nXRayAnalySpeed);
  315. }
  316. return strXRayAnalySpeedId;
  317. }
  318. CString COTSProgMgr::GetXRayScanModeIdString(OTS_X_RAY_SCAN_MODE a_nXRayScanMode)
  319. {
  320. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  321. CString strXRayScanModeId = _T("");
  322. if (a_nXRayScanMode >= OTS_X_RAY_SCAN_MODE::MIN && a_nXRayScanMode <= OTS_X_RAY_SCAN_MODE::MAX)
  323. {
  324. strXRayScanModeId=MultiLang::GetInstance ().GetCStringByKey (IDS_XRAYSCANMODE + (int)a_nXRayScanMode);
  325. }
  326. return strXRayScanModeId;
  327. }
  328. CString COTSProgMgr::GetXRaySearchSpeedIdString(OTS_THREE_TIES_OPTIONS a_nXRaySearchSpeed)
  329. {
  330. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  331. CString strXRaySearchSpeedId = _T("");
  332. if (a_nXRaySearchSpeed >= OTS_THREE_TIES_OPTIONS::MIN && a_nXRaySearchSpeed <= OTS_THREE_TIES_OPTIONS::MAX)
  333. {
  334. strXRaySearchSpeedId=MultiLang::GetInstance ().GetCStringByKey (IDS_SEARCHSPEED + (int)a_nXRaySearchSpeed);
  335. }
  336. return strXRaySearchSpeedId;
  337. }
  338. CString COTSProgMgr::GetYAxisDirectionIdString(OTS_Y_AXIS_DIRECTION a_nYAxisDirection)
  339. {
  340. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  341. CString strYAxisDirectionId = _T("");
  342. if (a_nYAxisDirection >= OTS_Y_AXIS_DIRECTION::MIN && a_nYAxisDirection <= OTS_Y_AXIS_DIRECTION::MAX)
  343. {
  344. strYAxisDirectionId=MultiLang::GetInstance ().GetCStringByKey (IDS_YAXISDIRECTION + (int)a_nYAxisDirection);
  345. }
  346. return strYAxisDirectionId;
  347. }
  348. CString COTSProgMgr::GetSteelTechIdString(STEEL_TECHNOLOGY a_nSteelTech)
  349. {
  350. CString strId = _T("");
  351. if (a_nSteelTech >= STEEL_TECHNOLOGY::MIN && a_nSteelTech <= STEEL_TECHNOLOGY::MAX)
  352. {
  353. strId = MultiLang::GetInstance().GetCStringByKey(IDS_STEEL_TECHNOLOGY + (int)a_nSteelTech);
  354. }
  355. return strId;
  356. }
  357. CString COTSProgMgr::GetXAxisDirectionIdString(OTS_X_AXIS_DIRECTION a_nXAxisDirection)
  358. {
  359. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  360. CString strXAxisDirectionId = _T("");
  361. if (a_nXAxisDirection >= OTS_X_AXIS_DIRECTION::MIN && a_nXAxisDirection <= OTS_X_AXIS_DIRECTION::MAX)
  362. {
  363. strXAxisDirectionId=MultiLang::GetInstance ().GetCStringByKey (IDS_XAXISDIRECTION + (int)a_nXAxisDirection);
  364. }
  365. return strXAxisDirectionId;
  366. }
  367. // get measure area shape
  368. CString COTSProgMgr::GetAreaShapeString(DOMAIN_SHAPE a_nShape)
  369. {
  370. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  371. CString strShape = _T("");
  372. if (a_nShape >= DOMAIN_SHAPE::MIN && a_nShape <= DOMAIN_SHAPE::MAX)
  373. {
  374. strShape = MultiLang::GetInstance().GetCStringByKey(IDS_MEASURE_SHAPE + (int)a_nShape);
  375. }
  376. return strShape;
  377. }
  378. }