12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import 'package:fis_measure/interfaces/date_types/int_size.dart';
- import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
- import 'package:fis_measure/process/items/item.dart';
- import 'package:fis_measure/process/items/item_feature.dart';
- import 'package:fis_measure/process/workspace/measure_data_controller.dart';
- import 'package:flutter/services.dart';
- import 'package:get/get.dart';
- mixin AutoSnapMixin<T extends MeasureItemFeature> on MeasureItem<T> {
- final measureData = Get.find<MeasureDataController>();
- bool _isSmartMove = false;
- bool _isAutoSnap = true;
- double _snapThreshold = 10.0;
- bool snapState = false;
- /// 是否启动智能定位
- bool get isSmartMove => _isSmartMove;
- set isSmartMove(bool value) {
- if (value != _isSmartMove) {
- _isSmartMove = value;
- }
- }
- bool get isAutoSnap => _isAutoSnap;
- set isAutoSnap(bool val) {
- if (val != _isAutoSnap) {
- _isAutoSnap = val;
- }
- }
- /// 自动结束阈值 pixel
- double get snapThreshold => measureData.getAutoSnapDistance();
- set snapThreshold(double val) {
- if (val != _snapThreshold) {
- _snapThreshold = val;
- }
- }
- /// 自动结束检测
- bool checkAutoSnap(PointInfo current, [bool autoFinishFeature = true]) {
- if (feature == null || feature!.innerPoints.length < 3) {
- isSmartMove = false;
- return _syncState(false);
- }
- // final viewport = feature!.hostVisualArea!.viewport!;
- if (isAutoSnap == false) return false;
- final pixelSize = application.displaySize;
- final p1 = feature!.innerPoints.first.scale2Size(pixelSize);
- final p2 = current.scale2Size(pixelSize);
- final length = (p1 - p2).length;
- if (length > snapThreshold * 2.0 && !isSmartMove) {
- isSmartMove = true;
- }
- if (length < snapThreshold && isSmartMove) {
- feature!.innerPoints.last = feature!.innerPoints.first.clone();
- /// 此处的最后一个点,方便计算,但是绘制时要剔除
- // feature!.innerPoints.removeLast();
- HapticFeedback.heavyImpact();
- if (autoFinishFeature) {
- doCalculate();
- doFeatureFinish();
- }
- isSmartMove = false;
- return _syncState(true);
- } else {
- return _syncState(false);
- }
- }
- bool _syncState(bool isSnap) {
- snapState = isSnap;
- return snapState;
- }
- }
|