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

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: BearDyugin от 03-12-2016, 14:10:12

Название: Задать аннотативнось объекту
Отправлено: BearDyugin от 03-12-2016, 14:10:12
Всем привет,
Есть у Алексея статья http://autolisp.ru/2011/03/17/howto-create-annotative-style-or-block/
там два исходника по добавлению и удалению аннотативности. Успешно пользовался ими долгое время, но вот на 2017 AutoCAD случилось странное...
Создаю Мтекст, добавляю к нему аннотативность, и... объект есть а в чертеже его нет :-( Гадал, гадал, нашёл через поиск содержимого текста, и оказалось что аннотатвиность -да, а список масштабов аннотации пуст, потому то текст есть но не отображается.
Как это победить?
В коменнтах на AutoLisp.ru писать не стал, прошлые мои комменты остались без ответа.
Название: Re: Задать аннотативнось объекту
Отправлено: Александр Ривилис от 03-12-2016, 14:24:14
список масштабов аннотации пуст
Пуст у чертежа или у текста?
Название: Re: Задать аннотативнось объекту
Отправлено: BearDyugin от 03-12-2016, 15:38:38
список масштабов аннотации пуст
Пуст у чертежа или у текста?
У текста
Название: Re: Задать аннотативнось объекту
Отправлено: BearDyugin от 03-12-2016, 15:47:37
Я уже не знаю, проверил в 2016 англицком та же ситуация
Название: Re: Задать аннотативнось объекту
Отправлено: Александр Ривилис от 03-12-2016, 16:43:12
Давай код, которым ты делаешь текст аннотативным.
Название: Re: Задать аннотативнось объекту
Отправлено: BearDyugin от 03-12-2016, 17:01:36
Код - Auto/Visual Lisp [Выбрать]
  1. (defun c:test (/ _lispru-ent-make-annotative)
  2.   (defun _lispru-ent-make-annotative (ent / res)
  3.     (if
  4.       (and (> (atof (getvar "acadver")) 17.)
  5.            (not
  6.              (assoc "AcadAnnotative"
  7.                     (cdr (assoc -3 (entget ent '("*"))))
  8.              )
  9.            )
  10.       )
  11.        (progn
  12.          (regapp "AcadAnnotative")
  13.          (setq
  14.            res (entmod
  15.                  (list (cons -1 ent)
  16.                        '(-3
  17.                          ("AcadAnnotative"
  18.                           (1000 . "AnnotativeData")
  19.                           (1002 . "{")
  20.                           (1070 . 1)
  21.                           (1070 . 1)
  22.                           (1002 . "}")
  23.                          )
  24.                         )
  25.                  )
  26.                )
  27.          )
  28.        )
  29.     )
  30.   )
  31.  
  32.   (_lispru-ent-make-annotative (setq ent (car (entsel))))
  33. )
выбираю однострочный не аннотативный текст
Название: Re: Задать аннотативнось объекту
Отправлено: Александр Ривилис от 03-12-2016, 17:22:20
Похоже, что средствами только VisualLisp ты не сможешь сделать ТЕКСТ/МТЕКСТ аннотативным. Глянь это видео:

В нём хорошо видно, что кроме XDATA еще необходимо создать Extended Dictionary с очень специфическим содержимым.
Название: Re: Задать аннотативнось объекту
Отправлено: BearDyugin от 03-12-2016, 17:41:32
Похоже, что средствами только VisualLisp ты не сможешь сделать ТЕКСТ/МТЕКСТ аннотативным.
Но ведь это точно работало в 2016 русском AutoCAD, и Алексей это придумал уже давно и тоже похоже где-то успешно применяет...
Ещё нашёл командный метод
Код - Auto/Visual Lisp [Выбрать]
  1. (command "_chprop" (car (entsel)) "" "_A" "_Yes" "")
вроде работает
Название: Re: Задать аннотативнось объекту
Отправлено: Александр Ривилис от 03-12-2016, 17:49:26
Ещё нашёл командный метод
Код - Auto/Visual Lisp [Выбрать]

    (command "_chprop" (car (entsel)) "" "_A" "_Yes" "")

вроде работает
Этот - да. А вот создание XDATA по образцу и подобию аннотативного объекта - нет. Т.е. возможно в какой-то ситуации и работает, но есть куча сообщений на форумах, в которых говорится, что этот способ не работает - исчезают тексты. 
Название: Re: Задать аннотативнось объекту
Отправлено: BearDyugin от 03-12-2016, 17:52:44
А вот создание XDATA по образцу и подобию аннотативного объекта - нет.
Т.е. к списку масштабов аннотации объекта из Lisp ни как не добраться, чтоб туда добавить текущий масштаб, и тогда бы объект "появился"
Название: Re: Задать аннотативнось объекту
Отправлено: Александр Ривилис от 03-12-2016, 18:14:44
Т.е. к списку масштабов аннотации объекта из Lisp ни как не добраться, чтоб туда добавить текущий масштаб, и тогда бы объект "появился"
Добраться можно, чтобы прочитать его содержимое. А вот изменить я думаю будет слишком сложно (если вообще возможно, и не уверен, что это будет работать во всех версиях).
Кстати, командой можно добавить к аннотативному объекту новый масштаб аннотации. Команда _-OBJECTSCALE. Но объект уже должен быть аннотативным.
Название: Re: Задать аннотативнось объекту
Отправлено: Алексей Кулик от 04-12-2016, 18:23:22
М-да, косяаааак... Теоретически можно поставить (временно, конечно!) annoautoscale равным 4, потом назначить аннотативность, потом программно поменять cannoscale, установить аннотативность объекту и вернуть системные переменные обратно. Но, по-моему, это костыль тот еще :(
Попробую сегодня вечером - вдруг что-то да срастется.
Название: Re: Задать аннотативнось объекту
Отправлено: BearDyugin от 28-01-2018, 05:01:44
Попробую сегодня вечером - вдруг что-то да срастется.
Прошло чуть больше года... Не появилось ни какого решения?

Похоже, что средствами только VisualLisp ты не сможешь сделать ТЕКСТ/МТЕКСТ аннотативным
Я так подозреваю с помощью ObjectARX это сделать не особо сложно? Но это опять будет пятьсот тридцать два файла под каждую версию\разрядность AutoCAD... А если на NET?
Название: Re: Задать аннотативнось объекту
Отправлено: Алексей Кулик от 28-01-2018, 16:44:25
К сожалению, я совсем забросил работу с аннотативными объектами. Сейчас не до нее :( Приношу свои самые искренние извинения :(
Название: Re: Задать аннотативнось объекту
Отправлено: BearDyugin от 28-01-2018, 16:49:12
К сожалению, я совсем забросил работу с аннотативными объектами.
Это не перспективное направление? Нам тоже можно забрасывать?
Название: Re: Задать аннотативнось объекту
Отправлено: Алексей Кулик от 28-01-2018, 19:22:14
Я этого не говорил :) Просто ни мне, ни пользователям пока это не надо. ПОнадобится - буду разбираться снова ))
Название: Re: Задать аннотативнось объекту
Отправлено: Александр Ривилис от 28-01-2018, 19:52:36
Но это опять будет пятьсот тридцать два файла под каждую версию\разрядность AutoCAD... А если на NET?
Не нравится - не ешь. На .NET возможно будет немного меньше файлов. Если уже использовал .NET, то можешь добавлять в него новые команды и функции - зачем плодить еще файлы?
Название: Re: Задать аннотативнось объекту
Отправлено: Александр Ривилис от 05-02-2018, 17:13:55
На всякий случай:  Как сделать объекты AutoCAD аннотативными в .NET (http://adn-cis.org/kak-sdelat-obektyi-autocad-annotativnyimi-v-.net.html)