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

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

Изменить поле (формула) атрибута блока

Ответ
Поиск в этой теме
Непрочитано 06.04.2010, 11:26 #1
Изменить поле (формула) атрибута блока
EfremenkoDO
 
Санкт-Петербург
Регистрация: 24.12.2009
Сообщений: 59

Поогите разобраться, не могу докопаться до свойства Field у атрибута блока. Надо программно изменять формулу в поле. Грубо говоря задача такая: есть блок А с атриботом-полем в виде формулы, при этом формула ссылается на блок Б. Надо в формуле атрибута блока А изменить ссылки с данных блока Б на данные блока В.

Подскажите просто в каком направлении копать
Просмотров: 5541
 
Непрочитано 06.04.2010, 19:03
#2
kp+

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


получить код поля - VLA-fieldcode, заменить - как обычно, vla-put-textstring (текст распознается автоматически и будет превращен в поле)
kp+ вне форума  
 
Автор темы   Непрочитано 06.04.2010, 22:06
#3
EfremenkoDO


 
Регистрация: 24.12.2009
Санкт-Петербург
Сообщений: 59
<phrase 1=


к какому типу применяется vla-fieldcode? и как получить его, если поле является атрибутом блока? Могу достать IAcadAttributeReference2 (так и не понял что за двойка в конце) и описание самого блока
EfremenkoDO вне форума  
 
Непрочитано 07.04.2010, 01:07
1 | #4
Кулик Алексей aka kpblc
Moderator

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


Я попробовал написать код, но что-то результат отсутствует...

Код:
[Выделить все]
(vl-load-com)

(defun _dwrgru-change-attr-link (attr-dest attr-src / adoc err fun_conv-ename-to-vla)
                                ;|
*    Параметры вызова:
	attr-dest	указатель на вхождение атрибута, получающего новую формулу
						nil -> запрос у пользователя
	attr-src	указатель на вхождение атрибута, на который ссылается attr-dest
						nil -> запрос у пользователя
*    Слои должны быть разблокированы и разморожены, этой проверки не делалось!
*    
|;

  (defun fun_conv-ename-to-vla (ent)
    (cond
      ((= (type ent) 'vla-object)
       ent
      )
      ((= (type ent) 'ename)
       (vlax-ename->vla-object ent)
      )
    ) ;_ end of cond
  ) ;_ end of defun

  (cond
    ((not attr-dest)
     (if (and (= (type (setq attr-dest (vl-catch-all-apply
                                         (function
                                           (lambda ()
                                             (car (nentsel "\nУкажите атрибут, куда вставлять ссылку <Отмена> : "))
                                           ) ;_ end of lambda
                                         ) ;_ end of function
                                       ) ;_ end of vl-catch-all-apply
                       ) ;_ end of setq
                 ) ;_ end of type
                 'ename
              ) ;_ end of =
              (= (cdr (assoc 0 (entget attr-dest))) "ATTRIB")
         ) ;_ end of and
       (_dwrgru-change-attr-link attr-dest attr-src)
     ) ;_ end of if
    )
    ((not attr-src)
     (if
       (and (= (type
                 (setq
                   attr-src (vl-catch-all-apply
                              (function (lambda () (car (nentsel "\nУкажите атрибут, откуда брать данные <Отмена> : "))))
                            ) ;_ end of vl-catch-all-apply
                 ) ;_ end of setq
               ) ;_ end of type
               'ename
            ) ;_ end of =
            (= (cdr (assoc 0 (entget attr-src))) "ATTRIB")
       ) ;_ end of and
        (_dwrgru-change-attr-link attr-dest attr-src)
     ) ;_ end of if
    )
    ((and (setq attr-src (fun_conv-ename-to-vla attr-src))
          (setq attr-dest (fun_conv-ename-to-vla attr-dest))
     ) ;_ end of and
     (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
     (if (vl-catch-all-error-p
           (setq err (vl-catch-all-apply
                       (function
                         (lambda (/)
                           (vla-put-textstring attr-dest
                                               (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                                                       (vl-princ-to-string (vla-get-objectid attr-src))
                                                       ">%).TextString>%"
                                               ) ;_ end of strcat
                           ) ;_ end of vla-put-textstring
                         ) ;_ end of lambda
                       ) ;_ end of function
                     ) ;_ end of vl-catch-all-apply
           ) ;_ end of setq
         ) ;_ end of vl-catch-all-error-p
       (princ (strcat "\n *ERROR* : " (vl-catch-all-error-message err)))
     ) ;_ end of if
     (vla-endundomark adoc)
    )
  ) ;_ end of cond
) ;_ end of defun
Голова варит с трудом...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.04.2010, 10:17
#5
EfremenkoDO


 
Регистрация: 24.12.2009
Санкт-Петербург
Сообщений: 59
<phrase 1=


Спасибо за помощь, код помог
EfremenkoDO вне форума  
 
Непрочитано 08.04.2010, 11:43
#6
Кулик Алексей aka kpblc
Moderator

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


Ух ты! А у меня не срабатывал (я пробовал сделать в поле ссылку на атрибут другого блока).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Изменить поле (формула) атрибута блока

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить точку вставки блока Apelsinov AutoCAD 43 04.02.2022 18:34
Вставка атрибута в поле *Iren* AutoCAD 12 14.04.2014 07:28
Изменение значения атрибута в составе блока rzinnurov Программирование 27 06.12.2013 17:50
как редактировать contents в свойствах текста? как привязать размер текста атрибута к размеру блока? p-sm AutoCAD 3 13.08.2009 18:08
Вывод значения атрибута в поле field batart AutoCAD 2 09.07.2008 12:06