Мы используем файлы cookie, чтобы упростить навигацию на этом сайте. Если вы даете свое согласие на использование файлов cookie и обработку ваших персональных данных, нажмите «Принимаю».

Несколько открытых аннотаций сразу

Домой Форумы Для программистов Несколько открытых аннотаций сразу

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Автор
    Сообщения
  • #15428
    egarshan
    Участник

    Здравствуйте. Столкнулся с необходимостью отображать несколько открытых аннотаций сразу, то есть при открытии новой аннотации объекта, открытые ранее не должны исчезать. Ни в одном из файлов .js, а также с помощью отладчика не смог найти функцию, отвечающую за обработку открытых аннтоаций.
    Как можно осуществить данную задачу?

    На изображении 1 желаемый результат. По дефолту при открытии новой аннотации, ранее открытая аннотация исчезает и остается только имя аннотации.

    Вложения:
    Вы должны войти для просмотра вложений.
    #15516

    Здравствуйте, извините за запоздалый ответ.

    Ни в одном из файлов .js, а также с помощью отладчика не смог найти функцию, отвечающую за обработку открытых аннтоаций.

    Это все находится внутри самого движка v3d.js, который минифицирован. Кроме того, в аннотациях это поведение вшито, поэтому просто поменять не получится.

    Но фактически там только меняется стиль visibility у соответствующих элементов, поэтому можно переопределить CSS у всех аннотаций в сцене, после того как она была загружена, например в функции runCode стандартного шаблона приложения:

    
    function annotationOverrideVisibility(obj) {
        // классы с "visibility: hidden!important;" и
        // "visibility: visible!important;"
        var FORCE_VISIBLE_CLASS = 'v3d-annotation-dialog--visible';
        var FORCE_HIDDEN_CLASS = 'v3d-annotation-dialog--hidden';
    
        // при старте форсируем hidden!important
        obj.annotationDialog.classList.add(FORCE_HIDDEN_CLASS);
    
        obj.annotation.addEventListener('click', function() {
            // при клике переключаем между hidden!important и visible!important
            obj.annotationDialog.classList.toggle(FORCE_VISIBLE_CLASS);
            obj.annotationDialog.classList.toggle(FORCE_HIDDEN_CLASS);
        });
    }
    
    function runCode(app) {
        // бежим по всей сцене
        app.scene.traverse(function(obj) {
            if (obj.isAnnotation) {
                // обрабатываем каждую аннотацию
                annotationOverrideVisibility(obj);
            }
        });
    }
    

    Ключевой момент в том, чтобы использовать стили с important для visibility, чтобы переопределить скрытие аннотаций автоматом, например добавив в CSS:

    
    .v3d-annotation-dialog--hidden {
        visibility: hidden!important;
    }
    
    .v3d-annotation-dialog--visible {
        visibility: visible!important;
    }
    

    Co-founder and lead developer at Soft8Soft.

Просмотр 2 сообщений - с 1 по 2 (из 2 всего)
  • Для ответа в этой теме необходимо авторизоваться.