Продолжение лиспа после визуализации
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Продолжение лиспа после визуализации

Продолжение лиспа после визуализации

Ответ
Поиск в этой теме
Непрочитано 26.04.2011, 23:02 #1
Продолжение лиспа после визуализации
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

Что-то меня скрючило.
Включаю видимость группе элементов, а затем включаю говорилку.
Сначала говорит, а потом включаются элементы.
Что не делал - не помогает. И одну говорилку и другую пробовал - результат один и тот же.
Такое впечатление, что запуск обращения к COM объекту блокирует работу видеокарты.
Регенерировать что ли рисунок?
Просмотров: 1476
 
Непрочитано 26.04.2011, 23:09
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


По идее обращение к СОМ-объектам "блокирует" клиента. Приведи свой код, тогда можно будет и голову ломать предметно
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.04.2011, 23:44
#3
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


У меня есть, к примеру, два объекта с конкретными метками "1B64" и "1B69"
Я выключаю им видимость вручную. Затем гружу функцию по включению (выключению) видимость объектов по меткам в списке.

Код:
[Выделить все]
(defun vis-object (as ad / )
(if (= as 1) (mapcar '(lambda (x) (vla-put-Visible (vlax-ename->vla-object (handent x)) :vlax-true)) ad))
(if (= as 0) (mapcar '(lambda (x) (vla-put-Visible (vlax-ename->vla-object (handent x)) :vlax-false)) ad))
)
Включаю видимость обоим объектам
Код:
[Выделить все]
(vis-object 1 '("1B64" "1B69"))
включаю алерт
Код:
Все это одним махом. И сначала вылезает алерт, а уж потом включается видимость элементам.
Вставляю задержку
Код:
[Выделить все]
(command "DELAY" 10000)
Десять скунд черного экрана, потом алерт, а потом включается видимость.
.... зараза!

Во! С алертом справился. Теперь с говорилкой надо.

Говорилка из библиотеки функций с небольшой добавкой.
Код:
[Выделить все]
;====================================
(defun @Voice&TextInput(voice text / SpeekContent)
(setq SpeekContent (strcat "<VOICE REQUIRED='NAME=" voice "'>" text "</VOICE>"))
)
(defun @VoiceList (Sapi / i VoiceLst Voices)
(setq Voices (vlax-invoke Sapi 'GetVoices))
(setq i 0 VoiceLst '())
(repeat (vla-get-count Voices)
(setq VoiceLst (append VoiceLst 
(list (vlax-invoke (vla-item Voices i) 'GetDescription))))
(setq i (1+ i))
)
VoiceLst
)
(defun C:GETVOICE ()
(vl-load-com)
(setq Sapi (vlax-create-object "Sapi.SpVoice"))
(setq voices (@VoiceList Sapi))
(vlax-release-object Sapi)
(princ voices)(princ)
  )

(setq Sapi (vlax-get-or-create-object "Sapi.SpVoice"))
(defun voise-new (df / )
(vlax-invoke-method Sapi "Speak" (@Voice&TextInput "ELAN TTS Russian (Nicolai 16Khz)"
df) 0)
)
;====================================
Берем:
Код:
[Выделить все]
;включаем видимость
(vis-object 1 '("1B64" "1B69"))
;говорим
(voise-new "Иван Петрович! Чтобы построить этот дом вам надо:")
;выключаем выборку грунта
(vis-object 0 '("1B64"))
;опять говорим
(voise-new "вырыть триста тридцать три с половиной метров кубических грунта")
;очищаем память от СОМ-а
(vlax-release-object Sapi)
Видимость включается, затем говорит, потом опять говорит и только потом выключается выборка грунта, хотя должна по идее выключиться между двумя говорилками.

Все, сделал. Понатыкал задержек после каждого включения и выключения видимости.

Последний раз редактировалось Supermax, 27.04.2011 в 00:01.
Supermax вне форума  
 
Непрочитано 27.04.2011, 00:04
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Код:
[Выделить все]
 (vl-load-com)

(defun test (/ fun_vis lst)

  (defun fun_vis (handle vis / ent)
    (vl-catch-all-apply
      (function
        (lambda ()
          (vla-put-visible
            (setq ent (vlax-ename->vla-object (handent handle)))
            (if (member vis (list 0 nil :vlax-false))
              :vlax-false
              :vlax-true
              ) ;_ end of if
            ) ;_ end of vla-put-visible
          (vla-update ent)
          ) ;_ end of lambda
        ) ;_ end of function
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of defun

  (setq lst '("223" "224" "225"))
  (foreach ent lst
    (fun_vis ent nil)
    ) ;_ end of foreach
  (alert "hide done")
  (command "_.delay" 200)
  (foreach ent lst
    (fun_vis ent t)
    ) ;_ end of foreach
  (alert "finish")
  (command "_.delay" 200)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.04.2011, 00:13
#5
gomer

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


Цитата:
Сообщение от Supermax Посмотреть сообщение
Все, сделал. Понатыкал задержек после каждого включения и выключения видимости.
Supermax, вы - точно руководитель фирмы А не пробовали николая освобождать после каждой фразы?
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Продолжение лиспа после визуализации



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Продолжение макроса/лиспа после команды _qnew Positron AutoCAD 57 04.03.2010 17:42
Снятие выделения с объекта после использования GRIPS Torino AutoCAD 10 19.02.2010 15:59
Юмор 2007 Огурец Разное 1172 29.12.2007 11:16
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
После Plan изменяется масштаб, я не хочу этого. Что делать? Drulya AutoCAD 4 23.09.2003 16:10