ray.dart 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import 'dart:ui';
  2. import 'package:fis_measure/interfaces/date_types/point.dart';
  3. import 'package:fis_measure/interfaces/enums/items.dart';
  4. import 'package:fis_measure/interfaces/process/items/item.dart';
  5. import 'package:fis_measure/interfaces/process/items/item_metas.dart';
  6. import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
  7. import 'package:fis_measure/process/calcuators/ray.dart';
  8. import 'package:fis_measure/process/items/item.dart';
  9. import 'package:fis_measure/process/items/item_feature.dart';
  10. import 'package:fis_measure/utils/canvas.dart';
  11. class Ray extends MeasureItem<RayFeature> {
  12. Ray(ItemMeta meta, IMeasureItem? parent) : super(meta, parent);
  13. final double initializeAngle = 0;
  14. @override
  15. bool onExecuteMouse(PointInfo args) {
  16. if (state == ItemStates.finished || state == ItemStates.waiting) {
  17. if (args.pointType == PointInfoType.mouseMove) {
  18. feature = RayFeature(this, args);
  19. feature!.hostVisualArea = args.hostVisualArea;
  20. final viewport = args.hostVisualArea!.viewport!;
  21. feature!.isReverse =
  22. viewport.isFlipHorizontal ^ viewport.isFlipVertical;
  23. state = ItemStates.running;
  24. }
  25. }
  26. if (state == ItemStates.running) {
  27. if (args.pointType == PointInfoType.mouseUp) return false;
  28. feature?.point = args;
  29. doCalculate();
  30. if (args.pointType == PointInfoType.mouseDown) {
  31. doFeatureFinish();
  32. }
  33. }
  34. return true;
  35. }
  36. @override
  37. bool onExecuteTouch(PointInfo args) {
  38. // TODO: implement onExecuteTouch
  39. throw UnimplementedError();
  40. }
  41. static Ray createRay(ItemMeta meta, [IMeasureItem? parent]) {
  42. final ray = Ray(meta, parent);
  43. ray.calculator = RayDepthCal(ray);
  44. return ray;
  45. }
  46. }
  47. class RayFeature extends MeasureItemFeature {
  48. double _angle = 0;
  49. bool _isReverse = false;
  50. RayFeature(Ray refItem, DPoint point) : super(refItem) {
  51. innerPoints.add(point.clone());
  52. angle = refItem.initializeAngle;
  53. }
  54. DPoint get point => innerPoints[0];
  55. set point(DPoint value) {
  56. innerPoints[0] = value;
  57. }
  58. double get angle => _angle;
  59. set angle(double value) {
  60. if (value != _angle) {
  61. _angle = value;
  62. }
  63. }
  64. bool get isReverse => _isReverse;
  65. set isReverse(bool value) {
  66. if (value != _isReverse) {
  67. _isReverse = value;
  68. }
  69. }
  70. @override
  71. void paint(Canvas canvas, Size size) {
  72. if (innerPoints.isEmpty) return;
  73. final offset = convert2ViewPoint(size, point).toOffset();
  74. final left = Offset(0, offset.dy);
  75. final right = Offset(size.width, offset.dy);
  76. canvas.drawDashLine(left, right, 1, 10, paintPan);
  77. var idText = '$id.${refItem.displayName}';
  78. drawCustomId(canvas, size, right, idText);
  79. }
  80. }