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

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

Как все поля чертежа сразу преобразовать в текст?

Ответ
Поиск в этой теме
Непрочитано 04.05.2008, 16:05 #1
Как все поля чертежа сразу преобразовать в текст?
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,990

Как все поля чертежа сразу преобразовать в текст?
Иногда бывает надо.
__________________
Блог
Просмотров: 29378
 
Непрочитано 04.05.2008, 16:15
#2
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


непонятно о чем ты говоришь
Рyslan вне форума  
 
Непрочитано 04.05.2008, 16:17
#3
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Через быстрый выбор, а потом взорви их к чертовой бабушке.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Автор темы   Непрочитано 04.05.2008, 16:26
#4
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


DEM, Поправлюсь, там мтексты, жалко портить, и потом в блоках тоже есть.
Рyslan, Поле, это где косят траву, пасут овец, создателей AutoCAD как-то упрекнули, что их них продукция "отрывает людей от матушки природы", вот они и решили добавить поле. Нажал на кнопку и во круг ручейки, травка, солнышко светит.
А если серьезно дай поиск в хелпе на "field".
__________________
Блог
Red Nova вне форума  
 
Непрочитано 04.05.2008, 16:37
#5
Кулик Алексей aka kpblc
Moderator

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


Лисп покатит?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.05.2008, 16:43
#6
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Для меня поле чертежа это габариты где я черчу. А в чертеже много чего есть, размеры текст линии. Как тебя понять, ты хочешь все перевести в текст
Рyslan вне форума  
 
Непрочитано 04.05.2008, 16:55
#7
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Цитата:
Сообщение от Рyslan Посмотреть сообщение
Для меня поле чертежа это габариты где я черчу. А в чертеже много чего есть, размеры текст линии. Как тебя понять, ты хочешь все перевести в текст
Блин корректнее нельзя???
Был уже лиспик который поля и в М-текстах переводил в текстовые значения.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 04.05.2008, 17:05
#8
seilg

Архитектор
 
Регистрация: 19.10.2007
Казахстан
Сообщений: 74
<phrase 1=


http://www.caduser.ru/cgi-bin/f1/board.cgi?t=39228OZ
seilg вне форума  
 
Автор темы   Непрочитано 04.05.2008, 17:53
#9
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


seilg, Спасибо, нашел по ссылке дельный лисп, жаль только блоки и листы сразу не чистит.
Кулик Алексей aka kpblc,
Кстати ты ведь его делал, может можно добавить возможность чистить еще и в блоках и в листах сразу? Типа запустил команду и пурген всем полям.

Код:
[Выделить все]
(defun c:field-out (/ adoc *error* selset)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (if (setq selset (ssget "_:L" '((0 . "TEXT,MTEXT"))))
    (foreach item (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
      (if (member '(102 . "{ACAD_XDICTIONARY") (entget item))
        (progn
          (entmakex (vl-remove-if
                      '(lambda (x) (member (car x) '(-1 5 102 360)))
                      (entget item)
                      ) ;_ end of vl-remove-if
                    ) ;_ end of entmakex
          (entdel item)
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of foreach
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 05.05.2008, 12:07
#10
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Кулик Алексей aka kpblc,
Эх что-то в последнее время ты креатином мало занимаешься. Жаль.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 05.05.2008, 12:14
#11
Кулик Алексей aka kpblc
Moderator

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


Времени мало... Не успеваю Про задачу помню, попробую сегодня (опять же, если успею)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.05.2008, 13:40
#12
Кулик Алексей aka kpblc
Moderator

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


О, кстати, образец кинь для проверки и просмотру
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 05.05.2008, 14:23
#13
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Вот файл. Там есть поля в мтекстах в модели и на листе, а еще в блоке. Надо одной командой все почистить.
Вложения
Тип файла: dwg
DWG 2004
Пример для field purge.dwg (47.9 Кб, 2525 просмотров)
__________________
Блог
Red Nova вне форума  
 
Непрочитано 06.05.2008, 02:25
#14
Кулик Алексей aka kpblc
Moderator

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


Значит так. Поля, которые ссылаются на текущий лист, корректно обрабатываться отказываются. А так - пробуй:
Код:
[Выделить все]
(defun explode-field (/ adoc *error* new_ent prop_lst mask attr_lst)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (setq mask     "VLA-GET-"
        prop_lst (mapcar '(lambda (x) (substr x (1+ (strlen mask))))
                         (vl-remove-if-not
                           '(lambda (x)
                              (and
                                (wcmatch (strcase x) (strcat mask "*"))
                                (not (wcmatch (strcase x) "*TEXTSTRING"))
                                ) ;_ end of and
                              ) ;_ end of lambda
                           (atoms-family 1)
                           ) ;_ end of vl-remove-if-not
                         ) ;_ end of mapcar
        ) ;_ end of setq
  (vlax-for blk_def (vla-get-blocks adoc)
    (vlax-for ent blk_def
      (cond
        ((and (wcmatch (strcase (vla-get-objectname ent)) "*MTEXT")
              (/= (vla-fieldcode ent) (vla-get-textstring ent))
              ) ;_ end of and
         (setq new_ent (vla-addmtext
                         (vla-objectidtoobject
                           adoc
                           (vla-get-ownerid ent)
                           ) ;_ end of vla-ObjectIDToObject
                         (vla-get-insertionpoint ent)
                         (vla-get-width ent)
                         (vla-get-textstring ent)
                         ) ;_ end of vla-AddMText
               ) ;_ end of setq
         )
        ((and (wcmatch (strcase (vla-get-objectname ent)) "*TEXT")
              (/= (vla-fieldcode ent) (vla-get-textstring ent))
              ) ;_ end of and
         (setq new_ent (vla-addtext
                         (vla-objectidtoobject
                           adoc
                           (vla-get-ownerid ent)
                           ) ;_ end of vla-ObjectIDToObject
                         (vla-get-textstring ent)
                         (vla-get-insertionpoint ent)
                         (vla-get-height ent)
                         ) ;_ end of vla-addtext
               ) ;_ end of setq
         )
        ((= (vla-get-objectname ent) "AcDbBlockReference")
         (setq attr_lst
                ((lambda (/ res tmp)
                   (if (>= (vlax-safearray-get-u-bound
                             (setq
                               tmp (vlax-variant-value (vla-getattributes ent))
                               ) ;_ end of setq
                             1
                             ) ;_ end of vlax-safearray-get-u-bound
                           0
                           ) ;_ end of >=
                     (setq res (vlax-safearray->list tmp))
                     ) ;_ end of if
                   (if (>= (vlax-safearray-get-u-bound
                             (setq tmp (vlax-variant-value
                                         (vla-getconstantattributes ent)
                                         ) ;_ end of vlax-variant-value
                                   ) ;_ end of setq
                             1
                             ) ;_ end of vlax-safearray-get-u-bound
                           0
                           ) ;_ end of >=
                     (setq res (append res (vlax-safearray->list tmp)))
                     ) ;_ end of if
                   res
                   ) ;_ end of lambda
                 )
               ) ;_ end of setq
         (foreach attr attr_lst
           (vl-catch-all-apply
             '(lambda ()
                (vla-put-textstring attr (vla-get-textstring attr))
                ) ;_ end of lambda
             ) ;_ end of vl-catch-all-apply
           ) ;_ end of foreach
         (vla-update ent)
         )
        ) ;_ end of cond
      (if new_ent
        (progn
          (foreach prop prop_lst
            (vl-catch-all-apply
              '(lambda ()
                 (vlax-put-property new_ent prop (vlax-get-property ent prop))
                 ) ;_ end of lambda
              ) ;_ end of vl-catch-all-apply
            ) ;_ end of foreach
          (vl-catch-all-apply '(lambda () (vla-erase ent)))
          (setq new_ent nil)
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of vlax-for
    ) ;_ end of vlax-for
  (vla-regen adoc acallviewports)
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.05.2008, 17:11
#15
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Спасибо, но пока лисп не очень корректный.
1. Дин. Блоки содержащие поля в конец портятся. (динамические свойства летят на фиг).
2. Номера листов отобразились не корректно, корректен только лист, на котором ты находишся выполняя команду.
3. Один вертикальный мтекст в с полем развернулся на 90 градусов.
4. В одном дин. блоке у мтекста содержащего поле была маска, она осталась, но почему-то ее размеры увеличились. (border offset factor был 1,2, стал 1,5).
Очень надеюсь что это поправимо, поскольку лисп и в правду очень нужный.
Смотри пример до и после.
Вложения
Тип файла: rar До и после.rar (320.2 Кб, 116 просмотров)
__________________
Блог
Red Nova вне форума  
 
Непрочитано 06.05.2008, 17:20
#16
Кулик Алексей aka kpblc
Moderator

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


Эх, не зря я не хотел связываться с атрибутами...
Суть лиспа такова: создается новый объект "такого же" типа, только у него TextString устанавливается (простая замена работает только на атрибуты, на многострочные тексты практически никогда не срабатывало; на однострочных пару раз отказалось. Возможно, я там в файле накосячил). После создания новому объекту назначаются все возможные свойства исходного.
Файл попробую дома посмотреть, но ничего гарантировать не могу. Поля "со ссылками на лист" лечению лично у меня не поддавались. Может, еще кто подключится?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.05.2008, 17:59
#17
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Цитата:
Эх, не зря я не хотел связываться с атрибутами...
А у меня их и не было. Там мтексты в блоке.
__________________
Блог
Red Nova вне форума  
 
Автор темы   Непрочитано 06.05.2008, 19:40
#18
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Попробую сформулировать одну мысль. Будучи далеким от программирования человеком, заранее прошу прощение за возможную некорректность.
В AutoCAD есть стандартная возможность конвертации поля в текст. Для этого надо правда открыть мтекст, затем найти поле, правый клик, convert fied to text. При этом поля связанные с листом (да и все другие) корректно переводятся в текст.
Предлагаю алгоритм.
Что если с перва найти все мтексты (тексты) в модели, в листах, а так же в блоках, затем в этих мтекстах найти поля, и по очереди применить к ним convert fied to text.
Что-то похожее и с атрибутами можно сделать.
Мысль очень далека от реальных возможностей лисп?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 06.05.2008, 20:39
#19
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,194


Такая вот фиговина у меня работает исправно. Правда, глобальной задачи избавится от полей я не ставил, но в единичных объектах ЛЮБОГО типа, где это действительно надо, работает

Код:
[Выделить все]
(defun c:ftt (/ e s)
  (setq e (vlax-ename->vla-object (car (nentsel))))
  (if (vlax-property-available-p e 'textstring)
    (progn
      (setq s (vla-get-TextString e))
      (vla-put-TextString e ""); установка значений - избавляемся от полей
      (vla-put-TextString e s); установка значений, соответств. вычисленным знач полей, но не содерж управ кода 
    )
  )
)
kp+ вне форума  
 
Автор темы   Непрочитано 06.05.2008, 21:25
#20
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


kp+,
Работает исправно. Нет мысли как применить ко всему файлу?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 06.05.2008, 23:26
#21
Кулик Алексей aka kpblc
Moderator

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


Red Nova, а ты попробуй сделать так: сначала
Код:
[Выделить все]
(setq ent (car (entsel))
и на запрос укажи поле с именем листа. Переход на другой лист и запуск (fft ent). Код функции fft:
Код:
[Выделить все]
(defun fft (e / s)
  (if (and e (setq s (vla-get-textstring (setq e (vlax-ename->vla-object e)))))
    (progn
      (vla-put-textstring e "")
      (vla-put-textstring e s)
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
И посмотри на результат.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.05.2008, 20:44
#22
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Кулик Алексей aka kpblc,
Пока не въехал.
Ты выложил два вложения.
Что сделал я.
-Я сохранил оба как отдельные лиспы, загрузил эти лиспы. Перешел на лист. В ком. строке пишу
(setq ent (car (entsel))
Запроса на выбор объекта не следует. Пробую иначе, методом тыка.
(car (entsel))
Запрос последовал. (Рождается надежда что я пошел по правому пути.)
Выбираю мтекст, перехожу на другой лист, ввожу
(fft ent)
Пользы нету. (Надежда умирает).

Это максимум на что у меня хватило серого вещества. Теперь говори как надо делать.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 08.05.2008, 10:58
#23
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Red Nova, скобку пропустил
(setq ent (car (entsel)))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.05.2008, 11:18
#24
Кулик Алексей aka kpblc
Moderator

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


Это я пропустил...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.05.2008, 19:25
1 | #25
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Cо скобкой результат данной операции дал то, что первое указанное поле номера страницы стало текстом. Но это влияет только на одну страницу. А как быть если листов 30?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 14.05.2009, 11:10
4 | #26
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Нет мысли как применить ко всему файлу?
Мысль ниже.
*** Добавлено 2010-10-29
***Добавлено 2011-01-31
3 Команды:
CFT - конвертирование полей с запросом
CFTALL - конвертирование полей без запроса
***Добавлено 2011-03-09***
CFTSEL - конвертирование полей в выбранных примитивах
***Добавлено 2013-05-23***
Исправлено см. #48 (Стирает содержимое ячейки таблицы, если в данной ячейке присутствует блок)
Дальнейшее развитие см LISP. Подготовка подосновы
Код:
[Выделить все]
 
 
(defun C:CFT ()(ConvField->Text t))
(defun C:CFTAll ()(ConvField->Text nil))
(defun C:CFTSEL( / *error* Doc ss CountField)
   (vl-load-com)  
  (defun *error* (msg)(princ msg)(vla-endundomark doc)(princ))
  (setq Doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark Doc)
  (if (setq ss (ssget "_:L"))
    (progn
      (setq CountField 0)
     (foreach obj (mapcar (function vlax-ename->vla-object)
	            (vl-remove-if (function listp)
		      (mapcar (function cadr) (ssnamex ss))))
       (setq CountField (ClearField Obj CountField))
       )
      (princ "\nConverting Field in ")(princ CountField)
      (princ " text's")
      )
    )
(vla-endundomark Doc)
(command "_.Regenall")  
  )
(defun ClearField ( Obj CountField / txtstr att )
  (cond
        ((and (vlax-write-enabled-p Obj)
		 (= (vla-get-ObjectName obj) "AcDbBlockReference")
		 (= (vla-get-HasAttributes obj) :vlax-true)
	    ) ;_ end of and
	  (foreach att 	(append (vlax-invoke obj 'Getattributes)
                                (vlax-invoke obj 'Getconstantattributes)
                                )
            (setq txtstr (vla-get-Textstring att))
	    (vla-put-Textstring att "")
	    (vla-put-Textstring att txtstr)
	    (setq CountField (1+ CountField))
	  ) ;_ end of foreach
	)
	((and (vlax-write-enabled-p Obj)
		 (vlax-property-available-p Obj 'TextString)
	    ) ;_ end of and
	    (setq txtstr (vla-get-Textstring Obj))
	    (vla-put-Textstring Obj "")
	    (vla-put-Textstring Obj txtstr)
	    (setq CountField (1+ CountField))
	)
        ((and (vlax-write-enabled-p Obj) ;_Table
              (eq (vla-get-ObjectName Obj) "AcDbTable")
              )
         (and (vlax-property-available-p Obj 'RegenerateTableSuppressed)
                (vla-put-RegenerateTableSuppressed Obj :vlax-true)
              )
         (VL-CATCH-ALL-APPLY 
         '(lambda (col row / i j)
            (setq i '-1)
            (repeat col
              (setq i (1+ i) j '-1)
              (repeat row
                (setq j (1+ j))
                (if (= (vla-GetCellType Obj j i) acTextCell)
                  (vla-SetText Obj j i (vla-GetText Obj j i))
                  )
                (setq CountField (1+ CountField))
                )
              )
            )
         (list
           (vla-get-Columns Obj)
           (vla-get-Rows Obj)
           )
           )
         (and (vlax-property-available-p Obj 'RegenerateTableSuppressed)
                (vla-put-RegenerateTableSuppressed Obj :vlax-false)
              )
         )
        (t nil)
        )
  CountField
  )
(defun ConvField->Text ( Ask / Doc *error* ClearFieldInAllObjects
	      )
;;; t - Ask user nil - convert
;;; Как все поля чертежа сразу преобразовать в текст?
;;; Convert Field to Text
;;; Posted Vladimir Azarko (VVA)
;;; http://forum.dwg.ru/showthread.php?t=20190&page=2
;;; http://forum.dwg.ru/showthread.php?t=20190
  (vl-load-com)  
  (defun *error* (msg)(princ msg)
   (mip:layer-status-restore)
   (vla-endundomark doc)(princ)
  )
 (defun loc:msg-yes-no ( title message / WScript ret)
(setq WScript (vlax-get-or-create-object "WScript.Shell"))
(setq ret (vlax-invoke-method WScript "Popup" message "0" title (+ 4 48)))
(vlax-release-object WScript)
(= ret 6)  
)

(defun ClearFieldInAllObjects (Doc / txtstr tmp txt count CountField)
  (setq  CountField 0)  
  (vlax-for Blk	(vla-get-Blocks Doc)
    (if	(equal (vla-get-IsXref Blk) :vlax-false) ;;;kpbIc http://forum.dwg.ru/showpost.php?p=396910&postcount=30
      (progn
	(setq count 0
	      txt (strcat "Changed " (vla-get-name Blk))
	      )
	(grtext -1 txt)
;;;        (terpri)(princ "=================== ")(princ txt)
      (if (not (wcmatch (vla-get-name Blk) "`*T*")) ;_exclude table
      (vlax-for	Obj Blk
	(setq count (1+ count))
	(if (zerop(rem count 10))(grtext -1 (strcat txt " : " (itoa count))))
        (setq CountField (ClearField Obj CountField))
      ) ;_ end of vlax-for
        )
      )
    ) ;_ end of if
  ) ;_ end of vlax-for
 (vl-cmdf "_redrawall")
 CountField 
)
(setq Doc (vla-get-activedocument (vlax-get-acad-object)))
(mip:layer-status-save)(vla-startundomark Doc)
 (if (or (not Ask )
	 (if (= (getvar "DWGCODEPAGE") "ANSI_1251")
	   (loc:msg-yes-no "Внимание"
	     "Все поля будут преобразованы в текст !!!\nПродолжить?"
	     )
	   (loc:msg-yes-no "Attension"
	     "All fields will be transformed to the text!!!\nto Continue?"
	     )
	   )
	 )
 (progn
   (princ "\nConverting Field in ")
   (princ (ClearFieldInAllObjects Doc))
   (princ " text's")
   )
   (princ)
 )
(mip:layer-status-restore)(vla-endundomark Doc)
(command "_.Regenall")  
(princ)
)

(defun mip:layer-status-restore	()
  (foreach item	*MIP_LAYER_LST*
    (if	(not (vlax-erased-p (car item)))
      (vl-catch-all-apply
	'(lambda ()
	   (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
	   (vla-put-freeze
	     (car item)
	     (cdr (assoc "freeze" (cdr item)))
	   ) ;_ end of vla-put-freeze
	 ) ;_ end of lambda
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of if
  ) ;_ end of foreach
  (setq *MIP_LAYER_LST* nil)
) ;_ end of defun
(defun mip:layer-status-save ()
  (setq *MIP_LAYER_LST* nil)
  (vlax-for item (vla-get-layers
		   (vla-get-activedocument (vlax-get-acad-object))
		 ) ;_ end of vla-get-layers
    (setq *MIP_LAYER_LST*
	   (cons (list item
		       (cons "freeze" (vla-get-freeze item))
		       (cons "lock" (vla-get-lock item))
		 ) ;_ end of cons
		 *MIP_LAYER_LST*
	   ) ;_ end of cons
    ) ;_ end of setq
    (vla-put-lock item :vlax-false)
    (if	(= (vla-get-freeze item) :vlax-true)
      (vl-catch-all-apply
	'(lambda () (vla-put-freeze item :vlax-false))
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of if
  ) ;_ end of vlax-for
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 08.08.2013 в 21:45. Причина: Исправлена ошибка поста #43
VVA вне форума  
 
Непрочитано 15.05.2009, 00:21
#27
Largo GT

Архитектор
 
Регистрация: 11.03.2009
Новороссийск
Сообщений: 99


Спасибо Владимир ! Вы как всегда на высоте, это больше чем я хотел
Largo GT вне форума  
 
Автор темы   Непрочитано 17.05.2009, 12:33
#28
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


VVA,
Класс,
Вот тока лисп пытается и Xref обработать, в результате возникают баги, Xref просто пропадает ...
А можно сделать так чтобы и Xref сразу корректно обрабатывался (типа edit Xref in place)?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 17.05.2009, 15:10
#29
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Red Nova, Вообще-то не должен xref обрабатывать
Цитата:
(defun ClearFieldInAllObjects (Doc / txtstr tmp txt count CountField)
(vlax-for Blk (vla-get-Blocks Doc)
(if (= (vla-get-IsXref Blk) :vlax-false)
На работе проверю еще раз
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.05.2009, 17:53
#30
Кулик Алексей aka kpblc
Moderator

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


VVA, у меня несколько раз сравнение по "=" не давало нужный результат. Зато equal прекрасно срабатывал
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.05.2009, 19:25
#31
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Кулик Алексей aka kpblc, Спасибо, Алексей. Изменил в #26 = на equal плюс добавил диалог предупреждения.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.05.2009, 19:51
#32
Кулик Алексей aka kpblc
Moderator

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


Offtop: Да не за что, моей заслуги тут нет.
P.S. "Обжегшись" на сравнении указателей на пространства модели и листа, с тех пор все время сравниваю vla-указатели через equal
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.05.2009, 22:14
#33
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


VVA,
Это к стати не первая моя тема в которой решение находится более чем год спустя с последнего сообщения . Приятно что не я один про эти темы помню.
Спасибо, теперь все работает правильно.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 21.05.2009, 10:33
#34
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Red Nova, Обещанного сам знаешь сколько ждут. Так что пока в эти сроки укладываемся
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.10.2010, 19:59
#35
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


к #26: текст, преобразованный из поля в ячейках таблиц ведет себя странновато... При попытке редактировать ячейку исчезает
Добавлено: еще начинает перескакивать из ячейки в ячейку по неясному алгоритму... Неадекватная становится таблица
skkkk вне форума  
 
Непрочитано 28.10.2010, 15:03
#36
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


skkkk, пример в студию
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 29.10.2010, 01:47
#37
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Не вопрос
В приложенном файле поля в спецификации (объект Table) ссылаются на объекты из исходных данных. Обрабатываю файл командой CFT. Все поля преобразовываются в текст (что хорошо). Далее двойной клик по ячейке, где ранее было поле открывает пустой редактор, т.е. не содержащий начертанные в ячейке символы, словно бы я кликнул по пустой ячейке. При Esc все возвращается на места, но при попытке сохранить изменения, допустим посредством клика по другой ячейке происходят чудеса....как-то: заполнение текущего столбца таблицы данными из левого соседнего столбца (при том не всех, а некоторых), или исчезновение содержимого некоторых ячеек с бывшими филдами(полями). Ячейки же, в которых полей не было, ведут себя привычно.
Вложения
Тип файла: dwg
DWG 2007
Чертеж1.dwg (145.3 Кб, 2513 просмотров)
skkkk вне форума  
 
Непрочитано 31.01.2011, 13:59
#38
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


skkkk, Обещанного 3 года ждут. Вроде поборол этот глюк. Код в #26
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 31.01.2011, 14:44
#39
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Offtop: Ежегодное обновление
Red Nova вне форума  
 
Непрочитано 02.02.2011, 16:21
#40
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


И, действительно, поборол! Спасибо VVA
skkkk вне форума  
 
Непрочитано 07.03.2011, 18:15
#41
DimAS]/[K

конструктор
 
Регистрация: 11.11.2006
Находка
Сообщений: 99
Отправить сообщение для DimAS]/[K с помощью Skype™


осталось теперь только добавить третью команду - конвертирование отдельных таблиц или текстов, и тогда вообще было бы идеально! Или такое решение уже есть и я туплю? Во всяком случае было бы хорошо иметь все в одном лисп-файле.
Спасибо за программку
DimAS]/[K вне форума  
 
Непрочитано 09.03.2011, 17:05
#42
DimAS]/[K

конструктор
 
Регистрация: 11.11.2006
Находка
Сообщений: 99
Отправить сообщение для DimAS]/[K с помощью Skype™


решение по конвертации полей в текст отдельных текстов или атрибутов есть http://dwg.ru/dnl/1932. Но к сожалению там оочень не хватает таблиц.
DimAS]/[K вне форума  
 
Непрочитано 09.03.2011, 17:42
#43
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от DimAS/K Посмотреть сообщение
конвертирование отдельных таблиц или текстов
Обновил #26
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 10.03.2011, 02:59
#44
DimAS]/[K

конструктор
 
Регистрация: 11.11.2006
Находка
Сообщений: 99
Отправить сообщение для DimAS]/[K с помощью Skype™


все работает, спасибо огромное!
DimAS]/[K вне форума  
 
Непрочитано 02.10.2012, 09:46
#45
Nata1

Инженер
 
Регистрация: 10.11.2008
Владимирская обл., пос. Вольгинский
Сообщений: 147


Вчера сделала кнопку на команду CFTSEL из лиспа VVA пост 26, а сегодня поля в таблице не желают преобразовываться в текст. Раньше все прекрасно работало и при выделении таблицы поля в ней превращались в текст, таблица при этом оставалась таблицей. В чем может быть причина сбоя?
Вложения
Тип файла: dwg
DWG 2007
Копия_ТехЭтаж.dwg (119.0 Кб, 2354 просмотров)
__________________
AutoCAD 2014
Nata1 вне форума  
 
Непрочитано 02.10.2012, 10:25
#46
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 825


Nata1, У меня также на вашей таблице не сработал лисп. На своей таблице все в порядке. Первый раз столкнулся. Тут наврное только VVA подскажет.
Astartes вне форума  
 
Непрочитано 02.10.2012, 11:39
#47
Nata1

Инженер
 
Регистрация: 10.11.2008
Владимирская обл., пос. Вольгинский
Сообщений: 147


А в этом чертеже команда CFTSEL работает. Странно. Что же такое с предыдущей таблицей или чертежом случилось? VVA, форумчане, помогите, пожалуйста. Очень хочется, чтобы команда работала.

**********
Итак, я поняла, почему у меня не получалось.
Чтобы команда CFTSEL превращала поля в текст, надо, чтобы ВСЕ ячейки таблицы, включая заголовок и название, были разблокированы.
Вложения
Тип файла: dwg
DWG 2007
Копия_1Этаж.dwg (132.9 Кб, 2292 просмотров)
__________________
AutoCAD 2014

Последний раз редактировалось Nata1, 02.10.2012 в 15:14.
Nata1 вне форума  
 
Непрочитано 08.01.2013, 16:52
#48
adu

инженер систем безопасности
 
Регистрация: 07.10.2011
Сообщений: 33
<phrase 1=


День добрый!
Заметил баг в программе.
Стирает содержимое ячейки таблицы, если в данной ячейке присутствует блок, а не текст.
Нельзя ли подправить, если есть возможность?
adu вне форума  
 
Непрочитано 10.01.2013, 19:58
#49
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


adu, Пример выложи
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 11.01.2013, 09:32
#50
adu

инженер систем безопасности
 
Регистрация: 07.10.2011
Сообщений: 33
<phrase 1=


Выкладываю пример. Попробуй применить команду к данной таблице.
Вложения
Тип файла: dwg
DWG 2007
Example.dwg (126.3 Кб, 2102 просмотров)
adu вне форума  
 
Непрочитано 23.05.2013, 20:12
1 | #51
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


adu, Обновил #26
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.05.2013, 05:51
#52
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 825


VVA, Подправленный лисп перестал поля в таблицах преобразовывать в текст. Предыдущая версия нормально преобразовывала.
Во вложении таблица с полями. Попробуйте старой версией и новой.
Вложения
Тип файла: dwg
DWG 2010
Таблица.dwg (199.1 Кб, 1818 просмотров)
__________________
AutoCad 2011 -> AutoCad 2013 -> AutoCad 2016 -> AutoCad 2011 -> AutoCad 2022
Astartes вне форума  
 
Непрочитано 24.05.2013, 09:23
#53
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Astartes, Был глюк, исправил #26. Тестируй
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 24.05.2013 в 09:29.
VVA вне форума  
 
Непрочитано 24.05.2013, 10:05
#54
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 825


VVA, Спасибо, работает.
__________________
AutoCad 2011 -> AutoCad 2013 -> AutoCad 2016 -> AutoCad 2011 -> AutoCad 2022
Astartes вне форума  
 
Непрочитано 24.05.2013, 10:35
#55
adu

инженер систем безопасности
 
Регистрация: 07.10.2011
Сообщений: 33
<phrase 1=


Благодарю VVA, всё прекрасно работает.
adu вне форума  
 
Непрочитано 22.10.2013, 10:36
#56
pan

добрый человек
 
Регистрация: 23.02.2004
Глушь
Сообщений: 971


VVA, Спасибо!
Небольшое замечание.
В строках 18-19 и 137-139 из #26 видимо, подсчет идет не только полей, но и всех текстовых объектов, попавших в выбор.
__________________
Правильно сформулированный вопрос содержит 90% ответа.
pan вне форума  
 
Автор темы   Непрочитано 22.01.2014, 12:23
#57
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Давно не пользовался лиспом. Откопал но к сожалению понял что с созданными мною армянскими шрифтами не работает, символы превращаются в вопросы. Прикрепил файл пример. Шрифт можно скачать тут.
Вложения
Тип файла: dwg
DWG 2010
sample.dwg (133.6 Кб, 1345 просмотров)
Red Nova вне форума  
 
Непрочитано 22.01.2014, 14:27
#58
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Red Nova, здесь, начиная с #13. Оно?
skkkk вне форума  
 
Непрочитано 22.01.2014, 19:18
#59
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Red Nova, Если не поможет вариант, предложенный skkkk то попробуй команды
из BGTOOLS
Цитата:
BGCFT - Конвертирует все поля в обычный текст
BGCFTSEL - конвертирование полей в обычный текст в выбранных примитивах
Принципиальное отличие от приведенного здесь кода описано в истории изменений за номером 2.13
Цитата:
;;; 2.13 - Добавлена функция BG:GET-TEXTSTRING (как замена vla-get-textstring. Т.к. неверно возвращает строку при наличии юникод символов)
Я не проверял, но на 90% думаю что это оно
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 23.01.2014, 09:47
#60
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Спасибо за ответы.
skkkk Поменял региональные настройки на Армению. Рестартнул. Не помогло.
VVA BGTOOLS работает корректно
Такая же история с вопросами у меня с VRCTN и VRCTS (отсюда).
Возможно ли там также изменить?
Red Nova вне форума  
 
Непрочитано 23.01.2014, 19:28
#61
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Red Nova Посмотреть сообщение
Возможно ли там также изменить?
А почему нет?
Обновил, проверь на Армении
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 24.01.2014, 09:37
#62
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Армения дает добро. Спасибо.
Red Nova вне форума  
 
Непрочитано 18.07.2023, 09:29
#63
Serafym


 
Регистрация: 14.03.2020
Сообщений: 39


апну тему, для того чтобы лисп https://forum.dwg.ru/showpost.php?p=395488&postcount=26 заработал в свежих версиях автокад в начало нужно добавить строку (vl-load-com), для гуру это конечно и так очевидно но для ламмеров вроде меня...
Serafym вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как все поля чертежа сразу преобразовать в текст?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текст из autocad в Word в текущее положение курсора. Как? _Andre_ Программирование 31 18.06.2016 15:56
Как в AUTOCAD2008 распечатать все листы сразу Vavan Metallist AutoCAD 2 11.03.2008 10:34
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46