useFunctionalToolbarStore.js 5.02 KB
import { defineStore, storeToRefs } from 'pinia';
import { ref } from 'vue';
import TRANSFORM from '@/views/assets/images/functional-toolbar/transform.png';
import MEASURE from '@/views/assets/images/functional-toolbar/measure.png';
import TRIMEDIT from '@/views/assets/images/functional-toolbar/trimEdit.png';
import MESHEdit from '@/views/assets/images/functional-toolbar/meshEdit.png';

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

export const useFunctionalToolbarStore = defineStore('functional-toolbar', () => {
    const classFunctionHook = useClassFunctionStore();
    const { ObjectsControlClass, MeasuresClass, EditCurveClass, SculptClass, MarkPointsOnMeshClass } =
        storeToRefs(classFunctionHook);

    const items = ref([
        {
            key: 'transform',
            icon: TRANSFORM,
            selected: false,
            enabled: false
        },
        {
            key: 'measure',
            icon: MEASURE,
            selected: false,
            enabled: false
        },
        {
            key: 'trimEdit',
            icon: TRIMEDIT,
            selected: false,
            enabled: false
        },
        {
            key: 'meshEdit',
            icon: MESHEdit,
            selected: false,
            enabled: false
        }
    ]);

    const itemSelectedKey = ref('');

    const removeEvents = () => {
        const ObjectsControl = ObjectsControlClass.value;
        const Measures = MeasuresClass.value;
        const EditCurve = EditCurveClass.value;
        const Sculpt = SculptClass.value;
        if (ObjectsControl) {
            ObjectsControl.setDragControlEnabled(false);
            ObjectsControl.setControlItemsEnabled([]);
            ObjectsControl.setOrientBottomEnabled(false);
        }
        if (Measures) {
            Measures.removeEvents();
            Measures.removeMeasuresObjects();
        }
        if (EditCurve) {
            EditCurve.removeEvents();
        }
        if (Sculpt) {
            Sculpt.removeEvents();
        }
    };

    const addEvents = () => {
        const ObjectsControl = ObjectsControlClass.value;
        if (ObjectsControl) {
            ObjectsControl.setDragControlEnabled(true);
            ObjectsControl.setControlItemsEnabled([
                'rotate-x',
                'rotate-y',
                'rotate-z',
                'translate-x',
                'translate-y',
                'translate-z'
            ]);
        }
    };

    const addFunction = (key, isEnable) => {
        removeEvents();
        const ObjectsControl = ObjectsControlClass.value;
        const Measures = MeasuresClass.value;
        const EditCurve = EditCurveClass.value;
        const Sculpt = SculptClass.value;
        const MarkPointsOnMesh = MarkPointsOnMeshClass.value;
        const object = items.value.find((el) => el.key === key);
        items.value.forEach((el) => {
            el.selected = false;
        });
        object.selected = isEnable;
        switch (key) {
            case 'transform':
                if (ObjectsControl && isEnable) {
                    ObjectsControl.setControlItemsEnabled([
                        'rotate-x',
                        'rotate-y',
                        'rotate-z',
                        'translate-x',
                        'translate-y',
                        'translate-z'
                    ]);
                    ObjectsControl.setDragControlEnabled(true);
                    ObjectsControl.setOrientBottomEnabled(false);
                }

                break;
            case 'measure':
                if (Measures && isEnable) {
                    Measures.addEvents();
                    if (MarkPointsOnMesh) MarkPointsOnMesh.removeEvents();
                } else {
                    if (MarkPointsOnMesh) MarkPointsOnMesh.addEvents();
                }
                break;
            case 'basicObjects':
                addEvents();
                break;
            case 'trimEdit':
                if (EditCurve && isEnable) {
                    EditCurve.addEvents();
                }
                break;
            case 'meshEdit':
                if (Sculpt && isEnable) {
                    Sculpt.addEvents();
                }
                break;
            default:
                break;
        }
        if (!isEnable) {
            addEvents();
        }
    };

    const setSelectedItem = (key = 'transform') => {
        const object = items.value.find((el) => el.key === key);
        if (object) {
            object.selected = !object.selected;
            addFunction(key, object.selected);
            itemSelectedKey.value = object.selected ? key : '';
        } else {
            itemSelectedKey.value = '';
        }
    };

    const setFunctionalEnabled = (key = 'transform', isEnable = false) => {
        const object = items.value.find((el) => el.key === key);
        if (object) {
            object.enabled = isEnable;
        }
    };

    return {
        items,
        itemSelectedKey,
        setSelectedItem,
        setFunctionalEnabled
    };
});