Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: altver от 13-05-2024, 21:17:53

Название: проблема при смене цвта экрана
Отправлено: altver от 13-05-2024, 21:17:53
Добрый день, господа!
прилагаю лисп и блок.
задача:
 поменять цвет экрана и вставить блок в чертеж.
вопрос:
почему с первого раза меняется цвет экрана и лисп снимается и начинает все работать только со второго раза?

для проверки необходимо открыть новый чертеж, экран сделать любым цветом кроме 55 и прописать путь к блоку.

заранее благодарен!
Название: Re: проблема при смене цвта экрана
Отправлено: Алексей Кулик от 14-05-2024, 11:53:01
А кто мешает все внутрь одной функции засунуть?
Название: Re: проблема при смене цвта экрана
Отправлено: altver от 14-05-2024, 12:17:44
а можо показать пример, как Вы имеете ввиду это сделать?
Название: Re: проблема при смене цвта экрана
Отправлено: Алексей Кулик от 14-05-2024, 12:36:32
Примерно так:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun set-bg-color (color / disp)
  2.   ;; Вызов : (set-bg-color 55)
  3.   (vl-load-com)
  4.   (setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
  5.  
  6.   (vla-put-GraphicsWinModelBackgrndColor disp color)
  7.   (command "-insert" "block-1" "_S" 1 pause 0)
  8. )
Название: Re: проблема при смене цвта экрана
Отправлено: altver от 14-05-2024, 14:12:24
Спасибо, Алексей, однако результат тот же: меняется цвет и - сбой,
со вторго раза начинает корректно вставлятсья блок,
когда цвет уже поменян...
Название: Re: проблема при смене цвта экрана
Отправлено: Алексей Кулик от 14-05-2024, 16:23:10
https://adn-cis.org/forum/index.php?topic=11063.msg53154#msg53154 не помогло?
Название: Re: проблема при смене цвта экрана
Отправлено: altver от 14-05-2024, 16:40:32
Так я от туда и взял, если хотите помочь, то напишите свой вариант,
очень хочется сравнить, где же я ошибаюсь.
Ваш предыдущий вариант тоже не работает...

Заранее спасибо!
Название: Re: проблема при смене цвта экрана
Отправлено: Алексей Кулик от 14-05-2024, 17:11:14
Строка (vla-put-GraphicsWinModelBackgrndColor ACADPref (vlax-make-variant 127 19)) как бы намекает, что надо передавать не число, а безопасный массив, мне кажется
Название: Re: проблема при смене цвта экрана
Отправлено: altver от 14-05-2024, 19:19:17
я пробовал в безопасном режме, но ничего не получается

Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:SetBGColor (Color /)  
  2.  (vl-load-com)
  3.  (setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
  4.  
  5.    (setq col (vlax-make-variant color vlax-vbdouble))
  6.   (vla-put-GraphicsWinModelBackgrndColor disp Col)
  7.  
  8.   (command "-insert" "block-1" "_S" 1 pause 0)
  9. )
  10.  
Название: Re: проблема при смене цвта экрана
Отправлено: Александр Ривилис от 15-05-2024, 00:49:44
vlax-vbdouble
???
Название: Re: проблема при смене цвта экрана
Отправлено: altver от 15-05-2024, 10:43:05
что значит ответ "vlax-vbdouble"
Название: Re: проблема при смене цвта экрана
Отправлено: Александр Ривилис от 15-05-2024, 18:21:37
что значит ответ "vlax-vbdouble"
Это я поставил под сомнение тип данных. Судя по примеру из документации он должен быть равен 19. А color в твоем примере - это не индексный цвет, а RGB-цвет в виде целого числа (в примере в документации это было 127, т.е. 127,0,0)
У меня по умолчанию цвет экрана такой:
(https://i.ibb.co/zGv2SLV/clipboard.png)
Т.е. RGB соответствует {33,40,48}. И программа из документации выдает значение 3156001, что соответствует 48*256*256+40*256+33

Название: Re: проблема при смене цвта экрана
Отправлено: altver от 15-05-2024, 19:15:22
Александр, извините, но не понял... :-[
Можно, пожалуйса, получить пример кода,
задача следующая:
заменить цвет экрана на любой другой (black например)
и загрзить блок в чертеж с паузой в конце загрузки:
(command "-insert" "block" "_S" 1 pause 0)
Спасибо!
Название: Re: проблема при смене цвта экрана
Отправлено: Александр Ривилис от 15-05-2024, 19:28:57
Должно быть что-то такое:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:SetBGColor ( / )  
  2.  (vl-load-com)
  3.  (setq disp (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
  4.  
  5.    (setq col (vlax-make-variant 0 19))
  6.   (vla-put-GraphicsWinModelBackgrndColor disp col)
  7.  
  8.   (command "-insert" "block-1" "_S" 1 pause 0)
  9. )
Но я думаю, что всё-равно код прервется - изменение цвета фона должно прерывать lisp-код. Точнее прерывать ввод от пользователя.
Название: Re: проблема при смене цвта экрана
Отправлено: altver от 15-05-2024, 19:43:38
Нет, к сожалению и Ваш код не рабтает...
Жаль...
Странно!
подождем, может у кого-то будет какая-то идея...
Спасибо!