|
@@ -10,6 +10,7 @@ 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:flutter/rendering.dart';
|
|
|
import 'package:path_drawing/path_drawing.dart';
|
|
|
import 'package:vid/us/vid_us_unit.dart';
|
|
|
import 'area_abstract.dart';
|
|
@@ -300,6 +301,61 @@ class EllipseFeature extends AreaItemFeatureAbstract {
|
|
|
canvas.restore();
|
|
|
}
|
|
|
|
|
|
+ void paintShapeFitInSize(Canvas canvas, Size size, Paint paintPan) {
|
|
|
+ if (innerPoints.isEmpty) return;
|
|
|
+
|
|
|
+ final xStartOffset = convert2ViewPoint(size, xAxisStart).toOffset();
|
|
|
+ final xEndOffset = convert2ViewPoint(size, xAxisEnd).toOffset();
|
|
|
+ final centroidOffset = convert2ViewPoint(size, centroid).toOffset();
|
|
|
+
|
|
|
+ final radiusX = getRadiusX(size);
|
|
|
+ final radiusY = getRadiusY(size);
|
|
|
+
|
|
|
+ canvas.save();
|
|
|
+
|
|
|
+ // 创建椭圆路径
|
|
|
+ final path = Path();
|
|
|
+ path.addOval(
|
|
|
+ Rect.fromCenter(
|
|
|
+ center: centroidOffset,
|
|
|
+ width: radiusX * 2,
|
|
|
+ height: radiusY * 2,
|
|
|
+ ),
|
|
|
+ );
|
|
|
+
|
|
|
+ // 计算旋转角度
|
|
|
+ final rotateRad = (xEndOffset - xStartOffset).direction;
|
|
|
+
|
|
|
+ // 创建一个矩阵来应用旋转
|
|
|
+ final rotateMatrix = Matrix4.rotationZ(rotateRad);
|
|
|
+ // 获取旋转后的路径
|
|
|
+ final rotatedPath = path.transform(rotateMatrix.storage);
|
|
|
+
|
|
|
+ // 获取外接矩形
|
|
|
+ final rect = rotatedPath.getBounds();
|
|
|
+
|
|
|
+ // 计算缩放比例
|
|
|
+ final scaleW = size.width / rect.width;
|
|
|
+ final scaleH = size.height / rect.height;
|
|
|
+ final scale = scaleW < scaleH ? scaleW : scaleH;
|
|
|
+
|
|
|
+ // 计算平移距离
|
|
|
+ final dx = (size.width - rect.width * scale) / 2 - rect.left * scale;
|
|
|
+ final dy = (size.height - rect.height * scale) / 2 - rect.top * scale;
|
|
|
+
|
|
|
+ // 应用变换
|
|
|
+ canvas.translate(dx, dy);
|
|
|
+ canvas.scale(scale, scale);
|
|
|
+
|
|
|
+ // 调整画笔宽度
|
|
|
+ paintPan.strokeWidth = 1 / scale;
|
|
|
+
|
|
|
+ // 绘制路径
|
|
|
+ canvas.drawPath(rotatedPath, paintPan);
|
|
|
+
|
|
|
+ canvas.restore();
|
|
|
+ }
|
|
|
+
|
|
|
/// X轴半径
|
|
|
double getRadiusX([Size? fitSize]) {
|
|
|
if (innerPoints.length < 2) {
|