Программное позиционирование элементов
-
- interested
- Сообщения: 4
- Зарегистрирован: 01 июл 2011, 10:25
- Версия LabVIEW: 9.0.1
- Контактная информация:
Программное позиционирование элементов
Добрый День.
Может быть уже кто то сталкивался уже с этим. Во время работы программы, считываются сигналы с множества каналов. Взависимости от колличества каналов, я хотел бы создавать соотвественное колличество напрмиер CheckBox и каждой из них задавать координаты позиционирования на главной панели. Я пробывал создать сначало массив для CheckBox и удаётся изменят размеры массива во время работы программы, но к сожалению не удаётся задавать им координаты в поле массива, что бы они имели определённое расстояние к друг другу. Пробывал так же со Scripting работать и создавать CheckBoxes через for i=0... и соотвественно позиционировать их по желанию, но если программа уже работает, то Scripting отказывается что то изменять.
Может быть уже кто то сталкивался уже с этим. Во время работы программы, считываются сигналы с множества каналов. Взависимости от колличества каналов, я хотел бы создавать соотвественное колличество напрмиер CheckBox и каждой из них задавать координаты позиционирования на главной панели. Я пробывал создать сначало массив для CheckBox и удаётся изменят размеры массива во время работы программы, но к сожалению не удаётся задавать им координаты в поле массива, что бы они имели определённое расстояние к друг другу. Пробывал так же со Scripting работать и создавать CheckBoxes через for i=0... и соотвественно позиционировать их по желанию, но если программа уже работает, то Scripting отказывается что то изменять.
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Программное позиционирование элементов
Можете создать на FP заранее чекбоксы для максимального количества каналов. Затем просто делать их видимыми/невидимыми.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
- interested
- Сообщения: 4
- Зарегистрирован: 01 июл 2011, 10:25
- Версия LabVIEW: 9.0.1
- Контактная информация:
Re: Программное позиционирование элементов
Я тоже думал об этом. Но мне кажется это не особо красивое решение...
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Программное позиционирование элементов
Скриптинг это вообще не вариант.
Массив можно сделать, и равное расстояние между элементами можно организовать, но на FP растянуть массив до максимального количества элементов всё-равно придется. В ходе работы программы все лишние элементы массива будут серыми.
Не вижу ничего плохого в варианте с невидимыми элементами. Можно всё красиво организовать через массив Reference.
Массив можно сделать, и равное расстояние между элементами можно организовать, но на FP растянуть массив до максимального количества элементов всё-равно придется. В ходе работы программы все лишние элементы массива будут серыми.
Не вижу ничего плохого в варианте с невидимыми элементами. Можно всё красиво организовать через массив Reference.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
- interested
- Сообщения: 4
- Зарегистрирован: 01 июл 2011, 10:25
- Версия LabVIEW: 9.0.1
- Контактная информация:
Re: Программное позиционирование элементов
Скриптинг мне казался вариантом, так как больше возможностей предлагает. Но как уже выяснил он не хочет что то изменять елси vi уже работает. Про массив с References не совсем понял, можно пожалуйста по подробнее .
-
FireFly
- expert
- Сообщения: 1321
- Зарегистрирован: 25 апр 2009, 08:58
- Награды: 2
- Версия LabVIEW: 2014
- Откуда: Санкт-Петербург
- Поблагодарили: 1 раз
Re: Программное позиционирование элементов
Допустим у вас есть на FP 32 чекбокса (максимальное кол-во каналов).
Вы даете им Label:
CH1, CH2, CH3 и т.д. От пользователя эти Label можно скрыть.
Берете массив Reference на все элементы FP. Можно сделать попроще если у вас нет Tab панелей и прочего.
Затем делаете поиск в массиве всех Controls, у которых Label начинается с CH. Собираете их в массив по номеру следующему за CH. А также делаете To More Specific Class.
Получается ИМХО несколько красивее чем собирать References в массив вручную.
Ну и дальше с этим массивом работаете. Стало N каналов -> Все элементы из массива с 0 до N-1 делаете Visible через Property Node.
Помимо прочего данный подход легко масштабируется. Если вдруг каналов станет больше - создадите ещё несколько чекбоксов с нужными Label.
Вы даете им Label:
CH1, CH2, CH3 и т.д. От пользователя эти Label можно скрыть.
Берете массив Reference на все элементы FP. Можно сделать попроще если у вас нет Tab панелей и прочего.
Затем делаете поиск в массиве всех Controls, у которых Label начинается с CH. Собираете их в массив по номеру следующему за CH. А также делаете To More Specific Class.
Получается ИМХО несколько красивее чем собирать References в массив вручную.
Ну и дальше с этим массивом работаете. Стало N каналов -> Все элементы из массива с 0 до N-1 делаете Visible через Property Node.
Помимо прочего данный подход легко масштабируется. Если вдруг каналов станет больше - создадите ещё несколько чекбоксов с нужными Label.
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Программное позиционирование элементов
Вариант: соберите константу references на все нужные элементы FP с помошью скриптинга и вставьте её в блок диаграмму. Своего рода препроцессор. Можно добавить в pre-build step. Со скриптингом есть очень удобная функция: Traverse for GObjects - не надо делать рекурсии.
Достоинство: программа быстрее стартует, занимает чуть меньше места
Недостаток: компиляция осуществляется дольше, при изменении нужных индикаторов на FP и до компиляции придётся запускать "препроцессор" вручную.
Имелось в виду что-то такое (перед окончательным употреблением обработать напильником)
Достоинство: программа быстрее стартует, занимает чуть меньше места
Недостаток: компиляция осуществляется дольше, при изменении нужных индикаторов на FP и до компиляции придётся запускать "препроцессор" вручную.
Имелось в виду что-то такое (перед окончательным употреблением обработать напильником)
- Вложения
-
- CreateArrayOfReferences.vi
- (44.71 КБ) 206 скачиваний
-
- BD withChekboxes.vi
- (7.17 КБ) 192 скачивания
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
- interested
- Сообщения: 2
- Зарегистрирован: 04 окт 2009, 19:52
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Программное позиционирование элементов
Программное размещение компонентов по моему скромному мнению имеет смысл, только если количество индикаторов приближается или превышает 100. Это могут быть информационные панели, многоканальные измерители и т.д. При разработке такой панели пришлось разработать алгоритм размещения элементов. Кому интересно пользуйтесь.
- Вложения
-
- Размещение идикаторов+ Folder.rar
- LV 8.5
- (125.08 КБ) 154 скачивания
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Программное позиционирование элементов
Я бы отключил обновление FP во время изменения совокупности индикаторов.
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
- interested
- Сообщения: 2
- Зарегистрирован: 04 окт 2009, 19:52
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Программное позиционирование элементов
В реальной системе отключение FP не будет заметно т.к ВСЕ измеренные параметры не изменяют своего значения (и не должны) за каждую итерацию