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

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

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

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

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


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


непонятно о чем ты говоришь
Р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,980
Отправить сообщение для 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
С.-Петербург
Сообщений: 39,844


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


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


Для меня поле чертежа это габариты где я черчу. А в чертеже много чего есть, размеры текст линии. Как тебя понять, ты хочешь все перевести в текст
Р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,980
Отправить сообщение для 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,980
Отправить сообщение для 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
С.-Петербург
Сообщений: 39,844


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

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


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

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


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

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


Значит так. Поля, которые ссылаются на текущий лист, корректно обрабатываться отказываются. А так - пробуй:
Код:
[Выделить все]
(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,980
Отправить сообщение для Red Nova с помощью Skype™


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

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


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

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


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

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,980
Отправить сообщение для 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,095


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

Код:
[Выделить все]
(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,980
Отправить сообщение для Red Nova с помощью Skype™


kp+,
Работает исправно. Нет мысли как применить ко всему файлу?
__________________
Блог
Red Nova вне форума  
Ответ
Вернуться   Форум 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