|
@@ -253,6 +253,52 @@ class EllipseFeature extends AreaItemFeatureAbstract {
|
|
|
@override
|
|
|
void paintPerfusion(Canvas canvas, Size size) {}
|
|
|
|
|
|
+ void paintSharpOnly(Canvas canvas, Size size, {Paint? customPaintPen}) {
|
|
|
+ if (innerPoints.isEmpty) return;
|
|
|
+
|
|
|
+ final xStartOffset = convert2ViewPoint(size, xAxisStart).toOffset();
|
|
|
+ final xEndOffset = convert2ViewPoint(size, xAxisEnd).toOffset();
|
|
|
+ canvas.drawDashLine(
|
|
|
+ xStartOffset, xEndOffset, 1, 10, customPaintPen ?? paintLinePan);
|
|
|
+
|
|
|
+ final yStartOffset = convert2ViewPoint(size, innerPoints[2]).toOffset();
|
|
|
+ final yEndOffset = convert2ViewPoint(size, innerPoints[3]).toOffset();
|
|
|
+ final centroidOffset = convert2ViewPoint(size, centroid).toOffset();
|
|
|
+ canvas.drawDashLine(
|
|
|
+ yStartOffset, yEndOffset, 1, 10, customPaintPen ?? paintLinePan);
|
|
|
+
|
|
|
+ final radiusX = getRadiusX(size);
|
|
|
+ final radiusY = getRadiusY(size);
|
|
|
+
|
|
|
+ canvas.save();
|
|
|
+ final path = Path();
|
|
|
+ path.moveTo(xStartOffset.dx, xStartOffset.dy);
|
|
|
+
|
|
|
+ // 以质心为原点旋转到水平方向
|
|
|
+ canvas.translate(centroidOffset.dx, centroidOffset.dy);
|
|
|
+ final rotateRad = (xEndOffset - xStartOffset).direction;
|
|
|
+ canvas.rotate(rotateRad);
|
|
|
+ canvas.translate(-centroidOffset.dx, -centroidOffset.dy);
|
|
|
+
|
|
|
+ path.addOval(
|
|
|
+ Rect.fromCenter(
|
|
|
+ center: centroidOffset,
|
|
|
+ width: radiusX * 2,
|
|
|
+ height: radiusY * 2,
|
|
|
+ ),
|
|
|
+ );
|
|
|
+
|
|
|
+ canvas.drawPath(
|
|
|
+ dashPath(
|
|
|
+ path,
|
|
|
+ dashArray: CircularIntervalList<double>(<double>[2.0, 10.0]),
|
|
|
+ ),
|
|
|
+ customPaintPen ?? paintPan,
|
|
|
+ );
|
|
|
+
|
|
|
+ canvas.restore();
|
|
|
+ }
|
|
|
+
|
|
|
/// X轴半径
|
|
|
double getRadiusX([Size? fitSize]) {
|
|
|
if (innerPoints.length < 2) {
|
|
@@ -309,7 +355,7 @@ class EllipseFeature extends AreaItemFeatureAbstract {
|
|
|
void adjustPoints(DPoint point) {
|
|
|
if (activeIndex < 1) return;
|
|
|
Size refSize;
|
|
|
- if (refItem.feature?.isURMDualImages ?? false) {
|
|
|
+ if (isURMDualImages ?? false) {
|
|
|
refSize = Size(refItem.application.displaySize.width / 2,
|
|
|
refItem.application.displaySize.height);
|
|
|
} else {
|