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 /**