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

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

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

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

Как все поля чертежа сразу преобразовать в текст?
Иногда бывает надо.
__________________
Блог
Просмотров: 24324
 
Непрочитано 06.05.2008, 23:26
#21
Кулик Алексей aka kpblc
Moderator

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


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
И посмотри на результат.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.05.2008, 20:44
#22
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,977
Отправить сообщение для 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,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


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
С.-Петербург
Сообщений: 38,702


Это я пропустил...
__________________

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

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


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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Нет мысли как применить ко всему файлу?
Мысль ниже.
*** Добавлено 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,977
Отправить сообщение для 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,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


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
С.-Петербург
Сообщений: 38,702


VVA, у меня несколько раз сравнение по "=" не давало нужный результат. Зато equal прекрасно срабатывал
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.05.2009, 19:25
#31
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Кулик Алексей 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
С.-Петербург
Сообщений: 38,702


Offtop: Да не за что, моей заслуги тут нет.
P.S. "Обжегшись" на сравнении указателей на пространства модели и листа, с тех пор все время сравниваю vla-указатели через equal
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.05.2009, 22:14
#33
Red Nova

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


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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


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


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


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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


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


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


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

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


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

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


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


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


И, действительно, поборол! Спасибо VVA
skkkk на форуме  
Ответ
Вернуться   Форум 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