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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как создать вспомогательные линии на отельном слое?

Как создать вспомогательные линии на отельном слое?

Ответ
Поиск в этой теме
Непрочитано 28.09.2012, 13:34 #1
Как создать вспомогательные линии на отельном слое?
Alexg-12
 
МК, ЖБК
 
Киров
Регистрация: 14.09.2012
Сообщений: 33

Вопрос в следующем:
В LISP не проблема перед командой "прямая" включить нужный слой. Но как потом выйти из этой команды, с возвращением предыдущего слоя, ибо я не знаю, как эти команды завершаются. Команда прямая выполняется до тех пор, пока пользователь не нажмет ESC или Enter. Но при этом, управление не возвращается в наш LISP файл и поэтому я не знаю как вернуть предыдущий слой.
Спасибо.
Подобную тему искал - не нашел.
Просмотров: 2727
 
Непрочитано 28.09.2012, 13:52
#2
Кулик Алексей aka kpblc
Moderator

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


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

(defun c:dwg-xline (/ adoc sysvar layer)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq layer  "ИмяСлоя"
        layer  (if (not (vl-catch-all-error-p
                          (vl-catch-all-apply
                            (function
                              (lambda ()
                                (vla-item (vla-get-layers adoc) layer)
                                ) ;_ end of lambda
                              ) ;_ end of function
                            ) ;_ end of vl-catch-all-apply
                          ) ;_ end of vl-catch-all-error-p
                        ) ;_ end of not
                 layer
                 (vla-get-name (vla-add (vla-get-layers adoc) layer))
                 ) ;_ end of if
        sysvar (mapcar
                 (function
                   (lambda (x / tmp)
                     (if (setq tmp (getvar (car x)))
                       (progn
                         (setvar (car x) (cdr x))
                         (cons (car x) tmp)
                         ) ;_ end of progn
                       ) ;_ end of if
                     ) ;_ end of lambda
                   ) ;_ end of function
                 (list (cons "clayer" layer))
                 ) ;_ end of mapcar
        ) ;_ end of setq
  (vl-catch-all-apply
    (function
      (lambda ()
        (command "_.xline")
        (while (/= (getvar "cmdactive") 0) (command pause))
        ) ;_ end of LAMBDA
      ) ;_ end of function
    ) ;_ end of VL-CATCH-ALL-APPLY
  (foreach item sysvar
    (setvar (car item) (cdr item))
    ) ;_ end of foreach
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 04.10.2012, 13:26
#3
Alexg-12

МК, ЖБК
 
Регистрация: 14.09.2012
Киров
Сообщений: 33
<phrase 1=


Спасибо!
Не давно занимаюсь LISP'ом, хотелось бы понять, как работает. Не могли бы вы для расписать подробные комментарии построчно.
Пытался разобраться сам. Не получилось.
В частноси не понятно, как работает следующая конструкция:
(if (not (vl-catch-all-error-p
(vl-catch-all-apply
(function
(lambda ()
(vla-item (vla-get-layers adoc) layer)
) ;_ end of lambda
) ;_ end of function
) ;_ end of vl-catch-all-apply
) ;_ end of vl-catch-all-error-p
) ;_ end of not
layer
(vla-get-name (vla-add (vla-get-layers adoc) layer))
);_ end of if
Дальше пока не разбирался.
Спасибо!
Alexg-12 вне форума  
 
Непрочитано 04.10.2012, 13:47
#4
Дима_

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


Начни отсюда - если останутся вопросы, то, для начала, там и пиши.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 04.10.2012, 14:57
#5
gomer

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


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

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несплошные линии, X-refы и... задача Vova AutoCAD 6 20.04.2018 16:14
Помогите создать тип линии Gribovms AutoCAD 10 05.09.2011 22:20
не скрываются невидимые линии в слое layoute F4RR3LL AutoCAD 1 28.04.2008 22:15
Загрузка типа линии из макроса Кулик Алексей aka kpblc Программирование 4 24.01.2005 14:57
Помогите создать свой тип линии......... red AutoCAD 8 02.06.2004 17:14