diff --git a/src/index.tsx b/src/index.tsx
index 472120b..b45b236 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -43,9 +43,9 @@ const router = createBrowserRouter([
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(
-
-
-
+ //
+
+ //
);
console.log(process.env.REACT_APP_WS_URL);
diff --git a/src/pages/measure/components/MeasureAction.tsx b/src/pages/measure/components/MeasureAction.tsx
index 4048cb9..750ad2b 100644
--- a/src/pages/measure/components/MeasureAction.tsx
+++ b/src/pages/measure/components/MeasureAction.tsx
@@ -1,23 +1,32 @@
import { Button, Checkbox, CheckboxProps, Radio, RadioChangeEvent } from "antd";
import { useState } from "react";
+import { useNavigate } from "react-router";
+import SectionalView from "./SectionalView";
export default function MeasureAction() {
+ const navigate = useNavigate();
const [sideVal, setSideVal] = useState<1 | 2>(1);
- const onSideChange = (e: RadioChangeEvent) => {
- setSideVal(e.target.value);
- };
- const onAfterSaveChange: CheckboxProps['onChange'] = (e) => {
- console.log(`checked = ${e.target.checked}`);
- };
+
+ const onSideChange = (e: RadioChangeEvent) => {
+ setSideVal(e.target.value);
+ };
+ const onAfterSaveChange: CheckboxProps["onChange"] = e => {
+ console.log(`checked = ${e.target.checked}`);
+ };
+ const onAnalysisBtnClick = () => {
+ navigate("../detail");
+ };
return (
-
+
+
+
测量步骤
开始测量
-
diff --git a/src/pages/measure/components/SectionalView.tsx b/src/pages/measure/components/SectionalView.tsx
new file mode 100644
index 0000000..eb03704
--- /dev/null
+++ b/src/pages/measure/components/SectionalView.tsx
@@ -0,0 +1,72 @@
+import { useCallback, useEffect, useRef } from "react";
+
+const primaryLineColor = "rgb(203,213,245)";
+const subLineColor = "rgb(226,231,232)";
+
+export default function SectionalView(props: {
+ width: number;
+ height: number;
+ leftPadding: number;
+ rightPadding: number;
+ topPadding: number;
+ bottomPadding: number;
+ columns: number;
+ rows: number;
+ cellNum: number;
+}) {
+ const xStartPx = props.leftPadding;
+ const xEndPx = props.width - props.rightPadding;
+ const xStepPx = (props.width - props.leftPadding - props.rightPadding) / props.columns;
+ const xUnitPx = xStepPx / props.cellNum;
+ const yStartPx = props.topPadding;
+ const yEndPx = props.height - props.bottomPadding;
+ const yStepPx = (props.height - props.topPadding - props.bottomPadding) / props.rows;
+ const yUnitPx = yStepPx / props.cellNum;
+
+ const canvasRef = useRef(null);
+ const drawGrid = useCallback((ctx: CanvasRenderingContext2D) => {
+ ctx.beginPath();
+ ctx.strokeStyle = subLineColor;
+ for (let i = 1; i < props.columns * props.cellNum; ++i) {
+ if (i % props.cellNum === 0) continue;
+ ctx.moveTo(xStartPx + xUnitPx * i, yStartPx);
+ ctx.lineTo(xStartPx + xUnitPx * i, yEndPx);
+ }
+ for (let j = 1; j < props.rows * props.cellNum; ++j) {
+ if (j % props.cellNum === 0) continue;
+ ctx.moveTo(xStartPx, yStartPx + yUnitPx * j);
+ ctx.lineTo(xEndPx, yStartPx + yUnitPx * j);
+ }
+ ctx.stroke();
+
+ ctx.beginPath();
+ ctx.strokeStyle = primaryLineColor;
+ for (let i = 0; i <= props.columns; ++i) {
+ ctx.moveTo(xStartPx + xStepPx * i, yStartPx);
+ ctx.lineTo(xStartPx + xStepPx * i, yEndPx);
+ }
+ for (let j = 0; j <= props.rows; ++j) {
+ ctx.moveTo(xStartPx, yStartPx + yStepPx * j);
+ ctx.lineTo(xEndPx, yStartPx + yStepPx * j);
+ }
+ ctx.stroke();
+ },[props.cellNum, props.columns, props.rows, xEndPx, xStartPx, xStepPx, xUnitPx, yEndPx, yStartPx, yStepPx, yUnitPx])
+
+ useEffect(() => {
+ // 获取canvas的2D绘图上下文
+ const canvas = canvasRef.current;
+ if (!canvas) return;
+
+ const context = canvas.getContext("2d");
+ if (!context) return;
+ // 使用context对象进行绘图
+ drawGrid(context);
+ }, [drawGrid]);
+
+
+ return (
+
+
+
+ );
+}