123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- import 'dart:typed_data';
- import 'package:fis_common/event/event_type.dart';
- import 'package:fis_vid_ext/vid_extended_data.dart';
- import 'package:fis_vid_ext/vid_tag.dart';
- import 'package:fis_vid_ext/vid_value.dart';
- import 'pixel_space.dart';
- class StandardLine {
-
- static const double DefaultPhysicsLength = 4.0;
-
- static final VidTag DicomTagPixelSpacing = VidTag("0028", "0030");
-
- static final VidTag DicomTagPhysicalDeltaY = VidTag("0018", "602E");
-
- static final VidTag DicomTagPhysicalDeltaX = VidTag("0018", "602C");
-
- static final VidTag DicomTagPhysicalUnitsX = VidTag("0018", "6024");
-
- static final VidTag DicomTagPhysicalUnitsY = VidTag("0018", "6026");
- PixelSpacing _currentPixelSpacing = PixelSpacing();
- double _physicsLength = DefaultPhysicsLength;
- double _pixelLength = 0.0;
- double _perPixelPhysicalLength = 0.0;
-
- double get physicsLength => _physicsLength;
- set physicsLength(double val) {
- if (val != _physicsLength) {
- _physicsLength = val;
- _onLineLengthChanged();
- }
- }
-
- double get pixelLength => _pixelLength;
- set pixelLength(double val) {
- if (val != _pixelLength) {
- _pixelLength = val;
- _onLineLengthChanged();
- }
- }
-
- double get perPixelPhysicalLength => _perPixelPhysicalLength;
-
- PixelSpacing get currentPixelSpacing => _currentPixelSpacing;
- set currentPixelSpacing(PixelSpacing val) {
- if (val != _currentPixelSpacing) {
- _currentPixelSpacing = val;
- _onPixelSpacingChanged();
- }
- }
-
- final pixelSpacingChanged = FEventHandler<PixelSpacing?>();
-
- void loadFromVidExtData(Uint8List bytes) {
- final extInfo = VidExtendedData.fromBytes(bytes);
- if (extInfo == null) {
- currentPixelSpacing = PixelSpacing();
- return;
- }
- PixelSpacing pixelSpacing = PixelSpacing();
- var pixelSpacingValue = _getVidValueByTag(DicomTagPixelSpacing, extInfo);
- if (pixelSpacingValue != null) {
- var pixelSpacingArray =
- pixelSpacingValue.getValue().toString().split('\\');
- if (pixelSpacingArray.length > 1) {
- double? pixelSpacingX = double.tryParse(pixelSpacingArray[0]);
- if (pixelSpacingX != null) {
- pixelSpacing.physicalDeltaX = pixelSpacingX;
- }
- double? pixelSpacingY = double.tryParse(pixelSpacingArray[1]);
- if (pixelSpacingY != null) {
- pixelSpacing.physicalDeltaY = pixelSpacingY;
- }
- }
- } else {
- pixelSpacing.physicalDeltaX = _getPhysicalDeltaX(extInfo);
- pixelSpacing.physicalDeltaY = _getPhysicalDeltaY(extInfo);
- }
- if (pixelSpacing.physicalDeltaX > 0 &&
- pixelSpacing.physicalDeltaX < 1.0 &&
- pixelSpacing.physicalDeltaY > 0 &&
- pixelSpacing.physicalDeltaY < 1.0) {
- currentPixelSpacing = pixelSpacing;
- } else {
- currentPixelSpacing = PixelSpacing();
- }
- }
- void _onLineLengthChanged() {
- final physicalDeltaX = physicsLength * 10 / pixelLength;
- final physicalDeltaY = physicalDeltaX;
- currentPixelSpacing = PixelSpacing.fill(physicalDeltaX, physicalDeltaY);
- }
- void _onPixelSpacingChanged() {
- _perPixelPhysicalLength =
- _getPixelLengthWithUnit(currentPixelSpacing.physicalDeltaX);
- }
- double _getPixelLengthWithUnit(double length) {
-
-
- length = length / 10;
-
- return length;
- }
- IVidValue? _getVidValueByTag(VidTag vidTag, VidExtendedData extendedData) {
- var matchKeys = extendedData.data.keys
- .where((v) => v.group == vidTag.group && v.element == vidTag.element);
- if (matchKeys.isNotEmpty) {
- final vidTagKey = matchKeys.first;
- var vidValue = extendedData.data[vidTagKey];
- return vidValue;
- }
- return null;
- }
- double _getPhysicalDeltaX(VidExtendedData extendedData) {
- final physicalDeltaXvalue =
- _getVidValueByTag(DicomTagPhysicalDeltaX, extendedData);
- if (physicalDeltaXvalue != null) {
- final physicalUnitsXvalue =
- _getVidValueByTag(DicomTagPhysicalUnitsX, extendedData);
- if (physicalUnitsXvalue != null) {
- var unitsvalue = int.parse(physicalUnitsXvalue.getValue().toString());
- if (unitsvalue == 3) {
- var physicalDeltaX =
- double.parse(physicalDeltaXvalue.getValue().toString()) * 10;
- return physicalDeltaX;
- }
- }
- }
- return 1.0;
- }
- double _getPhysicalDeltaY(VidExtendedData extendedData) {
- final physicalDeltaYvalue =
- _getVidValueByTag(DicomTagPhysicalDeltaY, extendedData);
- if (physicalDeltaYvalue != null) {
- final physicalUnitsYvalue =
- _getVidValueByTag(DicomTagPhysicalUnitsY, extendedData);
- if (physicalUnitsYvalue != null) {
- var unitsvalue = int.parse(physicalUnitsYvalue.getValue().toString());
- if (unitsvalue == 3) {
- var physicalDeltaX =
- double.parse(physicalDeltaYvalue.getValue().toString()) * 10;
- return physicalDeltaX;
- }
- }
- }
- return 1.0;
- }
- }
|