useObjects3dStore.js 2.92 KB
import { defineStore, storeToRefs } from 'pinia';
import { onMounted, reactive, ref } from 'vue';

import CUBEIMAGE from '@/views/assets/images/functional-toolbar/objects3d/cube.png';
import SPHEREIMAGE from '@/views/assets/images/functional-toolbar/objects3d/sphere.png';
import CONEIMAGE from '@/views/assets/images/functional-toolbar/objects3d/cone.png';
import CYLINDERIMAGE from '@/views/assets/images/functional-toolbar/objects3d/cylinder.png';

import { addCone, addCube, addCyliner, addSphere } from '@/utility/jsm/function/getBasicMesh';

import { useEditorStore } from '@/views/stores/useEditorStore';

export const useObjects3dStore = defineStore('objects3d', () => {
    const store = useEditorStore();
    const { applyGenerateMesh } = store;

    const items = reactive([
        {
            key: 'cube',
            image: CUBEIMAGE,
            parameteritems: {
                length: 20,
                width: 20,
                height: 20
            }
        },
        {
            key: 'sphere',
            image: SPHEREIMAGE,
            parameteritems: {
                radius: 20,
                resolution: 20
            }
        },
        {
            key: 'cone',
            image: CONEIMAGE,
            parameteritems: {
                radius: 20,
                height: 20,
                resolution: 20
            }
        },
        {
            key: 'cylinder',
            image: CYLINDERIMAGE,
            parameteritems: {
                radius: 20,
                height: 20,
                resolution: 20
            }
        }
    ]);
    const selecteditem = ref('cube');
    const parameteritems = ref({ length: 20, width: 20, height: 20 });

    const setSelectedItem = (val) => {
        selecteditem.value = val;
        const objects = items.find((el) => el.key === val);
        if (objects) {
            parameteritems.value = objects.parameteritems;
        }
    };

    const setApplyGenerateMesh = () => {
        const object = items.find((el) => el.key === selecteditem.value);
        if (!object) return;
        let mesh = null;
        switch (selecteditem.value) {
            case 'cube':
                mesh = addCube(object.parameteritems);
                break;
            case 'sphere':
                mesh = addSphere(object.parameteritems);
                break;
            case 'cone':
                mesh = addCone(object.parameteritems);
                break;
            case 'cylinder':
                mesh = addCyliner(object.parameteritems);
                break;
            default:
                break;
        }
        applyGenerateMesh([mesh]);
    };

    onMounted(() => {
        const objects = items.find((el) => el.key === 'cube');
        if (objects) {
            parameteritems.value = objects.parameteritems;
        }
    });

    return {
        items,
        selecteditem,
        parameteritems,
        setSelectedItem,
        setApplyGenerateMesh
    };
});