QML, объединение нескольких сеток в один объект


Я пытаюсь создать настраиваемый компонент Qt3D, объединив три ConeMeshes в одну сущность. Пользователь должен иметь возможность взаимодействовать с пользовательской сущностью, поэтому я добавил ObjectPicker в файл. Обычно я использую заранее заданный масштаб .obj файл, но мой менеджер хочет, чтобы объекты рисовались непосредственно Qt.

Две сетки, которые я хочу объединить, определены в отдельном файле qml, поэтому я могу вызвать его в своем Scene3D.

Entity {
    ObjectPicker {
    id: combinedPicker
    }
    ConeMesh {
    id: conemesh1
    ...
    }
    ConeMesh {
    id: conemesh2
    ...
    }
    Transform {
    id: conetransform1
    }
    Transform {
    id: conetransform2
    }
    Entity {
    components: [conemesh1, conetransform1, conemesh2, conetransform2, combinedPicker]
    }
}

Мой подход для объединения сеток необходимо заключить их как компоненты в отдельную область сущностей, как показано в последней строке. Но этот подход отображает только последнюю запись в массиве компонентов. Выше, это будет конус 2.

Ранее я пытался создать несколько экземпляров сущностей и передать каждому из них идентификатор ObjectPicker,

Entity {
components: [conemesh1, conetransform1, combinedPicker]
}
Entity {
components: [conemesh2, conetransform2, combinedPicker]
}

Но согласно документации ObjectPicker, средство выбора объектов не является общим для нескольких компонентов.

Так что мой вопрос заключается в следующем: каков подход corrent при объединении нескольких сеток в одну единственную сетку в Qml?

1 3

1 ответ:

Я решил эту проблему путем "факторинга" элемента ObjectPicker, который фактически является родственным элементом объектов сетки.

Entity {
components: [conePicker]
Entity {
  id: pipeTopEntity
  components: [coneMeshTop, coneTransformTop, floorMaterialTop]
}
Entity {
  id: pipeBodyEntity
  components: [coneMeshBody, coneTransformBody, floorMaterialBody]
}
Entity {
  id: pipeBotEntity
  components: [ coneMeshBot, coneTransformBot,  floorMaterialBot]
}