diff --git a/libs/insight-viewer/src/Viewer/CircleDrawer/index.tsx b/libs/insight-viewer/src/Viewer/CircleDrawer/index.tsx
index 680f152a8..6de580e67 100644
--- a/libs/insight-viewer/src/Viewer/CircleDrawer/index.tsx
+++ b/libs/insight-viewer/src/Viewer/CircleDrawer/index.tsx
@@ -1,5 +1,5 @@
import React, { ReactElement } from 'react'
-
+import useTextBox from '../../hooks/useTextBox'
import { useOverlayContext } from '../../contexts'
import { getCircleEndPoint } from '../../utils/common/getCircleEndPoint'
@@ -7,8 +7,11 @@ import { getCircleRadiusByCenter } from '../../utils/common/getCircleRadius'
import { getCircleTextPosition } from '../../utils/common/getCircleTextPosition'
import { getCircleConnectingLine } from '../../utils/common/getCircleConnectingLine'
import { calculateCircleArea } from '../../utils/common/calculateCircleArea'
+import { modifyConnectingLine } from '../../utils/common/modifyConnectingLine'
+import { stringifyPoints } from '../../utils/common/stringifyPoints'
import { svgWrapperStyle, textStyle } from '../Viewer.styles'
+import { HALF_OF_RULER_TEXT_BOX } from '../../const'
import type { CircleDrawerProps } from './CircleDrawer.types'
@@ -18,6 +21,7 @@ export function CircleDrawer({
setMeasurementEditMode,
}: CircleDrawerProps): ReactElement | null {
const { pixelToCanvas } = useOverlayContext()
+ const [textBox, ref] = useTextBox()
const { centerPoint, radius, measuredValue, unit } = measurement
const endPoint = getCircleEndPoint(centerPoint, radius)
@@ -30,12 +34,17 @@ export function CircleDrawer({
? pixelToCanvas(measurement.textPoint)
: getCircleTextPosition(centerPointOnCanvas, drawingRadius)
- const connectingLine = getCircleConnectingLine([centerPointOnCanvas, endPointOnCanvas], textPointOnCanvas)
- .map((point) => `${point[0]}, ${point[1]}`)
- .join(' ')
-
const area = calculateCircleArea(measuredValue)
+ const textCenterModifier = textBox ? textBox.height / 2 - HALF_OF_RULER_TEXT_BOX : 0
+
+ const connectingLineToTextBoxCenter = getCircleConnectingLine(
+ [centerPointOnCanvas, endPointOnCanvas],
+ textPointOnCanvas
+ )
+ const connectingLineToTextBoxEdge = modifyConnectingLine({ textBox, connectingLineToTextBoxCenter })
+ const connectingLine = stringifyPoints(connectingLineToTextBoxEdge)
+
return (
<>
+
setMeasurementEditMode('textMove')}
- style={{ ...textStyle[isSelectedMode ? 'select' : 'default'] }}
+ style={{
+ ...textStyle[isSelectedMode ? 'select' : 'default'],
+ visibility: textBox !== null ? 'visible' : 'hidden',
+ }}
x={textPointOnCanvas[0]}
- y={textPointOnCanvas[1]}
+ y={textPointOnCanvas[1] + textCenterModifier}
>
{`Area = ${area.toLocaleString(undefined, {
minimumFractionDigits: 1,
maximumFractionDigits: 1,
})}${unit}2`}
-
>
)
}
diff --git a/libs/insight-viewer/src/Viewer/CircleViewer/index.tsx b/libs/insight-viewer/src/Viewer/CircleViewer/index.tsx
index b5070c7c8..06f2448f6 100644
--- a/libs/insight-viewer/src/Viewer/CircleViewer/index.tsx
+++ b/libs/insight-viewer/src/Viewer/CircleViewer/index.tsx
@@ -1,7 +1,5 @@
import React, { ReactElement } from 'react'
-
-import { textStyle, svgWrapperStyle } from '../Viewer.styles'
-
+import useTextBox from '../../hooks/useTextBox'
import { useOverlayContext } from '../../contexts'
import { calculateCircleArea } from '../../utils/common/calculateCircleArea'
@@ -9,10 +7,16 @@ import { getCircleRadiusByCenter } from '../../utils/common/getCircleRadius'
import { getCircleEndPoint } from '../../utils/common/getCircleEndPoint'
import { getCircleConnectingLine } from '../../utils/common/getCircleConnectingLine'
import { getCircleTextPosition } from '../../utils/common/getCircleTextPosition'
+import { modifyConnectingLine } from '../../utils/common/modifyConnectingLine'
+import { stringifyPoints } from '../../utils/common/stringifyPoints'
+
+import { textStyle, svgWrapperStyle } from '../Viewer.styles'
+import { HALF_OF_RULER_TEXT_BOX } from '../../const'
import type { CircleViewerProps } from './CircleViewer.types'
export function CircleViewer({ measurement, hoveredMeasurement }: CircleViewerProps): ReactElement {
+ const [textBox, ref] = useTextBox()
const { pixelToCanvas } = useOverlayContext()
const { centerPoint, radius, measuredValue, unit } = measurement
@@ -26,13 +30,17 @@ export function CircleViewer({ measurement, hoveredMeasurement }: CircleViewerPr
? pixelToCanvas(measurement.textPoint)
: getCircleTextPosition(centerPointOnCanvas, drawingRadius)
- const connectingLine = getCircleConnectingLine([centerPointOnCanvas, endPointOnCanvas], textPointOnCanvas)
- .map((point) => `${point[0]}, ${point[1]}`)
- .join(' ')
-
const area = calculateCircleArea(measuredValue)
const isHoveredMeasurement = measurement === hoveredMeasurement
+ const textCenterModifier = textBox ? textBox.height / 2 - HALF_OF_RULER_TEXT_BOX : 0
+
+ const connectingLineToTextBoxCenter = getCircleConnectingLine(
+ [centerPointOnCanvas, endPointOnCanvas],
+ textPointOnCanvas
+ )
+ const connectingLineToTextBoxEdge = modifyConnectingLine({ textBox, connectingLineToTextBoxCenter })
+ const connectingLine = stringifyPoints(connectingLineToTextBoxEdge)
return (
<>
@@ -63,17 +71,22 @@ export function CircleViewer({ measurement, hoveredMeasurement }: CircleViewerPr
cy={centerPointOnCanvas[1]}
r={drawingRadius}
/>
+
+
{`Area = ${area.toLocaleString(undefined, {
minimumFractionDigits: 1,
maximumFractionDigits: 1,
})}${unit}2`}
-
>
)
}