|
@@ -8,6 +8,7 @@ import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
|
|
|
import 'package:fis_measure/process/calcuators/calculator.dart';
|
|
|
import 'package:fis_measure/process/calcuators/curve.dart';
|
|
|
import 'package:fis_measure/process/calcuators/formulas/general.dart';
|
|
|
+import 'package:fis_measure/process/workspace/urm/application.dart';
|
|
|
import 'package:fis_measure/utils/canvas.dart';
|
|
|
import 'package:path_drawing/path_drawing.dart';
|
|
|
import 'package:vid/us/vid_us_unit.dart';
|
|
@@ -315,6 +316,20 @@ class EllipseFeature extends AreaItemFeatureAbstract {
|
|
|
return (p2 - p1).length / 2;
|
|
|
}
|
|
|
|
|
|
+ // 获取未缩放的基准半径
|
|
|
+ double getBaseRadiusX([Size? fitSize]) {
|
|
|
+ if (innerPoints.length < 2) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ var p1 = xAxisStart;
|
|
|
+ var p2 = xAxisEnd;
|
|
|
+ if (fitSize != null) {
|
|
|
+ p1 = p1.scale2Size(fitSize);
|
|
|
+ p2 = p2.scale2Size(fitSize);
|
|
|
+ }
|
|
|
+ return (p2 - p1).length / 2;
|
|
|
+ }
|
|
|
+
|
|
|
/// Y轴半径
|
|
|
double getRadiusY([Size? fitSize]) {
|
|
|
if (activeIndex > 1) {
|
|
@@ -354,37 +369,26 @@ class EllipseFeature extends AreaItemFeatureAbstract {
|
|
|
/// 计算Y轴坐标点
|
|
|
void adjustPoints(DPoint point) {
|
|
|
if (activeIndex < 1) return;
|
|
|
- Size refSize;
|
|
|
- if (isURMDualImages ?? false) {
|
|
|
- refSize = Size(refItem.application.displaySize.width / 2,
|
|
|
- refItem.application.displaySize.height);
|
|
|
- } else {
|
|
|
- refSize = refItem.application.displaySize;
|
|
|
+ Size refSize = refItem.application.displaySize;
|
|
|
+ // 判断是否为 URMApp 如果是左右双幅,则需要宽度减半,此处其实是需要一个当前画幅长宽比来确定垂直位置
|
|
|
+ if (refItem.application is URMApplication &&
|
|
|
+ (refItem.application as URMApplication).urmDataProcessor.isLeftRight) {
|
|
|
+ refSize = Size(refSize.width / 2, refSize.height);
|
|
|
}
|
|
|
- // final refSize = Size(refItem.application.displaySize.width / 2,
|
|
|
- // refItem.application.displaySize.height);
|
|
|
- // const refSize= Size(1000, 1000);
|
|
|
- // const restoreSize = Size(1 / 1000, 1 / 1000);
|
|
|
final restoreSize = Size(1 / refSize.width, 1 / refSize.height);
|
|
|
- // final p = point.scale2Size(refSize);
|
|
|
- // final p1 = xAxisStart.scale2Size(refSize);
|
|
|
- // final p2 = xAxisEnd.scale2Size(refSize);
|
|
|
-
|
|
|
- final p = convert2ViewPoint(refSize, point);
|
|
|
- final p1 = convert2ViewPoint(refSize, xAxisStart);
|
|
|
- final p2 = convert2ViewPoint(refSize, xAxisEnd);
|
|
|
+ final p = point.scale2Size(refSize);
|
|
|
+ final p1 = xAxisStart.scale2Size(refSize);
|
|
|
+ final p2 = xAxisEnd.scale2Size(refSize);
|
|
|
final double radius;
|
|
|
if (activeIndex == 2) {
|
|
|
radius = GeneralFormulas.distance2Line(p1, p2, p);
|
|
|
} else {
|
|
|
- radius = getRadiusX(refSize);
|
|
|
+ radius = getBaseRadiusX(refSize);
|
|
|
}
|
|
|
final crossPoints = findCrossPoints(p2, p1, radius);
|
|
|
final p3Index = findNearest(p, crossPoints);
|
|
|
- // innerPoints[2] = crossPoints[p3Index].scale2Size(restoreSize);
|
|
|
- // innerPoints[3] = crossPoints[1 - p3Index].scale2Size(restoreSize);
|
|
|
- innerPoints[2] = convert2ViewPoint(restoreSize, crossPoints[p3Index]);
|
|
|
- innerPoints[3] = convert2ViewPoint(restoreSize, crossPoints[1 - p3Index]);
|
|
|
+ innerPoints[2] = crossPoints[p3Index].scale2Size(restoreSize);
|
|
|
+ innerPoints[3] = crossPoints[1 - p3Index].scale2Size(restoreSize);
|
|
|
}
|
|
|
|
|
|
List<DPoint> findCrossPoints(DPoint a, DPoint b, distance) {
|