Событие при выборе 3D курсора

Обсуждение, связанное с разработкой ПО верхнего уровня

Событие при выборе 3D курсора

Postby chirkovnick on 09 Aug 2016, 22:37

Всем привет. Возникла небольшая проблема, самому решить не получается.
У меня есть, скажем, десять массивов с данными. Три из этих массивов я вывожу на график 3D Stem (то есть в каждую плоскость по массиву) - получился 3D-график в виде точек. Теперь мне нужно, чтобы при нажатии на любую из точек на графике, выводилось отдельное окно с данными по остальным массивам.
Я не понял, как можно это реализовать, чтобы каждая точка была отдельной ячейкой и ее можно было бы выбрать. На ум пришла идея использовать курсор для выбора нужной точки.
Для двумерного графика XY Graph есть возможность после создания курсора в event-структуре добавить событие "cursor drop", "cursor grab" или "cursor moved", что меня, в целом, устраивает. Но такого для 3D графиков я не нашел. Курсор перетаскивать по графику можно, но контролировать событие нельзя.
Начал делать, отталкиваясь от координат курсора и сопоставляя их с элементами исходных массивов (прикладываю файл). Но такой подход уж слишком неоптимальный и требует много ненужных усилий. Может кто сможет подсказать, как решить задачу по-человечески?
Attachments
1.jpg
2.jpg
3.jpg
Пример с двумерным случаем
4.jpg
Пример с двумерным случаем
Graph Events.vi
Пример с двумерным случаем
(21.38 KiB) Downloaded 76 times
test.vi
(21.84 KiB) Downloaded 69 times
chirkovnick
interested
interested
 
Posts: 2
Joined: 09 Aug 2016, 21:40
LabVIEW Version: 14
Karma: 0

Re: Событие при выборе 3D курсора

Postby dadreamer on 12 Aug 2016, 17:59

chirkovnick wrote:как решить задачу по-человечески?

Могу предложить пока только один вариант, но он трудоёмкий. Вместо 3D Stem используйте обычный 3D Picture Control и на нём отрисовывайте все ваши точки (в виде сфер n-ного радиуса). Для определения объекта, по которому кликнули, можно использовать этот пример: https://decibel.ni.com/content/docs/DOC-4958 Координатные оси создаются стандартным :vi: Create 3D Axis. Либо можно Mesh создать поточечно сразу, хотя это будет считаться единым объектом.
Теоретически, можно подобный подход и для всех прочих 3D контролов применить, т.к. они все реализованы на 3D Picture и завёрнуты в собственные классы (можно поглядеть на "внутренности" через "фасад" по ПКМ на контроле). Однако так просто выдрать хотя бы объект сцены их 3D Stem не получается, слишком там много всего наворочено. Хоть и можно покопаться, если время есть.
User avatar
dadreamer
professor
professor
 
Posts: 3085
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 776
I/O VIP vision internet

Re: Событие при выборе 3D курсора

Postby chirkovnick on 14 Aug 2016, 18:03

dadreamer wrote:
chirkovnick wrote:как решить задачу по-человечески?

Могу предложить пока только один вариант, но он трудоёмкий. Вместо 3D Stem используйте обычный 3D Picture Control и на нём отрисовывайте все ваши точки (в виде сфер n-ного радиуса). Для определения объекта, по которому кликнули, можно использовать этот пример: https://decibel.ni.com/content/docs/DOC-4958 Координатные оси создаются стандартным :vi: Create 3D Axis. Либо можно Mesh создать поточечно сразу, хотя это будет считаться единым объектом.
Теоретически, можно подобный подход и для всех прочих 3D контролов применить, т.к. они все реализованы на 3D Picture и завёрнуты в собственные классы (можно поглядеть на "внутренности" через "фасад" по ПКМ на контроле). Однако так просто выдрать хотя бы объект сцены их 3D Stem не получается, слишком там много всего наворочено. Хоть и можно покопаться, если время есть.



Большое спасибо за совет. Попробую.
chirkovnick
interested
interested
 
Posts: 2
Joined: 09 Aug 2016, 21:40
LabVIEW Version: 14
Karma: 0


Return to Лицевая панель

Who is online

Users browsing this forum: No registered users and 3 guests

cron