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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > извлечение и замена данных поля (field)

извлечение и замена данных поля (field)

Ответ
Поиск в этой теме
Непрочитано 04.05.2009, 13:36
извлечение и замена данных поля (field)
Composter
 
Отопление и вентиляция
 
Москва
Регистрация: 31.10.2008
Сообщений: 445

(entget(cdr(assoc 360(entget(cdr(assoc 360(entget(cdr(assoc
360(entget(cdr(assoc 360 (entget(car(entsel)))))))))))))))
таким образом можно докопаться до сущности поля.а как как поменять объект? вроде со значением объекта связаны 331 и 330. пытюсь их поменять ничего не выходит.хочу туда подставить значание имени активного листа.и еще вопрос если я нахожусь в пространстве создания блока а поле находится в атрибуте блока, то как к нему можно добраться?
Просмотров: 11138
 
Непрочитано 17.08.2011, 12:21
#21
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 425
<phrase 1=


Чтобы обновилось поле в чертеж2.dwg надо создать еще один атрибут и сделать ссылку на первый атрибут (с "П-2"). Можно ссылку сделать прямо в блоке, должно сработать. Хотя бывает что не работает. Тогда ссылку на атрибут (с "П-2") надо сделать уже не в редакторе блока.
Alexeipost вне форума  
 
Непрочитано 17.08.2011, 13:54
#22
Кулик Алексей aka kpblc
Moderator

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


Alexeipost, посмотри на раздел, в котором тема находится.
Решение, я так подозреваю, необходимо программное.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.08.2011, 15:24
#23
Alexeipost


 
Регистрация: 07.12.2010
Уфа
Сообщений: 425
<phrase 1=


Ну так-то я на вопрос отвечал. А если Wolkodaw темой ошибся (в файле "Чертеж2.dwg" я не нашел никаких программных изысков), то я же не виноват. Я хотел помочь.
Alexeipost вне форума  
 
Непрочитано 17.08.2011, 21:29
#24
Кулик Алексей aka kpblc
Moderator

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


В чертеже и не может быть никаких программных изысков. Человек показывает, что у него есть и что должно получиться. Вот и все.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.08.2011, 08:38
#25
Wolkodaw


 
Регистрация: 21.04.2009
Тюмень
Сообщений: 97


Цитата:
Сообщение от Alexeipost Посмотреть сообщение
Чтобы обновилось поле в чертеж2.dwg надо создать еще один атрибут и сделать ссылку на первый атрибут (с "П-2"). Можно ссылку сделать прямо в блоке, должно сработать. Хотя бывает что не работает. Тогда ссылку на атрибут (с "П-2") надо сделать уже не в редакторе блока.
То есть вместо "поля" поставить "второй (новый) атрибут"? С полем не получится?
Wolkodaw вне форума  
 
Непрочитано 18.08.2011, 12:09
#26
VVA

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


Wolkodaw, Я твой пример не смотрел. Ответ на вопрос №13 тебе на поможет?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 18.08.2011, 12:50
#27
Wolkodaw


 
Регистрация: 21.04.2009
Тюмень
Сообщений: 97


нет. Ладно, спасибо, не очень удобно, но сделаю втрибутом.
Wolkodaw вне форума  
 
Непрочитано 05.07.2012, 13:37
#28
Astartes

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


VVA, А можно доработать лисп из №13, чтобы они понимал мультивыноски. Т.е. из мультивыноски значение можно вставить в текст или мтекст. А вот из текста или мтекста, в мультивыноску не работате. Из мультивыноски в мультивыноску тоже не работает.
Astartes вне форума  
 
Непрочитано 05.07.2012, 19:16
#29
VVA

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


Напомни после 14 гляну. Я сейчас в отпуске
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 11.07.2012, 22:50
#30
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


Код:
[Выделить все]
 (vl-load-com)
(defun c:ktz-paste-field (
		      /
                          ns
		      ent-from
		      ent-to
		      ename-get
		      fl		; флаг правильно выбранного объекта
		      tmp
		      str
		      ID
			  doc
			  es
		      
			  )

  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark doc)
  
  (acet-error-init
    (list (list "cmdecho" 0
		"highlight" (getvar "highlight")
		"limcheck" 0
		"osmode" 0
		);list
	  T
	  );list
    );acet-error-init
  

  
  
  (while (not fl)
    (setq ns (nentsel "\n Укажите источник данных ... :"))
      (if ns
          (progn
              (setq ent-from (car ns)
                    tmp (cdr (assoc 0 (entget ent-from)))
                    );setq
	    
              (if (member tmp '("TEXT" "ATTRIB" "MTEXT" "DIMENSION" "MULTILEADER"))
                  ;then
                  (setq fl T)
                  ;else

                  (princ "\n *** Не найден источник данных ***")
                  );if
              )
          (progn
              (acet-error-restore)
              (vla-endundomark doc)
              (exit)
              )
          )
    );while
  
  (vl-load-com)
  (setq ID (vla-get-objectid (vlax-ename->vla-object ent-from)))
  (setq	str (strcat "%<\\AcObjProp Object(%<\\_ObjId "
		      (itoa ID)
		      ">%).TextString>%"
		);strcat
   );setq
  
(setq fl nil)
  (while (setq es (nentsel "\n Укажите объект-приемник данных ... :"))
    (if (and
	  es
	  (setq ent-to (car es))
	  (member	(cdr (assoc 0 (entget ent-to)))
	    '("TEXT" "ATTRIB" "MTEXT" "DIMENSION" "MULTILEADER")
	    ) ;_ member
	  ) ;_ and
	  
    (progn
      (if (eq (cdr (assoc 0 (entget ent-to))) "MULTILEADER")
	(progn
	  (vla-put-TextString (vlax-ename->vla-object ent-to) str)
	  (vla-update (vlax-ename->vla-object ent-to))
	  )
	(progn
	  (setq ename-get (entget ent-to))
	  (setq ename-get (subst (cons 1 str)
			     (assoc 1 ename-get)
			     ename-get
			     ) ;_ subst
		) ;_ setq
	  (entmod ename-get)
	  (entupd (cdr (assoc -1 ename-get)))
	  )
	)
      (vl-cmdf "_updatefield" (cdr (assoc -1 ename-get)) "")
      ) ;progn
    (princ "\n *** Не верный выбор объекта-приемника ***")
    ) ;if ent
  (acet-error-restore)
  (vla-endundomark doc)

    ) ;while entsel
 
  (princ)
);defun
после "_REGEN" multileader-ы обновляются, работает (10 акад)
наспех добавил мультивыноски
код не идеален, но работает, пользуюсь с 2009
kakt00z вне форума  
 
Непрочитано 17.07.2012, 13:15
#31
VVA

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


Цитата:
Сообщение от Astartes Посмотреть сообщение
VVA, А можно доработать лисп из №13, чтобы они понимал мультивыноски. Т.е. из мультивыноски значение можно вставить в текст или мтекст. А вот из текста или мтекста, в мультивыноску не работате. Из мультивыноски в мультивыноску тоже не работает.
Цитата:
Сообщение от VVA Посмотреть сообщение
Напомни после 14 гляну. Я сейчас в отпуске
Как-то так
Код:
[Выделить все]
(defun c:CFLD (/ ename_get t_str ID obj)
  ;;; Copy field
  (vl-load-com)
  (and
    (setq obj (car (nentsel "\nоткуда брать содержимое")))
    (setq obj (vlax-ename->vla-object obj))
    (setq ID (vla-get-objectid obj ))
    (if (vlax-property-available-p obj 'Textstring)
      (progn
        (setq ename_get (entget (car (nentsel "\nкуда писать"))))
        (setq	t_str (strcat "%<\\AcObjProp Object(%<\\_ObjId "
		      (itoa ID)
		      ">%).TextString>%"
	      )
                )
          (vla-put-TextString (vlax-ename->vla-object (cdr(assoc -1 ename_get))) t_str)
          (entupd (cdr (assoc -1 ename_get)))
          (command "_updatefield" (cdr (assoc -1 ename_get)) "" "_regenall")
        )
      (alert "У объекта нет свойства\n   Textsring")
      )
    )
  (princ)
);defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.07.2012, 13:50
#32
Astartes

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


VVA, Спасибо. Есть правда непонятный момент. Когда вставляешь в мультивыноску, текст прилипает к полке.
Вложения
Тип файла: dwg
DWG 2007
Чертеж2.dwg (94.7 Кб, 1435 просмотров)
Astartes вне форума  
 
Непрочитано 17.07.2012, 13:54
#33
Кулик Алексей aka kpblc
Moderator

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


Astartes, в поиск по словам "текст прилипает к выноске"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.07.2012, 14:03
#34
Astartes

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


Кулик Алексей aka kpblc, Я знаю про эту тему. У меня есть лисп который это исправляет. Вопрос то в том, что после применения лиспа CFLD, текст прилипает. Если это "неизбежное зло" для CFLD, буду исправлять лиспом из указанной тобой темы.
Astartes вне форума  
 
Непрочитано 17.07.2012, 14:36
#35
VVA

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


Цитата:
Сообщение от Astartes Посмотреть сообщение
Если это "неизбежное зло" для CFLD,
Это неизбежное зло мультивыноски.
Цитата:
Сообщение от Astartes Посмотреть сообщение
буду исправлять лиспом из указанной тобой темы.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.10.2012, 15:31
#36
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


Код:
[Выделить все]
 (defun c:CFLD (/ ename_get t_str ID obj)
  ;;; Copy field
  (vl-load-com)
  (and
    (setq obj (car (nentsel "\nоткуда брать содержимое")))
    (setq obj (vlax-ename->vla-object obj))
    (setq ID (vla-get-objectid obj ))
    (if (vlax-property-available-p obj 'Textstring)
      (progn
        (setq ename_get (entget (car (nentsel "\nкуда писать"))))
        (setq	t_str (strcat
			"\\pxse0.8;"
			"%<\\AcObjProp Object(%<\\_ObjId "
		      (itoa ID)
		      ">%).TextString>%"
	      )
                )
          (vla-put-TextString (vlax-ename->vla-object (cdr(assoc -1 ename_get))) t_str)
          (entupd (cdr (assoc -1 ename_get)))
          (command "_updatefield" (cdr (assoc -1 ename_get)) "" "_regenall")
        )
      (alert "У объекта нет свойства\n   Textsring")
      )
    )
  (princ)
);defun

Последний раз редактировалось kakt00z, 08.10.2012 в 15:39.
kakt00z вне форума  
 
Непрочитано 09.10.2012, 08:26
#37
Astartes

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


kakt00z, Спасибо за ваш вариант. Работает как надо. Текст не прилипает.

VVA, возник вопрос. В лиспе я увидел что присутствую две команды для обновления полей.
(command "_updatefield" (cdr (assoc -1 ename_get)) "" "_regenall").
Зачем? Updatefield не всегда корректно работает? А regenall в качестве запасного варианта? Можно ли убрать regenall? А то когда чертеж большой с кучей объектов, команда CFLD долго выполняется.

Последний раз редактировалось Astartes, 09.10.2012 в 08:36.
Astartes вне форума  
 
Непрочитано 09.10.2012, 11:17
#38
VVA

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


Цитата:
Сообщение от Astartes Посмотреть сообщение
Зачем? Updatefield не всегда корректно работает? А regenall в качестве запасного варианта?
Я уже не помню. Скорее всего как запасной вариант. Убрать, как и вернуть обратно, всегда можно.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 13.10.2012, 15:42
#39
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


если закрыть глаза на диезы (без regenall и updatefield), то можно и всю эту строку удалить:
(command "_updatefield" (cdr (assoc -1 ename_get)) "" "_regenall")
при сохранении или еще каком-нибудь событии все поля обновятся сами
или обновить регенерировать чертеж вручную после нескольких выполнений команды
kakt00z вне форума  
 
Непрочитано 23.07.2019, 09:22
#40
allar8


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


Народ а можно как нить заменить коды значений полей сразу во всех вхождениях полей в файле
Т.е. поясню - изменил через внешнюю программу наименование доп. свойства в подшивке, но в файлах остались ссылки на прежние наименования свойств
Подобную тему в офисе можно делать с закладками, т.е. там в настройках выбираешь показывать коды полей и тупо поиск замена.
Тут в акаде так нельзя, но видел что-то вокруг да около - но готового решения не нашел - мож просто не туда глядел?

Последний раз редактировалось allar8, 23.07.2019 в 13:29.
allar8 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > извлечение и замена данных поля (field)

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Field... вставка поля из лиспа grph AutoCAD 2 16.10.2012 14:18
извлечение данных в AutoCAD 2008 versus1984 AutoCAD 10 27.03.2009 09:33
Извлечение данных в шаблон EXEL. OHUKC Программирование 23 15.09.2008 19:45
структурированный список Holon Программирование 22 11.09.2007 14:09