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

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: BearDyugin от 22-12-2021, 19:51:28

Название: BYLAYER и ByLayer
Отправлено: BearDyugin от 22-12-2021, 19:51:28
В общем вот таким методом получал всегда например список типов линий чертежа
Код - Auto/Visual Lisp [Выбрать]
  1. (vlax-for item  (vla-get-Linetypes
  2.                           (vla-get-activedocument (vlax-get-acad-object))
  3.                         )
  4.            (setq Line_Type_name_list
  5.                   (cons (vla-get-name item)
  6.                         Line_Type_name_list
  7.                   )
  8.            )
  9.          )
Потом находил текущий тип линии
Код - Auto/Visual Lisp [Выбрать]
  1. (setq Line_Type (getvar "CELTYPE"))
  2.  
И находил позицию текущего в общем списке
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-position Line_Type Line_Type_name_list)
И работало это без проблем. А тут пользователь скидывает чертёж где это не работает. Оказалось в базе чертежа записано заглавными BYLAYER BYBLOCK, а (getvar "CELTYPE") возвращает ByLayer и  ByBlock
Я конечно стал теперь текущий брать от туда же как и список всех, и теперь норм.
Код - Auto/Visual Lisp [Выбрать]
  1. (setq Line_Type  (vla-get-name (vla-get-ActiveLinetype acdoc)))
Но вопрос остался, это глюк AutoCAD, или нормальная ситуация?
Название: Re: BYLAYER и ByLayer
Отправлено: Александр Ривилис от 22-12-2021, 20:26:02
Но вопрос остался, это глюк AutoCAD, или нормальная ситуация?
Это нормальная ситуация. Более того очень рекомендую сравнивать наименования (блоков, типов линий, слоев, etc.) приведенные к одному регистру.
Название: Re: BYLAYER и ByLayer
Отправлено: Александр Ривилис от 22-12-2021, 20:49:36
А вот как можно получить вместо ByLayer значение BYLAYER:



А вот произвольное имя так присвоить нельзя.