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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Свои данные к графическим обьектам акада

Свои данные к графическим обьектам акада

Ответ
Поиск в этой теме
Непрочитано 17.11.2006, 16:38 #1
Свои данные к графическим обьектам акада
Apelsinov
 
Проектировщик ВК. LISP-любитель.
 
Москва
Регистрация: 15.12.2003
Сообщений: 1,189

Какие способы есть чтоб к графическим обьектам акада добавить некие свои данные, которые возможно былоб перезаписывать и считывать, и таким образом связываеть конкретную, например, линию и конкретный список?

Т.е. хотелось бы создать свои функцию типа:
1. На запись
Код:
[Выделить все]
(имяфункции_1 vla-obj list_arg)
;возвращает T если записть прошла или nil
;где
;list_arg - любой список
;vla-obj - объект обьектной модели
2. На чтение
Код:
[Выделить все]
(имяфункции_2 vla-obj)
;возвращает список list_arg или nil
__________________
apel.fas
Просмотров: 3068
 
Непрочитано 17.11.2006, 16:42
#2
Кулик Алексей aka kpblc
Moderator

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


Если работать со словарями:
Код:
[Выделить все]
;|=============================================================================
*    Функция внесения дополнительных данных в примитив либо словарь.
*    Параметры вызова:
*	ent		примитив, в который вносятся данные. Если примитив -
*			пространство модели, то создается глобальный словарь
*			с именем *kpblc-regname* и данные вносятся в него
*	data-list	вносимые данные
*	append-data	t - заменять полностью
*			nil -> только указанные пары (заменить либо добавить)
*    Возвращаемое значение:
*	полный список доп.данных или nil, если невозможно записать.
*    Примеры вызова:
(_kpblc-ent-ldata-add (vlax-ename->vla-object (car (entsel))) '(("block" . "data1")) t)
=============================================================================|;
(defun _kpblc-ent-ldata-add (ent data-list append-data / exist_data res)
  (if (or (eq ent *kpblc-model*)
          (and (= (type ent) 'str)
               (= (strcase ent) (strcase *kpblc-regname*))
               ) ;_ end of and
          ) ;_ end of or
    (setq ent *kpblc-regname*)
    (setq ent (_kpblc-conv-ent-to-vla ent))
    ) ;_ end of if

  (if (and (not append-data)
           (setq exist_data (_kpblc-ent-ldata-get ent))
           ) ;_ end of and
    (setq data-list (append data-list exist_data))
    ) ;_ end of if
  (vl-catch-all-apply '(lambda () (vlax-ldata-delete ent *kpblc-appname*)))
  (foreach item (_kpblc-list-dublicates-remove data-list)
    (if (not (member (car item) (mapcar 'car res)))
      (setq res (append res (list item)))
      ) ;_ end of if
    ) ;_ end of foreach
  (vlax-ldata-put ent *kpblc-appname* res)
  ) ;_ end of defun

;|=============================================================================
*    Функция возвращает дополнительные данные, записанные в примитив (либо nil,
* если их нет)
*    Параметры вызова:
*	ent	указатель на примитив
*    Примеры вызова:
(_kpblc-ent-ldata-get (vlax-ename->vla-object (car (entsel))))
=============================================================================|;
(defun _kpblc-ent-ldata-get (ent)
  (if (or (eq ent *kpblc-model*)
          (and (= (type ent) 'str)
               (= (strcase ent) (strcase *kpblc-regname*))
               ) ;_ end of and
          ) ;_ end of or
    (setq ent *kpblc-regname*)
    (setq ent (_kpblc-conv-ent-to-vla ent))
    ) ;_ end of if
  (if (vlax-ldata-get ent *kpblc-appname*)
    (_kpblc-conv-list-to-lowcase
      (_kpblc-conv-list-to-pointlist
        (vlax-ldata-get ent *kpblc-appname*)
        ) ;_ end of _kpblc-conv-list-to-pointlist
      ) ;_ end of _kpblc-conv-list-to-lowcase
    ) ;_ end of if
  ) ;_ end of defun
Библиотечные функции не показываю - по идее и так понятно что они делают.
Есть еще вариант работы с расширенными данными, но уж больно там много ограничений (ИМХО).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Свои данные к графическим обьектам акада

Размещение рекламы