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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Поля во внешних ссылках

Поля во внешних ссылках

Ответ
Поиск в этой теме
Непрочитано 23.09.2011, 23:02 #1
Поля во внешних ссылках
Ax3
 
Programming, automation, CADs, GISs. "Теплоком"
 
Россия, Санкт-Петербург
Регистрация: 02.02.2007
Сообщений: 306

Здравствуйте.
Пытаюсь использовать поля LispVariable во внешних ссылках.
Не могу обновить поля этих внешних ссылок из чертежа, в который вставлена внешняя ссылка, после изменения lisp-переменной.
Это невозможно?
П.С. При попытке контекстного редактирования ссылки вообще какая-то херь происходит.
Во вложении пример. (формат ACAD 2007)
_Пример использования полей во внешней ссылке.zip

__________________
На LISPе можно мыслить!
Просмотров: 2383
 
Непрочитано 27.09.2011, 23:07
#2
Кулик Алексей aka kpblc
Moderator

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


Как вариант, лисповое решение. Проверял на AutoCAD 2012:
Код:
[Выделить все]
 (vl-load-com)

(defun c:updfld (/
                 _kpblc-conv-ent-to-ename
                 _kpblc-conv-ent-to-vla
                 _kpblc-conv-vla-to-list
                 fun_layer-status-save
                 fun_layer-status-restore
                 *error*
                 adoc
                 layers
                 ent_lst
                 )

  (defun fun_layer-status-save ()
    (mapcar
      (function
        (lambda (x)
          (cons x
                (mapcar
                  (function
                    (lambda (a / tmp)
                      (setq tmp (vlax-get-property x a))
                      (vl-catch-all-apply
                        (function
                          (lambda ()
                            (vlax-put-property x a :vlax-false)
                            ) ;_ end of lambda
                          ) ;_ end of function
                        ) ;_ end of vl-catch-all-apply
                      tmp
                      ) ;_ end of lambda
                    ) ;_ end of function
                  '("freeze" "lock")
                  ) ;_ end of mapcar
                ) ;_ end of cons
          ) ;_ end of lambda
        ) ;_ end of function
      (_kpblc-conv-vla-to-list (vla-get-layers adoc))
      ) ;_ end of mapcar
    ) ;_ end of defun

  (defun fun_layer-status-restore (lst)
    (foreach item lst
      (foreach prop (cdr item)
        (vl-catch-all-apply
          (function
            (lambda ()
              (vlax-put-property item (car prop) (cdr prop))
              ) ;_ end of lambda
            ) ;_ end of function
          ) ;_ end of vl-catch-all-apply
        ) ;_ end of foreach
      ) ;_ end of foreach
    ) ;_ end of defun

  (defun *error* (msg)
    (fun_layer-status-restore layers)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-ename (ent_value /)
    (cond
      ((= (type ent_value) 'vla-object)
       (vlax-vla-object->ename ent_value)
       )
      ((= (type ent_value) 'ename) ent_value)
      ((= (type ent_value) 'str) (handent ent_value))
      ((= (type ent_value) 'list) (cdr (assoc -1 ent_value)))
      (t nil)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-ent-to-vla (ent_value / res)
    (cond
      ((= (type ent_value) 'vla-object) ent_value)
      ((= (type ent_value) 'ename) (vlax-ename->vla-object ent_value))
      ((setq res (_kpblc-conv-ent-to-ename ent_value))
       (vlax-ename->vla-object res)
       )
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
    (cond
      ((listp value)
       (mapcar '_kpblc-conv-vla-to-list value)
       )
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (_kpblc-conv-vla-to-list (vlax-safearray->list value))
         ) ;_ end of if
       )
      ((and (member (type value) (list 'ename 'str 'vla-object))
            (= (type (_kpblc-conv-ent-to-vla value)) 'vla-object)
            (vlax-property-available-p (_kpblc-conv-ent-to-vla value) 'count)
            ) ;_ end of and
       (vlax-for sub (_kpblc-conv-ent-to-vla value)
         (setq res (cons sub res))
         ) ;_ end of vlax-for
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (setq layers (fun_layer-status-save))
  (vlax-for blk_def (vla-get-blocks adoc)
    (vlax-for ent blk_def
      (if (vlax-method-applicable-p ent 'update)
        (vl-catch-all-apply
          (function
            (lambda ()
              (vla-update ent)
              ) ;_ end of lambda
            ) ;_ end of function
          ) ;_ end of vl-catch-all-apply
        ) ;_ end of if
      ) ;_ end of vlax-for
    ) ;_ end of vlax-for
  (fun_layer-status-restore layers)
  (vla-regen adoc acallviewports)
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Поля во внешних ссылках



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Пропадают поля на видовом экране в листе klerik AutoCAD 6 06.05.2011 08:05
Как сделать сток канализационных вод из отстойника на поля фильтрации, при чем поля находятся на 70 метров выше отстойника? Мария_Мар Водоснабжение и водоотведение 4 04.04.2011 11:43
Поля AutoCAD + Windows vanfil AutoCAD 6 07.04.2010 10:37
Поля атрибутов вложенного блока не отображают своих значений hwd AutoCAD 7 23.12.2009 08:40