|
@@ -120,11 +120,16 @@ const init = async (draw: Draw) => {
|
|
|
};
|
|
|
watch(draw, (draw, _, onCleanup) => {
|
|
|
if (draw) {
|
|
|
- for (const type in components) {
|
|
|
- draw.menusFilter.setMenusFilter(type as ShapeType, (items) => {
|
|
|
- return items.filter((item) => item.label !== "隐藏");
|
|
|
- });
|
|
|
- }
|
|
|
+ const quits: (() => void)[] = [
|
|
|
+ mergeFuns(
|
|
|
+ Object.keys(components).map((type) =>
|
|
|
+ draw.menusFilter.setMenusFilter(type as ShapeType, (items) => {
|
|
|
+ return items.filter((item) => item.label !== "隐藏");
|
|
|
+ })
|
|
|
+ )
|
|
|
+ ),
|
|
|
+ ];
|
|
|
+
|
|
|
let des = false;
|
|
|
let unInit: () => void;
|
|
|
init(draw).then((_unInit) => {
|
|
@@ -134,10 +139,11 @@ watch(draw, (draw, _, onCleanup) => {
|
|
|
_unInit();
|
|
|
}
|
|
|
});
|
|
|
- onCleanup(() => {
|
|
|
+ quits.push(() => {
|
|
|
unInit && unInit();
|
|
|
des = true;
|
|
|
});
|
|
|
+ onCleanup(mergeFuns(quits));
|
|
|
}
|
|
|
});
|
|
|
|
|
@@ -157,39 +163,37 @@ watch(cover, (cover, _, onCleanup) => {
|
|
|
return;
|
|
|
const mountMenus = draw.value.mountFilter;
|
|
|
const menusFilter = draw.value.menusFilter;
|
|
|
-
|
|
|
- menusFilter.setShapeMenusFilter(cover.id, () => []);
|
|
|
- mountMenus.setShapeMenusFilter(cover.id, (des) => ({
|
|
|
- ...des,
|
|
|
- scale: {
|
|
|
- type: "fixProportion",
|
|
|
- label: "缩放比例",
|
|
|
- "layout-type": "row",
|
|
|
- get value() {
|
|
|
- return coverScale.value;
|
|
|
+ const quits = [
|
|
|
+ menusFilter.setShapeMenusFilter(cover.id, () => []),
|
|
|
+ mountMenus.setShapeMenusFilter(cover.id, (des) => ({
|
|
|
+ ...des,
|
|
|
+ scale: {
|
|
|
+ type: "fixProportion",
|
|
|
+ label: "缩放比例",
|
|
|
+ "layout-type": "row",
|
|
|
+ get value() {
|
|
|
+ return coverScale.value;
|
|
|
+ },
|
|
|
+ set value(val) {
|
|
|
+ coverScale.value = val;
|
|
|
+ },
|
|
|
+ props: { min: 1 },
|
|
|
},
|
|
|
- set value(val) {
|
|
|
- coverScale.value = val;
|
|
|
+ showScale: {
|
|
|
+ type: "check",
|
|
|
+ label: "显示比例",
|
|
|
+ "layout-type": "row",
|
|
|
+ get value() {
|
|
|
+ return (cover as any).showScale || false;
|
|
|
+ },
|
|
|
+ set value(val) {
|
|
|
+ (cover as any).showScale = val;
|
|
|
+ },
|
|
|
+ props: {},
|
|
|
},
|
|
|
- props: { min: 1 },
|
|
|
- },
|
|
|
- showScale: {
|
|
|
- type: "check",
|
|
|
- label: "显示比例",
|
|
|
- "layout-type": "row",
|
|
|
- get value() {
|
|
|
- return (cover as any).showScale || false;
|
|
|
- },
|
|
|
- set value(val) {
|
|
|
- (cover as any).showScale = val;
|
|
|
- },
|
|
|
- props: {},
|
|
|
- },
|
|
|
- }));
|
|
|
- onCleanup(() => {
|
|
|
- mountMenus.setShapeMenusFilter(cover.id);
|
|
|
- menusFilter.setShapeMenusFilter(cover.id);
|
|
|
- });
|
|
|
+ })),
|
|
|
+ ];
|
|
|
+ onCleanup(mergeFuns(quits));
|
|
|
});
|
|
|
|
|
|
const coverScaleText = computed(() => {
|
|
@@ -229,38 +233,37 @@ watch(compass, (compass, _, onCleanup) => {
|
|
|
if (!compass || !draw.value) return;
|
|
|
const mountMenus = draw.value.mountFilter;
|
|
|
const menusFilter = draw.value.menusFilter;
|
|
|
- menusFilter.setShapeMenusFilter(compass.id, () => []);
|
|
|
- mountMenus.setShapeMenusFilter(compass.id, (des) => ({
|
|
|
- // ...des,
|
|
|
- rotate: {
|
|
|
- type: "num",
|
|
|
- label: "旋转角度",
|
|
|
- default: 0,
|
|
|
- props: {
|
|
|
- min: 0,
|
|
|
- max: 360,
|
|
|
- },
|
|
|
- "layout-type": "column",
|
|
|
- sort: 3,
|
|
|
- get value() {
|
|
|
- return round((new Transform(compass.mat).decompose().rotation + 360) % 360, 1);
|
|
|
- },
|
|
|
- set value(val) {
|
|
|
- const config = new Transform(compass.mat).decompose();
|
|
|
- compass.mat = new Transform()
|
|
|
- .translate(config.x, config.y)
|
|
|
- .scale(config.scaleX, config.scaleY)
|
|
|
- .rotate(MathUtils.degToRad(val)).m;
|
|
|
- nextTick(() => {
|
|
|
- draw.value?.stage!.findOne(`#${compass.id}`)?.fire("bound-change");
|
|
|
- });
|
|
|
+ const quits = [
|
|
|
+ menusFilter.setShapeMenusFilter(compass.id, () => []),
|
|
|
+ mountMenus.setShapeMenusFilter(compass.id, (des) => ({
|
|
|
+ // ...des,
|
|
|
+ rotate: {
|
|
|
+ type: "num",
|
|
|
+ label: "旋转角度",
|
|
|
+ default: 0,
|
|
|
+ props: {
|
|
|
+ min: 0,
|
|
|
+ max: 360,
|
|
|
+ },
|
|
|
+ "layout-type": "column",
|
|
|
+ sort: 3,
|
|
|
+ get value() {
|
|
|
+ return round((new Transform(compass.mat).decompose().rotation + 360) % 360, 1);
|
|
|
+ },
|
|
|
+ set value(val) {
|
|
|
+ const config = new Transform(compass.mat).decompose();
|
|
|
+ compass.mat = new Transform()
|
|
|
+ .translate(config.x, config.y)
|
|
|
+ .scale(config.scaleX, config.scaleY)
|
|
|
+ .rotate(MathUtils.degToRad(val)).m;
|
|
|
+ nextTick(() => {
|
|
|
+ draw.value?.stage!.findOne(`#${compass.id}`)?.fire("bound-change");
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
- }));
|
|
|
- onCleanup(() => {
|
|
|
- mountMenus.setShapeMenusFilter(compass.id);
|
|
|
- menusFilter.setShapeMenusFilter(compass.id);
|
|
|
- });
|
|
|
+ })),
|
|
|
+ ];
|
|
|
+ onCleanup(mergeFuns(quits));
|
|
|
});
|
|
|
|
|
|
const title = computed(() => tabulationData.value?.title || "图纸");
|