Как передать функции (getkword) Список ключевых слов из списка? - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как передать функции (getkword) Список ключевых слов из списка?

Как передать функции (getkword) Список ключевых слов из списка?

Ответ
Поиск в этой теме
Непрочитано 17.09.2008, 15:53
Как передать функции (getkword) Список ключевых слов из списка?
Kostinok
 
Инженер-электрик
 
Калининград
Регистрация: 13.10.2007
Сообщений: 151

Здравствуйте,
Прошу проконсультировать в следующем вопросе:
Совершенно коряво переделав содранную у VVA функцию GetDynamicBlockPropertyList, которая возвращает список всех свойст динамического блока в виде списка, я получаю список фозможных свойств видимости динамического блока по метке.

Код:
[Выделить все]
; Возвращает список свойства "vis" динамического блока в виде списка
; Сорвано с программы VVA GetDynamicBlockPropertyList
(defun GetDynamicBlockPropertyList (obj / lstProperties PrName)
 (if (and (vlax-property-available-p obj "IsDynamicBlock")
          (= (vla-get-IsDynamicBlock obj) :vlax-true)
          (setq lstProperties (vlax-safearray->list 
                                           (variant-value 
                                            (vla-GetDynamicBlockProperties obj)))))
   (progn
     (setq PrName (mapcar '(lambda (x) (vla-get-propertyname X)) lstProperties))
     (mapcar
       'vlax-variant-value
       (vlax-safearray->list
	 (nth
	   (vl-position "vis" PrName)
	   (mapcar '(lambda (x) (variant-value (vla-get-allowedvalues X))) lstProperties)
	   )
	 )
       );; Значения параметра "vis" списком
     )))
Так как я собираюсь работать только с динамическими блоками у которых Visibility Label "vis", то после выполнения, функция выдает мне список всех возможных значений, к примеру:

Код:
[Выделить все]
("ARS/R - 2x18" "ARS/R - 2x36" "ARS/R - 4x18" "ARS/R - 4x36" "PAC - 1x36" "PAC - 2x36" "RTX - 1x36" "RTX - 2x36" "BAT - 1x18" "BAT - 2x18" "BAT - 2x36")
Поскольку конечная цель это вставить динамический блок с указанием параметра, причем, что бы перед тем как вставить вылетело окошечко и спросило, "Какой тип светильника будем вставлять:", надо теперь передать полученный список - функции (getkword), да еще и задействовать функцию (initget).

А вот как это сделать ума не приложу...

Ну а потом благодоря функции _kpblc-change-dyn-block-prop от kpblcа поменять параметр на выбранный ранее (из окошечка).
__________________
Можно сопротивляться вторжению армий, вторжению идей сопротивляться невозможно. /В. Гюго/
Просмотров: 12007
 
Непрочитано 24.05.2012, 17:31
#21
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Подскажите как обработать список, 5 и 7 пост не работает. Вместо ЩГА и размеров может быть произвольный набор (пользователь напишет произвольно в базу данных)
(lisp "ЩГА 400х600х150" "ЩГА 600х600х200" "ЩГА
600х600х250" "ЩГА 800х600х200" "ЩГА 800х600х250" "ЩК-IP31" "ЩРН-6-IP31"
"ЩРН-6-IP54" "ЩРН-9-IP31" "ЩРН-9-IP54" "ЩРН-12-IP31" "ЩРН-12-IP54"
"ЩРН-15-IP31" "ЩРН-15-IP54")
sdv79 вне форума  
 
Непрочитано 25.05.2012, 09:32
#22
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Сам долго воевал с getkword, в итоге использую такой способ, к каждому пункту добавляю цифру (порядковый номер), тогда не надо следить за регистром.
sdv79, попробуй так
Код:
[Выделить все]
 
; lst - (list "ЩГА 400х600х150" "ЩГА 600х600х200" "ЩГА 600х600х250" "ЩГА 800х600х200" "ЩГА 800х600х250" "ЩК-IP31" "ЩРН-6-IP31" "ЩРН-6-IP54" "ЩРН-9-IP31" "ЩРН-9-IP54" "ЩРН-12-IP31" "ЩРН-12-IP54" "ЩРН-15-P31" "ЩРН-15-IP54") 
; Вызов: (_tdg-getkword "Выберете обозначение" lst)
(defun _tdg-getkword(msg lst / )
  (initget (vl-string-left-trim " "
                                ((lambda(ss i) (repeat (length lst) (setq ss (strcat ss " " (itoa (setq i (1+ i))))))) "" -1)
                                )
           )
  (if (not (vl-catch-all-error-p
             (setq res (vl-catch-all-apply 'getkword
                                           (list (strcat msg
                                                         " ["
                                                         ((lambda(ss i)
                                                            (foreach item lst
                                                              (setq ss (strcat ss (itoa (setq i (1+ i))) " - " item "/"))
                                                              )
                                                            )
                                                           ""
                                                           -1
                                                           )
                                                         "] <Отмена>: "
                                                         )
                                                 )
                                           )
                   )
             )
           )
    (nth (atoi res) lst)
    )
  ); end _tdg-getkword
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 25.05.2012, 11:06
#23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


sdv79, Для выбора из базы getkword не лучший вариант. Особенно если учесть, что
Цитата:
Сообщение от sdv79 Посмотреть сообщение
Вместо ЩГА и размеров может быть произвольный набор (пользователь напишет произвольно в базу данных)
Предлягаю воспользоваться диалогом. см #16 и #17 в этой теме
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 28.05.2012, 09:27
#24
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Спасибо TararykovDG за код, у меня тоже были мысли ставить нумерацию, на мысль подтолкнула строка (nth (vl-position res sublst) lst) из 7 поста Кулик Алексей aka kpblc.
С VVA согласен полностью, что у меня не лучший выбор, к тому же, в приведенном примере это был не весь список, а часть.
Подскажите, как поправить код 17 поста, так чтобы после 10 элементов списка в окне появлялся бегунок. Боюсь полный список может не поместиться в окно. Есть еще просьба, можно ли создать поле быстрого поиска в том же окне, чтобы пользователь вписав первые буквы или цифры, видел только схожие элементы.
sdv79 вне форума  
 
Непрочитано 28.05.2012, 10:53
#25
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от sdv79 Посмотреть сообщение
(nth (vl-position res sublst) lst)
Чувствую какой-то подвох в этой строчке.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.05.2012, 18:21
#26
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Боюсь полный список может не поместиться в окно. Есть еще просьба, можно ли создать поле быстрого поиска в том же окне, чтобы пользователь вписав первые буквы или цифры, видел только схожие элементы.
он сам появится когда нужно будет. Боюсь код из #17 тут никак не подходит. лучше сделать два списка: в первом выбирать тип, во втором - размер
gomer вне форума  
 
Непрочитано 28.05.2012, 18:46
#27
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


sdv79, Попробуй код из #16. Для больших списков он будет делать дополнительные окна, и только в очень длинном списке в конце появится скроллинг
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 30.05.2012, 20:01
#28
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Методом тыка, и с книгой AutoLISP и Visual LISP в среде AutoCAD, понял что в коде пост 17 (if (> (length info-list) 26)... как раз отвечает за появление бегунка (при наполнении списка). А вот как реализовать предложения "gomer", этого я не знаю, до визуализации еще не дошел. Если кто предложит готовое решение (реализовать поле быстрого поиска), буду благодарен.
Единственное, что получилось, это реализовать подсветку ближайшего подходящего типа (поигрался с (set_tile "info" "0"),
sdv79 вне форума  
 
Непрочитано 30.05.2012, 21:06
#29
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от sdv79 Посмотреть сообщение
Методом тыка, и с книгой AutoLISP и Visual LISP в среде AutoCAD, понял что в коде пост 17 (if (> (length info-list) 26)... как раз отвечает за появление бегунка (при наполнении списка). А вот как реализовать предложения "gomer", этого я не знаю, до визуализации еще не дошел.
Там это сделано для того чтоб ползунок не появлялся, а вес список был на виду... но элементов списка может быть сколько угодно... так что это тот еще бубен... по поводу предложения от меня, наглядный пример - прокат В. Кондрата, правда там все это сделано через одно место... Для начала определитесь со структурой вашей базы данных, а раскидать ее по диалогу дело второе... Самый простой вариант базы данных - в виде отдельных списков раскиданных по файлам лисп...
gomer вне форума  
 
Непрочитано 30.05.2012, 22:15
#30
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


База данных сформированна, а вот окошка нет.
Вложения
Тип файла: zip Specification_db.zip (62.1 Кб, 43 просмотров)
sdv79 вне форума  
 
Непрочитано 30.05.2012, 23:39
#31
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от sdv79 Посмотреть сообщение
База данных сформированна
как выудить инфу из аксессовской бд можно найти здесь на форуме
например
здесь
gomer вне форума  
 
Непрочитано 31.05.2012, 13:08
#32
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Спасибо, с БД работать умею, а вот писать окошки пока нет.
sdv79 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как передать функции (getkword) Список ключевых слов из списка?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать список в строку ivspec Программирование 11 18.03.2015 10:18
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Как пeренумеровать список в Sheet Set автоматом?? Startrek AutoCAD 1 20.05.2006 09:54
чтение данных из файла Александер Программирование 6 08.09.2005 10:24