796 lines
28 KiB
Vue
796 lines
28 KiB
Vue
<template>
|
|
<div class="row">
|
|
<div class="col-1"></div>
|
|
<div class="col-10 q-pt-md">
|
|
<div ref="div" style="width: 100%; background-color: #646464; height: 40vh">
|
|
<div style="position: absolute">
|
|
<Vue3DraggableResizable :class="[options_model == index ? 'action' : 'point']"
|
|
v-for="(item, index) in value_point.length" :initW="point.w" :initH="point.h" :resizable="false"
|
|
v-model:x="value_point[index].x" v-model:y="value_point[index].y" @activated="options_model = index"
|
|
@click="options_model = index" @dragging="dragStartHandle($event, index)">
|
|
<span>{{
|
|
index + 1
|
|
}}</span>
|
|
</Vue3DraggableResizable>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="row row q-md-py-xl">
|
|
<div class="col-1"></div>
|
|
<div class="col-2 q-px-md">
|
|
<div class="col-2"> <q-select class="q-pt-md" :label="$t('point amount')"
|
|
@update:model-value="(val) => { now_amount = val; chang_point_amount(val) }" :dense="true" filled
|
|
v-model="value_point_amount" :options="options_value_point_amount" emit-value map-options />
|
|
</div>
|
|
</div>
|
|
<div class="col-2">
|
|
<div class="col-1 q-pt-md "><q-btn color="white"
|
|
@click="() => { add_dialog = true; value_point_amount_tmp = value_point_amount; now_amount = value_point_amount }"
|
|
text-color="black" :label="$t('add control points')" /></div>
|
|
</div>
|
|
<div class="col-2">
|
|
|
|
<div class="col-1 q-pt-md "><q-btn color="white" @click="() => { del_dialog = true }"
|
|
:disable="value_point_amount <= 9" text-color="black" :label="$t('reduce control points')" /></div>
|
|
|
|
</div>
|
|
|
|
<div class="q-pt-md q-px-md col-4"> <q-btn color="white" @click="resetall_all" text-color="black"
|
|
:label="$t('Reset all program control points')" /></div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-1"></div>
|
|
<div class="col-2 q-px-md" @mousewheel="details_selsect"> <q-select class="q-pt-md" :label="$t('point')"
|
|
:dense="true" filled v-model="options_model" @update:model-value="(val) => { options_model = val }"
|
|
:options="options" emit-value map-options /></div>
|
|
<div class="col-2 q-px-md" @mousewheel="details_selsect_val($event, 'x')"> <q-input v-if="value[options_model]"
|
|
filled type="number" class="q-pt-md" :dense="true" v-model="value[options_model].x"
|
|
@update:model-value="chang(options_model, $event, 'h')" label="x" lazy-rules @click="()=>{url.indexOf('pad')!=-1?ipad_chang=true:''}" :readonly="url.indexOf('pad')!=-1" />
|
|
</div>
|
|
<div class="col-2 q-px-md" @mousewheel="details_selsect_val($event, 'y')"><q-input v-if="value[options_model]" filled
|
|
type="number" class="q-pt-md" :dense="true" v-model="value[options_model].y"
|
|
@update:model-value="chang(options_model, $event, 'h')" label="y" lazy-rules @click="()=>{url.indexOf('pad')!=-1?ipad_chang=true:''}" :readonly="url.indexOf('pad')!=-1" />
|
|
</div>
|
|
<div class="q-pt-md col-2">
|
|
<q-btn color="white" @click="reset(options_model, true, 'h')" text-color="black" :label="$t('reset')" />
|
|
|
|
</div>
|
|
<div class="q-pt-md q-px-md col-3"> <q-btn color="white" @click="resetall" text-color="black"
|
|
:label="$t('reset all') + value_point_amount + $t('point')" /></div>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
<q-dialog v-model="del_dialog">
|
|
<q-card style="width: 500px; max-width: 80vw;">
|
|
<q-card-section>
|
|
<div class="text-h6">{{ $t('confirm delete') }}</div>
|
|
</q-card-section>
|
|
<q-card-section class="q-pt-none">
|
|
{{ $t('OK to delete you will lose the data you adjusted now') }}
|
|
</q-card-section>
|
|
<q-card-actions align="right" class="bg-white text-teal">
|
|
<q-btn flat :label="$t('Cancel')" color="primary" v-close-popup />
|
|
<q-btn flat :label="$t('ok')" @click="del_control_points(value_point_amount)" color="primary" v-close-popup />
|
|
</q-card-actions>
|
|
</q-card>
|
|
</q-dialog>
|
|
|
|
|
|
|
|
<q-dialog position="bottom" v-model="add_dialog">
|
|
<q-card style="width: 500px; max-width: 80vw;">
|
|
<q-card-section>
|
|
<div class="text-h6">{{ $t('Whether to add control points') }}</div>
|
|
</q-card-section>
|
|
<q-card-section class="q-pt-none">
|
|
<div class="row">
|
|
<div class="col-10"><q-input filled v-model="now_amount" min="3" disable type="number"
|
|
:label="$t('Please enter the points you need to add')"
|
|
@update:model-value="(val: any) => { preview(val) }" />
|
|
</div>
|
|
<div class="col-1 q-pa-sm"> <q-btn color="white" text-color="black" label="↑"
|
|
@click="() => { preview(Math.sqrt(now_amount) + 1) }" /> </div>
|
|
<div class="col-1 q-pa-sm"> <q-btn color="white" text-color="black" label="↓"
|
|
@click="() => { preview(Math.sqrt(now_amount) - 1) }" /></div>
|
|
</div>
|
|
|
|
</q-card-section>
|
|
<q-card-actions align="right" class="bg-white text-teal">
|
|
<q-btn flat :label="$t('Cancel')" @click="() => { preview(Math.sqrt(value_point_amount_tmp)) }" color="primary"
|
|
v-close-popup />
|
|
<q-btn flat :label="$t('ok')" @click="add" color="primary" v-close-popup />
|
|
</q-card-actions>
|
|
</q-card>
|
|
</q-dialog>
|
|
|
|
|
|
<q-dialog v-model="ipad_chang">
|
|
<q-card style="width: 40vw; max-width: 80vw;">
|
|
<q-card-section>
|
|
<div class="text-h6">{{ $t('point') +(options_model+1 )}}</div>
|
|
</q-card-section>
|
|
<q-card-section class="q-pt-none">
|
|
<div class="row">
|
|
<div class="col-12" style="text-align: center;"><q-btn color="white" text-color="black" icon="keyboard_arrow_up" @touchstart="handlerTouchstart('y','+')" @touchend="handlerTouchend" /></div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-6" style="text-align: center;"><q-btn color="white" text-color="black" icon="keyboard_arrow_left" @touchstart="handlerTouchstart('x','-')" @touchend="handlerTouchend" /></div>
|
|
<div class="col-6" style="text-align: center;"><q-btn color="white" text-color="black" icon="keyboard_arrow_right" @touchstart="handlerTouchstart('x','+')" @touchend="handlerTouchend" /></div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-12" style="text-align: center;"><q-btn color="white" text-color="black" icon="keyboard_arrow_down" @touchstart="handlerTouchstart('y','-')" @touchend="handlerTouchend" /></div>
|
|
</div>
|
|
</q-card-section>
|
|
<q-card-actions align="right" class="bg-white text-teal">
|
|
<q-btn flat :label="$t('close')" color="primary" v-close-popup />
|
|
</q-card-actions>
|
|
</q-card>
|
|
</q-dialog>
|
|
|
|
</template>
|
|
|
|
<style scoped>
|
|
.action {
|
|
background-color: rgb(27, 180, 111);
|
|
border-radius: 50%;
|
|
}
|
|
|
|
.point {
|
|
background-color: rgb(186, 245, 245);
|
|
border-radius: 50%;
|
|
}
|
|
</style>
|
|
|
|
<script lang="ts">
|
|
import {
|
|
defineComponent,
|
|
onMounted,
|
|
ref,
|
|
computed,
|
|
watch,
|
|
nextTick,
|
|
onBeforeUnmount,
|
|
defineExpose
|
|
} from "vue";
|
|
import { useStore } from "src/store";
|
|
import { useI18n } from "vue-i18n";
|
|
import Vue3DraggableResizable from 'vue3-draggable-resizable'
|
|
import 'vue3-draggable-resizable/dist/Vue3DraggableResizable.css'
|
|
|
|
|
|
import DensityCorrection from "src/entities/DensityCorrection";
|
|
import DensityCorrectionPoint from "src/entities/DensityCorrectionPoint";
|
|
import { config } from "process";
|
|
import { QSelect, QInput, QBtn } from "quasar";
|
|
import { div } from "zrender/lib/core/vector";
|
|
import GlobalData from "src/common/GlobalData";
|
|
import { number } from "@intlify/core-base";
|
|
|
|
export default defineComponent({
|
|
name: "ComponentDensityCorrection",
|
|
components: {
|
|
Vue3DraggableResizable
|
|
},
|
|
setup() {
|
|
let set = GlobalData.getInstance().getCurrentClient();
|
|
let $store = useStore();
|
|
let $t = useI18n();
|
|
const ste_status = ref(0);
|
|
let allconfig = JSON.parse($store.state.fusion_configuration);
|
|
|
|
const configselsect = computed(() => {
|
|
return $store.state.selected_projector;
|
|
});
|
|
|
|
/**
|
|
* 平板弹窗修改
|
|
*/
|
|
const ipad_chang=ref(false)
|
|
/**
|
|
* 当前url路径
|
|
*/
|
|
let url = window.location.href;
|
|
|
|
//用于计算当前投影仪的索引
|
|
let serverconfig = JSON.parse($store.state.fusion_configuration);
|
|
const selectedprojector = computed(() => {
|
|
return (
|
|
$store.getters.GetTheCurrentlySelectedCamera[0] * serverconfig.col +
|
|
$store.getters.GetTheCurrentlySelectedCamera[1]
|
|
);
|
|
});
|
|
let config = JSON.parse($store.state.fusion_configuration).projectors[selectedprojector.value];
|
|
const value_point_amount = ref(9)
|
|
const del_dialog = ref(false)
|
|
const add_dialog = ref(false)
|
|
const now_amount = ref(9)
|
|
const options_value_point_amount = ref(<string[]>[])
|
|
|
|
const deepcopy = (o1: any, o2: any) => {
|
|
for (let k in o2) {
|
|
if (typeof o2[k] === "object") {
|
|
o1[k] = {};
|
|
deepcopy(o1[k], o2[k]);
|
|
} else {
|
|
o1[k] = o2[k];
|
|
|
|
}
|
|
}
|
|
};
|
|
|
|
const use_server_config = () => {
|
|
value_point_amount.value = Number(Object.keys(config.multi_curved_surface)[0])
|
|
let a = value_point_amount.value
|
|
value.value = []
|
|
value_point.value = []
|
|
for (let index = 0; index < config.multi_curved_surface[a].length; index++) {
|
|
let tmp: DensityCorrectionPoint = config.multi_curved_surface[a][index];
|
|
value.value.push(tmp)
|
|
let x_y = coordinate_transformation_value_to_xy(tmp.x, tmp.y)
|
|
let def_x_f = coordinate_transformation_value_to_xy(tmp.def_x, tmp.def_y)
|
|
let tmp_point: DensityCorrectionPoint = {
|
|
control_point: tmp.control_point,
|
|
x: x_y.x,
|
|
y: x_y.y,
|
|
def_x: def_x_f.x,
|
|
def_y: def_x_f.y
|
|
}
|
|
value_point.value.push(tmp_point)
|
|
}
|
|
}
|
|
|
|
const use_set_cache = () => {
|
|
if (set_cache.value[selectedprojector.value] != null) {
|
|
let tmp = JSON.parse(set_cache.value[selectedprojector.value]);
|
|
value_point_amount.value = tmp.value_point_amount
|
|
deepcopy(value.value, tmp.value)
|
|
deepcopy(value_point.value, tmp.value_point)
|
|
recalculate_coordinates()
|
|
}
|
|
}
|
|
|
|
const save_set_cache = () => {
|
|
let tmp = { value: value.value, value_point_amount: value_point_amount.value, value_point: value_point.value }
|
|
set_cache.value[selectedprojector.value] = JSON.stringify(tmp);
|
|
}
|
|
|
|
|
|
watch(
|
|
() => configselsect,
|
|
(newVal, oldVal) => {
|
|
let tmp = JSON.parse($store.state.fusion_configuration);
|
|
let fortmp = null;
|
|
let i;
|
|
for (i of tmp.projectors) {
|
|
if (
|
|
i.col === $store.getters.GetTheCurrentlySelectedCamera[1] &&
|
|
i.row === $store.getters.GetTheCurrentlySelectedCamera[0]
|
|
) {
|
|
fortmp = JSON.parse(JSON.stringify(i));
|
|
}
|
|
}
|
|
ste_status.value = 1;
|
|
config = JSON.parse(JSON.stringify(fortmp));
|
|
use_server_config();
|
|
use_set_cache();
|
|
options_value_point_amount.value = Object.keys(config.multi_curved_surface)
|
|
setTimeout(() => {
|
|
set?.SetBlendingOption("blending_grids_control_point_count", `${value_point_amount.value}`)
|
|
}, 100);
|
|
setTimeout(() => {
|
|
ste_status.value = 0;
|
|
}, 120);
|
|
},
|
|
{ deep: true }
|
|
);
|
|
|
|
|
|
const set_cache: any = ref([]);
|
|
//值
|
|
let value = ref(<DensityCorrection[]>[]);
|
|
//位置
|
|
let value_point = ref(<DensityCorrectionPoint[]>[]);
|
|
/**
|
|
* 当前选中的点的索引
|
|
*/
|
|
const options_model = ref(0)
|
|
|
|
const div = ref();
|
|
const max = ref({ x: 0, y: 0 })
|
|
const point = ref({ w: 20, h: 20 })
|
|
|
|
watch(() => options_model, (newval, oldval) => {
|
|
set?.SetBlendingOption("blending_grids_select_point", `9:${newval.value + 1}`)
|
|
}, { deep: true })
|
|
|
|
watch(() => value_point_amount, (newval, oldval) => {
|
|
if(ste_status.value==0)set?.SetBlendingOption("blending_grids_control_point_count", `${newval.value}`)
|
|
options_model.value=0
|
|
save_set_cache()
|
|
}, { deep: true })
|
|
|
|
/**
|
|
* 分辨率和页面的比例
|
|
*/
|
|
let Proportion = ref({ x: 100, y: 1000 });
|
|
nextTick(() => {
|
|
max.value.x = div.value.offsetWidth
|
|
max.value.y = div.value.offsetHeight
|
|
})
|
|
|
|
|
|
const chang_point_amount = (val: number) => {
|
|
start_point(val)
|
|
//use_set_cache()
|
|
}
|
|
|
|
const dragStartHandle = ($event: any, index: number) => {
|
|
let obj_x = $event.x
|
|
let obj_y = $event.y
|
|
let tmp = coordinate_transformation_xy_to_value(obj_x, obj_y)
|
|
value.value[index].x = Math.trunc(tmp.x)
|
|
value.value[index].y = Math.trunc(tmp.y)
|
|
send_value(index, Math.trunc(tmp.x), Math.trunc(tmp.y))
|
|
save_set_cache()
|
|
}
|
|
|
|
const chang = (index: number, $event: any, type: string) => {
|
|
index = Number(index)
|
|
let tmp = coordinate_transformation_value_to_xy(value.value[index].x, value.value[index].y)
|
|
value_point.value[index].y = Math.trunc(tmp.y)
|
|
value_point.value[index].x = Math.trunc(tmp.x)
|
|
send_value(index, Math.trunc(value.value[index].x), Math.trunc(value.value[index].y))
|
|
|
|
save_set_cache()
|
|
}
|
|
const options = computed(() => {
|
|
let tmp = []
|
|
for (let index = 0; index < value_point.value.length; index++) {
|
|
tmp.push({
|
|
label: `${index + 1}`,
|
|
value: index,
|
|
})
|
|
}
|
|
return tmp
|
|
})
|
|
|
|
|
|
/**
|
|
* 将分辨率的坐标转换为 页面的坐标
|
|
* @param x x坐标
|
|
* @param y y坐标
|
|
*/
|
|
const coordinate_transformation_value_to_xy = (x: number, y: number): { x: number, y: number } => {
|
|
x = x / Proportion.value.x
|
|
y = (allconfig.projector_height - y) / Proportion.value.y
|
|
return { x, y }
|
|
}
|
|
|
|
|
|
/**
|
|
* 将页面的坐标转换为 分辨率的坐标
|
|
* @param x x坐标
|
|
* @param y y坐标
|
|
*/
|
|
const coordinate_transformation_xy_to_value = (x: number, y: number): { x: number, y: number } => {
|
|
x = x * Proportion.value.x
|
|
y = (max.value.y - (y + point.value.h)) * Proportion.value.y
|
|
return { x, y }
|
|
}
|
|
|
|
const start_point = (a: number) => {
|
|
value.value = []
|
|
value_point.value = []
|
|
for (let index = 0; index < config.multi_curved_surface[a].length; index++) {
|
|
let tmp: DensityCorrectionPoint = config.multi_curved_surface[a][index];
|
|
value.value.push(tmp)
|
|
let x_y = coordinate_transformation_value_to_xy(tmp.x, tmp.y)
|
|
let def_x_f = coordinate_transformation_value_to_xy(tmp.def_x, tmp.def_y)
|
|
let tmp_point: DensityCorrectionPoint = {
|
|
control_point: tmp.control_point,
|
|
x: x_y.x,
|
|
y: x_y.y,
|
|
def_x: def_x_f.x,
|
|
def_y: def_x_f.y
|
|
}
|
|
value_point.value.push(tmp_point)
|
|
}
|
|
save_set_cache()
|
|
}
|
|
|
|
|
|
const start = () => {
|
|
let tmp: DensityCorrectionPoint = { control_point: 0, x: 0, y: 0, def_x: 0, def_y: 0 };
|
|
value.value.push(tmp)
|
|
value_point.value.push(tmp)
|
|
}
|
|
start()
|
|
onMounted(() => {
|
|
Proportion.value.x = allconfig.projector_width / (div.value.offsetWidth - point.value.w)
|
|
Proportion.value.y = allconfig.projector_height / (div.value.offsetHeight - point.value.h)
|
|
|
|
start()
|
|
use_server_config()
|
|
options_value_point_amount.value = Object.keys(config.multi_curved_surface)
|
|
start_point(Number(options_value_point_amount.value[0]))
|
|
if (
|
|
sessionStorage.SurfaceCorrection &&
|
|
sessionStorage.SurfaceCorrection.length > 0
|
|
) {
|
|
set_cache.value = JSON.parse(sessionStorage.SurfaceCorrection);
|
|
use_set_cache();
|
|
}
|
|
window.onresize = () => {
|
|
return (() => {
|
|
if (div != null) {
|
|
recalculate_coordinates()
|
|
}
|
|
})();
|
|
};
|
|
})
|
|
|
|
onBeforeUnmount(() => {
|
|
sessionStorage.SurfaceCorrection = JSON.stringify(set_cache.value);
|
|
});
|
|
|
|
const reset = (index: number, send: boolean, type: string) => {
|
|
value.value[index].x = value.value[index].def_x
|
|
value.value[index].y = value.value[index].def_y
|
|
chang(index, value.value[index].def_y, type)
|
|
save_set_cache()
|
|
}
|
|
const send_value = (index: number, x: number, y: number) => {
|
|
let row = $store.getters.GetTheCurrentlySelectedCamera[0]
|
|
let col = $store.getters.GetTheCurrentlySelectedCamera[1]
|
|
set?.setBlendingCorrection(row, col, 9, value_point.value.length, index + 1, Number(x), Number(y));
|
|
}
|
|
const resetall = () => {
|
|
for (let index = 0; index < value_point.value.length; index++) {
|
|
value.value[index].x = value.value[index].def_x
|
|
value.value[index].y = value.value[index].def_y
|
|
let tmp = coordinate_transformation_value_to_xy(value.value[index].x, value.value[index].y)
|
|
value_point.value[index].y = Math.trunc(tmp.y)
|
|
value_point.value[index].x = Math.trunc(tmp.x)
|
|
}
|
|
send_value(-1, 0, 0)
|
|
save_set_cache()
|
|
}
|
|
const resetall_all = () => {
|
|
let amount_tmp = value_point_amount.value
|
|
for (let index = 0; index < value_point.value.length; index++) {
|
|
value.value[index].x = value.value[index].def_x
|
|
value.value[index].y = value.value[index].def_y
|
|
let tmp = coordinate_transformation_value_to_xy(value.value[index].x, value.value[index].y)
|
|
value_point.value[index].y = Math.trunc(tmp.y)
|
|
value_point.value[index].x = Math.trunc(tmp.x)
|
|
}
|
|
send_value(-2, 0, 0)
|
|
|
|
for (let key in config.multi_curved_surface) {
|
|
for (let index = 0; index < config.multi_curved_surface[key].length; index++) {
|
|
config.multi_curved_surface[key][index].x = config.multi_curved_surface[key][index].def_x
|
|
config.multi_curved_surface[key][index].y = config.multi_curved_surface[key][index].def_y
|
|
}
|
|
start_point(Number(key))
|
|
}
|
|
value_point_amount.value = amount_tmp
|
|
start_point(Number(value_point_amount.value))
|
|
|
|
}
|
|
const recalculate_coordinates = () => {
|
|
try {
|
|
Proportion.value.x = allconfig.projector_width / (div.value.offsetWidth - point.value.w)
|
|
Proportion.value.y = allconfig.projector_height / (div.value.offsetHeight - point.value.h)
|
|
max.value.x = div.value.offsetWidth
|
|
max.value.y = div.value.offsetHeight
|
|
for (let index = 0; index < value.value.length; index++) {
|
|
let x_y = coordinate_transformation_value_to_xy(value.value[index].x, value.value[index].y)
|
|
let def_x_y = coordinate_transformation_value_to_xy(value.value[index].def_x, value.value[index].def_y)
|
|
value_point.value[index].x = x_y.x
|
|
value_point.value[index].y = x_y.y
|
|
value_point.value[index].def_x = def_x_y.x
|
|
value_point.value[index].def_y = def_x_y.y
|
|
}
|
|
} catch (error) {
|
|
|
|
}
|
|
}
|
|
const add_control_points = (amount: number) => {
|
|
if (amount < 9) return
|
|
let cardinality = Math.sqrt(amount)
|
|
amount = (cardinality + 1) ** 2
|
|
let tmpconfig: any = null
|
|
let row = $store.getters.GetTheCurrentlySelectedCamera[0]
|
|
let col = $store.getters.GetTheCurrentlySelectedCamera[1]
|
|
|
|
set?.AddBlendingCtrlPoint('9', row, col, amount).then((res) => {
|
|
if (res == null || typeof (res) == "undefined") return
|
|
let tmp = JSON.parse(res?.config);
|
|
let fortmp = null;
|
|
let i;
|
|
for (i of tmp.projectors) {
|
|
if (
|
|
i.col === $store.getters.GetTheCurrentlySelectedCamera[1] &&
|
|
i.row === $store.getters.GetTheCurrentlySelectedCamera[0]
|
|
) {
|
|
fortmp = JSON.parse(JSON.stringify(i));
|
|
}
|
|
}
|
|
ste_status.value = 1;
|
|
tmpconfig = JSON.parse(JSON.stringify(fortmp));
|
|
config = fortmp
|
|
options_value_point_amount.value = []
|
|
for (let key in tmpconfig.multi_curved_surface) {
|
|
options_value_point_amount.value.push(key)
|
|
}
|
|
value_point_amount.value = amount
|
|
config = tmpconfig
|
|
$store.commit("setfusion_configuration", res?.config);
|
|
value.value = []
|
|
value_point.value = []
|
|
for (let index = 0; index < tmpconfig.multi_curved_surface[amount].length; index++) {
|
|
let tmp: DensityCorrectionPoint = tmpconfig.multi_curved_surface[amount][index];
|
|
value.value.push(tmp)
|
|
let x_y = coordinate_transformation_value_to_xy(tmp.x, tmp.y)
|
|
let def_x_f = coordinate_transformation_value_to_xy(tmp.def_x, tmp.def_y)
|
|
let tmp_point: DensityCorrectionPoint = {
|
|
control_point: tmp.control_point,
|
|
x: x_y.x,
|
|
y: x_y.y,
|
|
def_x: def_x_f.x,
|
|
def_y: def_x_f.y
|
|
}
|
|
value_point.value.push(tmp_point)
|
|
}
|
|
});
|
|
save_set_cache()
|
|
}
|
|
const del_control_points = (amount: number) => {
|
|
let tmp = amount
|
|
if (amount <= 9) return
|
|
let cardinality = Math.sqrt(amount)
|
|
amount = (cardinality + -1) ** 2
|
|
let tmpconfig: any = null
|
|
let row = $store.getters.GetTheCurrentlySelectedCamera[0]
|
|
let col = $store.getters.GetTheCurrentlySelectedCamera[1]
|
|
|
|
set?.DelBlendingCtrlPoint('9', row, col, Number(tmp)).then((res) => {
|
|
if (res == null || typeof (res) == "undefined") return
|
|
let tmp = JSON.parse(res?.config);
|
|
let fortmp = null;
|
|
let i;
|
|
for (i of tmp.projectors) {
|
|
if (
|
|
i.col === $store.getters.GetTheCurrentlySelectedCamera[1] &&
|
|
i.row === $store.getters.GetTheCurrentlySelectedCamera[0]
|
|
) {
|
|
fortmp = JSON.parse(JSON.stringify(i));
|
|
}
|
|
}
|
|
ste_status.value = 1;
|
|
tmpconfig = JSON.parse(JSON.stringify(fortmp));
|
|
config = JSON.parse(JSON.stringify(fortmp));
|
|
options_value_point_amount.value = []
|
|
for (let key in tmpconfig.multi_curved_surface) {
|
|
options_value_point_amount.value.push(key)
|
|
}
|
|
value_point_amount.value = Number(options_value_point_amount.value[0])
|
|
amount = Number(options_value_point_amount.value[0])
|
|
now_amount.value = Number(options_value_point_amount.value[0])
|
|
$store.commit("setfusion_configuration", res?.config);
|
|
value.value = []
|
|
value_point.value = []
|
|
for (let index = 0; index < tmpconfig.multi_curved_surface[amount].length; index++) {
|
|
let tmp: DensityCorrectionPoint = tmpconfig.multi_curved_surface[amount][index];
|
|
value.value.push(tmp)
|
|
let x_y = coordinate_transformation_value_to_xy(tmp.x, tmp.y)
|
|
let def_x_f = coordinate_transformation_value_to_xy(tmp.def_x, tmp.def_y)
|
|
let tmp_point: DensityCorrectionPoint = {
|
|
control_point: tmp.control_point,
|
|
x: x_y.x,
|
|
y: x_y.y,
|
|
def_x: def_x_f.x,
|
|
def_y: def_x_f.y
|
|
}
|
|
value_point.value.push(tmp_point)
|
|
}
|
|
|
|
});
|
|
save_set_cache()
|
|
}
|
|
const add = () => {
|
|
let tmpconfig: any = null
|
|
let row = $store.getters.GetTheCurrentlySelectedCamera[0]
|
|
let col = $store.getters.GetTheCurrentlySelectedCamera[1]
|
|
let amount = now_amount.value
|
|
set?.AddBlendingCtrlPoint('9', row, col, Number(amount)).then((res) => {
|
|
if (res == null || typeof (res) == "undefined") return
|
|
let tmp = JSON.parse(res?.config);
|
|
let fortmp = null;
|
|
let i;
|
|
for (i of tmp.projectors) {
|
|
if (
|
|
i.col === $store.getters.GetTheCurrentlySelectedCamera[1] &&
|
|
i.row === $store.getters.GetTheCurrentlySelectedCamera[0]
|
|
) {
|
|
fortmp = JSON.parse(JSON.stringify(i));
|
|
}
|
|
}
|
|
ste_status.value = 1;
|
|
tmpconfig = JSON.parse(JSON.stringify(fortmp));
|
|
config = JSON.parse(JSON.stringify(fortmp));
|
|
options_value_point_amount.value = []
|
|
for (let key in tmpconfig.multi_curved_surface) {
|
|
options_value_point_amount.value.push(key)
|
|
}
|
|
|
|
value_point_amount.value = amount
|
|
$store.commit("setfusion_configuration", res?.config);
|
|
value.value = []
|
|
value_point.value = []
|
|
for (let index = 0; index < tmpconfig.multi_curved_surface[amount].length; index++) {
|
|
let tmp: DensityCorrectionPoint = tmpconfig.multi_curved_surface[amount][index];
|
|
value.value.push(tmp)
|
|
let x_y = coordinate_transformation_value_to_xy(tmp.x, tmp.y)
|
|
let def_x_f = coordinate_transformation_value_to_xy(tmp.def_x, tmp.def_y)
|
|
let tmp_point: DensityCorrectionPoint = {
|
|
control_point: tmp.control_point,
|
|
x: x_y.x,
|
|
y: x_y.y,
|
|
def_x: def_x_f.x,
|
|
def_y: def_x_f.y
|
|
}
|
|
value_point.value.push(tmp_point)
|
|
}
|
|
});
|
|
set?.SetBlendingOption("blending_grids_control_point_count", `${value_point_amount.value}`)
|
|
save_set_cache()
|
|
}
|
|
const preview = (val: number) => {
|
|
val = Number(val)
|
|
if (val < 3) return
|
|
let width = allconfig.projector_width / (val - 1)
|
|
let height = allconfig.projector_height / (val - 1)
|
|
value.value = []
|
|
value_point.value = []
|
|
for (let index = 0; index < val; index++) {
|
|
for (let indexx = 0; indexx < val; indexx++) {
|
|
let y = allconfig.projector_height - height * index
|
|
let x = width * indexx
|
|
let tmp: DensityCorrectionPoint = { x, y, def_x: x, def_y: y, control_point: index + indexx + 1 };
|
|
value.value.push(tmp)
|
|
let x_y = coordinate_transformation_value_to_xy(tmp.x, tmp.y)
|
|
let def_x_f = coordinate_transformation_value_to_xy(tmp.def_x, tmp.def_y)
|
|
let tmp_point: DensityCorrectionPoint = {
|
|
control_point: tmp.control_point,
|
|
x: x_y.x,
|
|
y: x_y.y,
|
|
def_x: def_x_f.x,
|
|
def_y: def_x_f.y
|
|
}
|
|
value_point.value.push(tmp_point)
|
|
}
|
|
}
|
|
now_amount.value = val ** 2
|
|
value_point_amount.value = val ** 2
|
|
options_model.value = 1
|
|
save_set_cache()
|
|
}
|
|
|
|
/**
|
|
* 滚轮切换
|
|
* @param details 鼠标返回对象
|
|
*/
|
|
const details_selsect = (details: any) => {
|
|
let spt = details.deltaY / 100
|
|
if (spt > 0) {
|
|
if (options_model.value >= value_point.value.length - 1) {
|
|
options_model.value = 0
|
|
} else {
|
|
options_model.value++
|
|
}
|
|
} else {
|
|
if (options_model.value <= 1) {
|
|
options_model.value = value_point.value.length - 1
|
|
} else {
|
|
options_model.value--
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 滚轮改变数据
|
|
*/
|
|
const details_selsect_val = (details: any, type: string) => {
|
|
let spt = details.deltaY / 100
|
|
switch (type) {
|
|
case 'x':
|
|
if (spt < 0) {
|
|
value.value[options_model.value].x++
|
|
} else {
|
|
value.value[options_model.value].x--
|
|
}
|
|
break;
|
|
default:
|
|
if (spt < 0) {
|
|
value.value[options_model.value].y++
|
|
} else {
|
|
value.value[options_model.value].y--
|
|
}
|
|
break;
|
|
}
|
|
chang(options_model.value, "", "")
|
|
}
|
|
/**
|
|
* 在增加时 实现回退
|
|
*/
|
|
const value_point_amount_tmp = ref(0)
|
|
/**
|
|
* 长按实现
|
|
*/
|
|
let loop: NodeJS.Timeout
|
|
const handlerTouchstart = (type: string, fun: string) => {
|
|
loop = setInterval(() => {
|
|
if (type == 'x') {
|
|
if (fun == '+') {
|
|
value.value[options_model.value].x++
|
|
} else {
|
|
value.value[options_model.value].x--
|
|
}
|
|
|
|
} else {
|
|
if (fun == '+') {
|
|
value.value[options_model.value].y++
|
|
} else {
|
|
value.value[options_model.value].y--
|
|
}
|
|
}
|
|
chang(options_model.value, 0, '')
|
|
}, 15)
|
|
}
|
|
const handlerTouchend = () => {
|
|
clearInterval(loop)
|
|
}
|
|
defineExpose({
|
|
options_model,
|
|
});
|
|
return {
|
|
value_point_amount_tmp,
|
|
details_selsect,
|
|
resetall_all,
|
|
resetall,
|
|
div,
|
|
max,
|
|
point,
|
|
options_model,
|
|
value,
|
|
value_point,
|
|
dragStartHandle,
|
|
chang,
|
|
options,
|
|
reset,
|
|
options_value_point_amount,
|
|
value_point_amount,
|
|
chang_point_amount,
|
|
del_dialog,
|
|
add_control_points,
|
|
del_control_points,
|
|
add_dialog,
|
|
add,
|
|
now_amount,
|
|
preview,
|
|
details_selsect_val,
|
|
ipad_chang,
|
|
url,
|
|
handlerTouchstart,
|
|
handlerTouchend
|
|
}
|
|
}
|
|
})
|
|
|
|
</script>
|