1.먼저 수정하고자 선택한 DICOM Element
를 가져오기 위해
고유 ID에 dcmElementPtr
을 Table에 row 추가시 dictionary로 저장
var ID2Elements = {}; function loadDICOMFileHierarchy(fileName){ ///load시 재 초기화 ID2Elements = {}; } function AddTableRow(dcmElementPtr, level, parentRow, id, isLeaf){ ///insert to dictionary ID2Elements[id] = dcmElementPtr; ... }
2.수정 popup에서 ok후 rowData 및 SetElementValue()로 실제 DcmElement에 update
... callback: function (data) { if (!data) return; ///modify rowData['value'] = data.value.trim(); nodeDCMTK.SetElementValue(ID2Elements[id], rowData['vr']); }
3.SetElementValue()는 아래 형태로 수정
int SetElementValue(void* elementPtr, char* value) { DcmElement* pElement = (DcmElement*)elementPtr; if (pElement == NULL) return 0; try { OFCondition status = pElement->putString(value); if (!status.good()) return 0; } catch (...) { OutputDebugStringA("SetElementValue Exception!"); return 0; } return 1; }
4.File Save를 위해 menu에 save file…기능 추가
{ label: 'Save File...', click: ()=>{ var fileName=[]; fileName = dialog.showSaveDialog({ properties: ['saveFile'], filters: [ {name: 'DICOM', extensions: ['dcm', 'dic']}, {name: 'All Files', extensions: ['*']} ] }); if(fileName == null) return; dcmTK.saveDICOMFile(fileName); } },
5.SaveDICOMFile()함수는 아래 형태로 구현
int SaveDcmFileFormat(void* dcmPtr, char* fileName) { DcmFileFormat* pDcmFileFormat = (DcmFileFormat*)dcmPtr; if (pDcmFileFormat == NULL) return 0; try { OFFilename *pOFFileName = new OFFilename(fileName); OFCondition status = pDcmFileFormat->saveFile(*pOFFileName); if (!status.good()) return 0; } catch (...) { OutputDebugStringA("SaveDcmFileFormat::saveFile Exception!"); } return 1; }
7.수정된 DICOM 파일로 정상 저장 됨