Mercurial > hg > orthanc
comparison Core/DicomParsing/FromDcmtkBridge.cpp @ 3194:47ef29168698
support of value multiplicity in ITagVisitor
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 05 Feb 2019 18:34:27 +0100 |
parents | 0c2b719c3796 |
children | 880e4161c312 |
comparison
equal
deleted
inserted
replaced
3193:c6cfd502bf79 | 3194:47ef29168698 |
---|---|
2263 * Numeric types | 2263 * Numeric types |
2264 **/ | 2264 **/ |
2265 | 2265 |
2266 case EVR_SL: // signed long | 2266 case EVR_SL: // signed long |
2267 { | 2267 { |
2268 Sint32 f; | 2268 DcmSignedLong& content = dynamic_cast<DcmSignedLong&>(element); |
2269 if (dynamic_cast<DcmSignedLong&>(element).getSint32(f).good()) | 2269 |
2270 std::vector<int64_t> values; | |
2271 values.reserve(content.getVM()); | |
2272 | |
2273 for (unsigned long i = 0; i < content.getVM(); i++) | |
2270 { | 2274 { |
2271 visitor.VisitInteger(parentTags, parentIndexes, tag, vr, f); | 2275 Sint32 f; |
2276 if (content.getSint32(f, i).good()) | |
2277 { | |
2278 values.push_back(f); | |
2279 } | |
2272 } | 2280 } |
2273 | 2281 |
2282 visitor.VisitIntegers(parentTags, parentIndexes, tag, vr, values); | |
2274 break; | 2283 break; |
2275 } | 2284 } |
2276 | 2285 |
2277 case EVR_SS: // signed short | 2286 case EVR_SS: // signed short |
2278 { | 2287 { |
2279 Sint16 f; | 2288 DcmSignedShort& content = dynamic_cast<DcmSignedShort&>(element); |
2280 if (dynamic_cast<DcmSignedShort&>(element).getSint16(f).good()) | 2289 |
2290 std::vector<int64_t> values; | |
2291 values.reserve(content.getVM()); | |
2292 | |
2293 for (unsigned long i = 0; i < content.getVM(); i++) | |
2281 { | 2294 { |
2282 visitor.VisitInteger(parentTags, parentIndexes, tag, vr, f); | 2295 Sint16 f; |
2296 if (content.getSint16(f, i).good()) | |
2297 { | |
2298 values.push_back(f); | |
2299 } | |
2283 } | 2300 } |
2284 | 2301 |
2302 visitor.VisitIntegers(parentTags, parentIndexes, tag, vr, values); | |
2285 break; | 2303 break; |
2286 } | 2304 } |
2287 | 2305 |
2288 case EVR_UL: // unsigned long | 2306 case EVR_UL: // unsigned long |
2289 { | 2307 { |
2290 Uint32 f; | 2308 DcmUnsignedLong& content = dynamic_cast<DcmUnsignedLong&>(element); |
2291 if (dynamic_cast<DcmUnsignedLong&>(element).getUint32(f).good()) | 2309 |
2310 std::vector<int64_t> values; | |
2311 values.reserve(content.getVM()); | |
2312 | |
2313 for (unsigned long i = 0; i < content.getVM(); i++) | |
2292 { | 2314 { |
2293 visitor.VisitInteger(parentTags, parentIndexes, tag, vr, f); | 2315 Uint32 f; |
2316 if (content.getUint32(f, i).good()) | |
2317 { | |
2318 values.push_back(f); | |
2319 } | |
2294 } | 2320 } |
2295 | 2321 |
2322 visitor.VisitIntegers(parentTags, parentIndexes, tag, vr, values); | |
2296 break; | 2323 break; |
2297 } | 2324 } |
2298 | 2325 |
2299 case EVR_US: // unsigned short | 2326 case EVR_US: // unsigned short |
2300 { | 2327 { |
2301 Uint16 f; | 2328 DcmUnsignedShort& content = dynamic_cast<DcmUnsignedShort&>(element); |
2302 if (dynamic_cast<DcmUnsignedShort&>(element).getUint16(f).good()) | 2329 |
2330 std::vector<int64_t> values; | |
2331 values.reserve(content.getVM()); | |
2332 | |
2333 for (unsigned long i = 0; i < content.getVM(); i++) | |
2303 { | 2334 { |
2304 visitor.VisitInteger(parentTags, parentIndexes, tag, vr, f); | 2335 Uint16 f; |
2336 if (content.getUint16(f, i).good()) | |
2337 { | |
2338 values.push_back(f); | |
2339 } | |
2305 } | 2340 } |
2306 | 2341 |
2342 visitor.VisitIntegers(parentTags, parentIndexes, tag, vr, values); | |
2307 break; | 2343 break; |
2308 } | 2344 } |
2309 | 2345 |
2310 case EVR_FL: // float single-precision | 2346 case EVR_FL: // float single-precision |
2311 { | 2347 { |
2312 Float32 f; | 2348 DcmFloatingPointSingle& content = dynamic_cast<DcmFloatingPointSingle&>(element); |
2313 if (dynamic_cast<DcmFloatingPointSingle&>(element).getFloat32(f).good()) | 2349 |
2350 std::vector<double> values; | |
2351 values.reserve(content.getVM()); | |
2352 | |
2353 for (unsigned long i = 0; i < content.getVM(); i++) | |
2314 { | 2354 { |
2315 visitor.VisitDouble(parentTags, parentIndexes, tag, vr, f); | 2355 Float32 f; |
2356 if (content.getFloat32(f, i).good()) | |
2357 { | |
2358 values.push_back(f); | |
2359 } | |
2316 } | 2360 } |
2317 | 2361 |
2362 visitor.VisitDoubles(parentTags, parentIndexes, tag, vr, values); | |
2318 break; | 2363 break; |
2319 } | 2364 } |
2320 | 2365 |
2321 case EVR_FD: // float double-precision | 2366 case EVR_FD: // float double-precision |
2322 { | 2367 { |
2323 Float64 f; | 2368 DcmFloatingPointDouble& content = dynamic_cast<DcmFloatingPointDouble&>(element); |
2324 if (dynamic_cast<DcmFloatingPointDouble&>(element).getFloat64(f).good()) | 2369 |
2370 std::vector<double> values; | |
2371 values.reserve(content.getVM()); | |
2372 | |
2373 for (unsigned long i = 0; i < content.getVM(); i++) | |
2325 { | 2374 { |
2326 visitor.VisitDouble(parentTags, parentIndexes, tag, vr, f); | 2375 Float64 f; |
2376 if (content.getFloat64(f, i).good()) | |
2377 { | |
2378 values.push_back(f); | |
2379 } | |
2327 } | 2380 } |
2328 | 2381 |
2382 visitor.VisitDoubles(parentTags, parentIndexes, tag, vr, values); | |
2329 break; | 2383 break; |
2330 } | 2384 } |
2331 | 2385 |
2332 | 2386 |
2333 /** | 2387 /** |
2334 * Attribute tag. | 2388 * Attribute tag. |
2335 **/ | 2389 **/ |
2336 | 2390 |
2337 case EVR_AT: | 2391 case EVR_AT: |
2338 { | 2392 { |
2339 DcmTagKey tagKey; | 2393 DcmAttributeTag& content = dynamic_cast<DcmAttributeTag&>(element); |
2340 if (dynamic_cast<DcmAttributeTag&>(element).getTagVal(tagKey, 0).good()) | 2394 |
2395 std::vector<DicomTag> values; | |
2396 values.reserve(content.getVM()); | |
2397 | |
2398 for (unsigned long i = 0; i < content.getVM(); i++) | |
2341 { | 2399 { |
2342 DicomTag t(tagKey.getGroup(), tagKey.getElement()); | 2400 DcmTagKey f; |
2343 visitor.VisitAttribute(parentTags, parentIndexes, tag, vr, t); | 2401 if (content.getTagVal(f, i).good()) |
2402 { | |
2403 DicomTag t(f.getGroup(), f.getElement()); | |
2404 values.push_back(t); | |
2405 } | |
2344 } | 2406 } |
2345 | 2407 |
2408 visitor.VisitAttributes(parentTags, parentIndexes, tag, vr, values); | |
2346 break; | 2409 break; |
2347 } | 2410 } |
2348 | 2411 |
2349 | 2412 |
2350 /** | 2413 /** |