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

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: altver от 25-04-2023, 18:44:08

Название: Лишний элемент при построении.
Отправлено: altver от 25-04-2023, 18:44:08
Добрый день, господа!
Приложенный лисп копирует элементы, однако, чтоб закончить цикл, при  нажатии ENTER рождается дополнительный элемент!
Почему?
Руками ведь так не работает команда COPY...
при нажатии ENTER команда прсто заканчиваеся.
Заранее спасибо за помощь!


Код - Auto/Visual Lisp [Выбрать]
  1.                                           (defun Proba ( / )
  2.                                          
  3.                                           (progn
  4.                                              
  5.                                               (setq BL (car (entsel)))
  6.                                               (setq ptc (cdr (assoc 10 (entget BL))))
  7.                                                    
  8.                                               (setq ptcOld 1)
  9.                                               (setq Var 0)
  10.                                               (while (= Var 0)
  11.                                                 ( command-s "copy" BL "" PtC pause "")
  12.                                          
  13.                                                 (setq PtCOld (getvar "LastPoint"))
  14.                                                
  15.                                                 (if (equal ptC ptCold)
  16.                                                    
  17.                                                   (setq Var 1)
  18.                                                 )  
  19.                                                 (setq ptC ptCOld)
  20.                                               )
  21.                                        
  22.                                    )
  23.                                    
  24.                                 ) ;end def proba
  25.                                  
  26.                                 (proba)
Название: Re: Лишний элемент при построении.
Отправлено: Александр Ривилис от 25-04-2023, 23:25:41
при  нажатии ENTER рождается дополнительный элемент!
Нажимай ESC.
Название: Re: Лишний элемент при построении.
Отправлено: altver от 26-04-2023, 14:02:35
Спасибо!
С ESC тоже есть проблемка. ЭТо будет след. вопрос!
Однако, руками ведь ENTER работает корректно.
Я много лет в автокде и давно привык заканчивть команду ентером.
Может есть ошибка в моем коде?
Название: Re: Лишний элемент при построении.
Отправлено: Александр Ривилис от 26-04-2023, 14:22:46
Однако, руками ведь ENTER работает корректно.
В этом случае используется другая версия команды _COPY
Название: Re: Лишний элемент при построении.
Отправлено: altver от 26-04-2023, 14:53:43
т.е. ошибки нет, так это работает в лиспе?
странно!
Название: Re: Лишний элемент при построении.
Отправлено: Александр Ривилис от 26-04-2023, 15:14:42
altver,
Можешь попробовать запуск InitCommandVersion с различными значениями перед запуском команды: http://docs.autodesk.com/ACD/2011/ENU/filesALR/WS1a9193826455f5ff1dbc298511635bea8755893.htm
Название: Re: Лишний элемент при построении.
Отправлено: altver от 26-04-2023, 20:20:00
Александр, спасибо за помощь, однако ничего у меня не получается,
а можно ли это продемонтрировать на моем примере?
Еще раз спасибо!
Название: Re: Лишний элемент при построении.
Отправлено: Александр Ривилис от 26-04-2023, 20:34:26
а можно ли это продемонтрировать на моем примере?
Нет. Мне вообще твой код не нравится. Функцию (command-s) можно использовать только если все параметры заранее определены и pause в нем использовать нельзя. В твоём случае правильнее использовать (command) или (vl-cmdf). И вообще зачем весь этот цикл, если есть _COPY _Mult
Название: Re: Лишний элемент при построении.
Отправлено: altver от 27-04-2023, 10:41:36
но в соманде COPYM невозможно задать расстяние между элементами
или я здесь что то не понимаю...
Название: Re: Лишний элемент при построении.
Отправлено: Алексей Кулик от 28-04-2023, 23:42:54
Если известно и расстояние, и направление копирования, то на фига использовать командные методы?
Название: Re: Лишний элемент при построении.
Отправлено: altver от 30-04-2023, 14:59:46
На фига???
Не просто так ведь спросил из "нечегоделать"!
Я показал только часть программы...
Если есть ответ, то с удовольствим приму.
Спасибо!
Название: Re: Лишний элемент при построении.
Отправлено: Алексей Кулик от 30-04-2023, 18:25:29
vla-copy в руки и вперед - если известно направление и расстояние. Я ж не просто так указал эти условия.
Название: Re: Лишний элемент при построении.
Отправлено: Александр Ривилис от 30-04-2023, 21:51:47
altver,
В твоём коде возникает лишний элемент потому, что ты пытаешься организовать выход из цикла по проверке на равенство LASTPOINT и последней заданной точки. Скорее всего это сравнение не срабатывает сразу. Попробуй такой фокус. Перед запуском _COPY установи системную переменную LASTPOINT в '(-1e32 -1e32 -1e32) (можно и другое значение, но такое чтобы оно никогда не могло встретиться в реальной жизни):
Код - Auto/Visual Lisp [Выбрать]
  1. (setvar "LASTPOINT" '(-1e32 -1e32 -1e32))
а после выполнения _COPY проверяй измениться ли его значение:
Код - Auto/Visual Lisp [Выбрать]
  1. (equal (getvar "LASTPOINT") '(-1e32 -1e32 -1e32))
Название: Re: Лишний элемент при построении.
Отправлено: altver от 02-05-2023, 20:33:44
ОТЛИЧНО!
СПАСИБО!
Название: Re: Лишний элемент при построении.
Отправлено: Александр Ривилис от 03-05-2023, 13:31:03
altver,
Помогло?