|
@@ -36,6 +36,7 @@ import { useHistory, useHistoryAttach } from "./use-history";
|
|
|
import penA from "../assert/cursor/pic_pen_a.ico";
|
|
|
import penR from "../assert/cursor/pic_pen_r.ico";
|
|
|
import { useCurrentZIndex } from "./use-layer";
|
|
|
+import { useViewerInvertTransform, useViewerTransform } from "./use-viewer";
|
|
|
|
|
|
type PayData<T extends ShapeType> = ComponentValue<T, "addMode"> extends "area"
|
|
|
? Area
|
|
@@ -60,7 +61,8 @@ export const useInteractiveDrawShapeAPI = installGlobalVar(() => {
|
|
|
const can = useCan();
|
|
|
const interactiveProps = useInteractiveProps();
|
|
|
const conversion = useConversionPosition(true);
|
|
|
- const currentZIndex = useCurrentZIndex()
|
|
|
+ const currentZIndex = useCurrentZIndex();
|
|
|
+ const store = useStore();
|
|
|
|
|
|
let isEnter = false;
|
|
|
const enter = () => {
|
|
@@ -77,23 +79,30 @@ export const useInteractiveDrawShapeAPI = installGlobalVar(() => {
|
|
|
};
|
|
|
|
|
|
return {
|
|
|
+ delShape(id: string) {
|
|
|
+ const type = store.getType(id);
|
|
|
+ type && store.delItem(type, id);
|
|
|
+ },
|
|
|
addShape: <T extends ShapeType>(
|
|
|
shapeType: T,
|
|
|
preset: Partial<DrawItem<T>> = {},
|
|
|
- data: PayData<T>,
|
|
|
+ data?: PayData<T>,
|
|
|
pixel = false
|
|
|
) => {
|
|
|
+ console.log(can.dragMode)
|
|
|
if (!can.drawMode) {
|
|
|
throw "当前状态不允许添加";
|
|
|
}
|
|
|
enter();
|
|
|
+ data = (data || {}) as PayData<T>;
|
|
|
if (pixel) {
|
|
|
data = (
|
|
|
Array.isArray(data) ? data.map(conversion) : conversion(data)
|
|
|
) as PayData<T>;
|
|
|
}
|
|
|
+
|
|
|
if (!preset.zIndex) {
|
|
|
- preset.zIndex = currentZIndex.max + 1
|
|
|
+ preset.zIndex = currentZIndex.max + 1;
|
|
|
}
|
|
|
interactiveProps.value = {
|
|
|
type: shapeType,
|
|
@@ -115,7 +124,7 @@ export const useInteractiveDrawShapeAPI = installGlobalVar(() => {
|
|
|
throw "当前状态不允许添加";
|
|
|
}
|
|
|
if (!preset.zIndex) {
|
|
|
- preset.zIndex = currentZIndex.max + 1
|
|
|
+ preset.zIndex = currentZIndex.max + 1;
|
|
|
}
|
|
|
interactiveProps.value = {
|
|
|
type: shapeType,
|
|
@@ -127,7 +136,7 @@ export const useInteractiveDrawShapeAPI = installGlobalVar(() => {
|
|
|
},
|
|
|
quitDrawShape: () => {
|
|
|
leave();
|
|
|
- console.error('quit')
|
|
|
+ console.error("quit");
|
|
|
interactiveProps.value = void 0;
|
|
|
},
|
|
|
};
|
|
@@ -219,7 +228,9 @@ const useInteractiveDrawTemp = <T extends ShapeType>({
|
|
|
const obj = components[type] as Components[T];
|
|
|
const beforeHandler = usePointBeforeHandler(true, true);
|
|
|
const processors = useStoreRenderProcessors();
|
|
|
+ const viewTransform = useViewerTransform();
|
|
|
const conversionPosition = useConversionPosition(true);
|
|
|
+ const history = useHistory()
|
|
|
const store = useStore();
|
|
|
const processorIds = processors.register(() => DrawShape);
|
|
|
const clear = () => {
|
|
@@ -242,14 +253,17 @@ const useInteractiveDrawTemp = <T extends ShapeType>({
|
|
|
beforeHandler.clear();
|
|
|
let geo: SnapPoint[] | undefined;
|
|
|
if (items.length && getSnapGeo) {
|
|
|
- const item = obj.interactiveFixData(
|
|
|
- {...items[0]} as any,
|
|
|
- {
|
|
|
- consumed: ia.consumedMessage,
|
|
|
+ const item = obj.interactiveFixData({
|
|
|
+ info: {
|
|
|
cur: conversionPosition(p),
|
|
|
+ consumed: ia.consumedMessage,
|
|
|
action: MessageAction.update,
|
|
|
- } as any
|
|
|
- );
|
|
|
+ },
|
|
|
+ data: items[0],
|
|
|
+ history,
|
|
|
+ viewTransform: viewTransform.value,
|
|
|
+ store,
|
|
|
+ } as any);
|
|
|
geo = getSnapGeo(item as any);
|
|
|
}
|
|
|
return beforeHandler.transform(p, geo, !geo);
|
|
@@ -257,14 +271,13 @@ const useInteractiveDrawTemp = <T extends ShapeType>({
|
|
|
});
|
|
|
|
|
|
const addItem = (cur: PayData<T>) => {
|
|
|
- let item: any = obj.interactiveToData(
|
|
|
- {
|
|
|
- consumed: ia.consumedMessage,
|
|
|
- cur,
|
|
|
- action: MessageAction.add,
|
|
|
- } as any,
|
|
|
- ia.preset as any
|
|
|
- );
|
|
|
+ let item: any = obj.interactiveToData({
|
|
|
+ info: { cur, consumed: ia.consumedMessage, action: MessageAction.add },
|
|
|
+ preset: ia.preset,
|
|
|
+ history,
|
|
|
+ viewTransform: viewTransform.value,
|
|
|
+ store,
|
|
|
+ } as any);
|
|
|
if (!item) return;
|
|
|
item = reactive(item);
|
|
|
|
|
@@ -285,10 +298,16 @@ const useInteractiveDrawTemp = <T extends ShapeType>({
|
|
|
watch(
|
|
|
cur,
|
|
|
() =>
|
|
|
- obj.interactiveFixData(item, {
|
|
|
- consumed: ia.consumedMessage,
|
|
|
- cur,
|
|
|
- action: MessageAction.update,
|
|
|
+ obj.interactiveFixData({
|
|
|
+ info: {
|
|
|
+ cur,
|
|
|
+ consumed: ia.consumedMessage,
|
|
|
+ action: MessageAction.update,
|
|
|
+ },
|
|
|
+ data: item,
|
|
|
+ history,
|
|
|
+ viewTransform: viewTransform.value,
|
|
|
+ store,
|
|
|
} as any),
|
|
|
{ deep: true }
|
|
|
),
|
|
@@ -319,7 +338,7 @@ const useInteractiveDrawTemp = <T extends ShapeType>({
|
|
|
// 拖拽面积确定组件
|
|
|
export const useInteractiveDrawAreas = <T extends ShapeType>(type: T) => {
|
|
|
const cursor = useCursor();
|
|
|
- let cursorPop: () => void
|
|
|
+ let cursorPop: () => void;
|
|
|
return useInteractiveDrawTemp({
|
|
|
type,
|
|
|
useIA: useInteractiveAreas,
|
|
@@ -335,7 +354,7 @@ export const useInteractiveDrawAreas = <T extends ShapeType>(type: T) => {
|
|
|
|
|
|
export const useInteractiveDrawDots = <T extends ShapeType>(type: T) => {
|
|
|
const cursor = useCursor();
|
|
|
- let cursorPop: () => void
|
|
|
+ let cursorPop: () => void;
|
|
|
return useInteractiveDrawTemp({
|
|
|
type,
|
|
|
useIA: useInteractiveDots,
|
|
@@ -418,6 +437,7 @@ export const useInteractiveDrawPen = <T extends ShapeType>(type: T) => {
|
|
|
const history = useHistory();
|
|
|
const processors = useStoreRenderProcessors();
|
|
|
const store = useStore();
|
|
|
+ const viewTransform = useViewerTransform();
|
|
|
const downKeys = useDownKeys();
|
|
|
const free = computed(() => downKeys.has("Control"));
|
|
|
const processorIds = processors.register(() => {
|
|
@@ -427,7 +447,7 @@ export const useInteractiveDrawPen = <T extends ShapeType>(type: T) => {
|
|
|
// 可能历史空间会撤销 重做更改到正在绘制的组件
|
|
|
const currentCursor = ref(penA);
|
|
|
const cursor = useCursor();
|
|
|
- let cursorPop: ReturnType<typeof cursor.push> | null = null;
|
|
|
+ let cursorPop: ReturnType<typeof cursor.push> | null = null;
|
|
|
let stopWatch: (() => void) | null = null;
|
|
|
const ia = useInteractiveDots({
|
|
|
shapeType: type,
|
|
@@ -435,7 +455,7 @@ export const useInteractiveDrawPen = <T extends ShapeType>(type: T) => {
|
|
|
enter() {
|
|
|
cursorPop = cursor.push(currentCursor.value);
|
|
|
watch(currentCursor, () => {
|
|
|
- cursorPop?.set(currentCursor.value)
|
|
|
+ cursorPop?.set(currentCursor.value);
|
|
|
});
|
|
|
},
|
|
|
quit: () => {
|
|
@@ -484,7 +504,7 @@ export const useInteractiveDrawPen = <T extends ShapeType>(type: T) => {
|
|
|
currentCursor.value = penA;
|
|
|
let pen: null | ReturnType<typeof penUpdatePoints> = null;
|
|
|
if (!free.value) {
|
|
|
- pen = penUpdatePoints(messages.value, cur, type === "line");
|
|
|
+ pen = penUpdatePoints(messages.value, cur, type !== "polygon");
|
|
|
consumed = pen.points;
|
|
|
cur = pen.cur;
|
|
|
}
|
|
@@ -527,7 +547,13 @@ export const useInteractiveDrawPen = <T extends ShapeType>(type: T) => {
|
|
|
}
|
|
|
let item: any = items.length === 0 ? null : items[0];
|
|
|
if (!item) {
|
|
|
- item = obj.interactiveToData(setMessage(dot), ia.preset as any);
|
|
|
+ item = obj.interactiveToData({
|
|
|
+ preset: ia.preset as any,
|
|
|
+ info: setMessage(dot),
|
|
|
+ viewTransform: viewTransform.value,
|
|
|
+ history,
|
|
|
+ store,
|
|
|
+ });
|
|
|
if (!item) return;
|
|
|
items[0] = item = reactive(item);
|
|
|
}
|
|
@@ -538,8 +564,13 @@ export const useInteractiveDrawPen = <T extends ShapeType>(type: T) => {
|
|
|
}
|
|
|
|
|
|
const update = () => {
|
|
|
- obj.interactiveFixData(item, setMessage(dot));
|
|
|
- // console.log(JSON.parse(JSON.stringify(item)))
|
|
|
+ obj.interactiveFixData({
|
|
|
+ data: item,
|
|
|
+ info: setMessage(dot),
|
|
|
+ viewTransform: viewTransform.value,
|
|
|
+ history,
|
|
|
+ store,
|
|
|
+ });
|
|
|
};
|
|
|
|
|
|
stopWatch = mergeFuns(
|