Тема: Функция для создания "пользовательских наборов"

Перенесено из темы: Как вставить картинку или иконку в list_box?.
/Администратор./

Да есть книга такая купил уж давно Вот тока сейчас решил автоматизировать свою работу т.к. я по образованию программист.
Знаю много разных языков, а этот вот начал учить недавно, но есть уже усехи ;)
Закончил писать функцию которая создает пользователькие наборы в которые входят любые примитивы (каждый примитив может входить в несколько наборов).
Можно редактировать, переименовывыть, удалять, создавать, удалять из набора .... все наборы сохраняются в чертеже.
При копировании объекта который входит в набор(ы) автоматически тоже присваиваеся к набору(ам).
Вот теперь дописываю функцию которая делает из этих наборов спецификацию как таблицой AutoCAD или в Excel
Вот так ! ;)))

Re: Функция для создания "пользовательских наборов"

> Ivspec
Прошу без обид, ок?
"Пользовательские наборы" - скорее всего, группы.
Насчет копирования не очень понял. Ну может примитив входить в несколько групп, только что это даст-то? Всего программирования на уровне макроса ^C^C_group и дальше по опциям.
Зачем использовать Excel, если таблица уже в каде, я не понял совсем.
Вообще реплика достаточно странная, если попытаться в ней разобраться.

Re: Функция для создания "пользовательских наборов"


kpblc (2006-02-13 17:26:36)
Прошу без обид, ок?
"Пользовательские наборы" — скорее всего, группы.
Насчет копирования не очень понял. Ну может примитив входить в несколько групп, только что это даст-то? Всего программирования на уровне макроса ^C^C_group и дальше по опциям.
Зачем использовать Excel, если таблица уже в каде, я не понял совсем.
Вообще реплика достаточно странная, если попытаться в ней разобраться.

нет не группы (^C^C_group) я не юзаю command и готовые функции када
я написал чтото вроде групп, даже лучше сказать группы только свои ... через расширенные данные
но есть возможность создавать спецификацию в таблицу Autocad и в файл csv как если создавать через атрибуты блока...
так что у меня 2 в 1  заодно учусь работать совсеми возможнстями сразу
;)

Re: Функция для создания "пользовательских наборов"

Расширенные данные... На самом деле там есть один очень неприятный момент - их ограничение в объеме. И я не знаю, например, если в файле зарегистрировано 2 (3, 4, ... 100) приложений - они этот объем делят между собой или как? В литературе ответа я пока не нашел.

Re: Функция для создания "пользовательских наборов"

группы это тоже рассширенные данные которые присоединяются через диалог
так же и я сделал !
да объем ограничен, но такого кол-ва мне достаточно !!!

Re: Функция для создания "пользовательских наборов"

Вообще-то группы не есть расширенные данных хотя бы потому, что а) у них есть штатный словарь (чего нет у расширенных данных) и б) DXF-коды групп не входят в диапазон расширенных данных, насколько я помню.

Re: Функция для создания "пользовательских наборов"

kpblc 
ненадо!!!!
у расширенных данных создаваемые мною есть свой словарь... вот так и расширенные данные нельзя посмотреть просто через entet нужно еще указывать имя словаря через (ssget "_X" "name_rasiren_date")
плюс к группе акада присоединяется реактор !

Re: Функция для создания "пользовательских наборов"

Ivspec пишет:

(ssget "_X" "name_rasiren_date")

Это что-то новенькое. Подробнее пожалуста...

Re: Функция для создания "пользовательских наборов"

> Ivspec
Тогда покажи, как ты их создаешь. Чтоб хоть понимать, про что базар. А то выяснится, что ты говоришь про x-records, а я про extended data. Сознавая всю спорность кода, рискну его показать:

;|=============================================================================
*    Функция формирования списка для добавления в качестве расширенных данных
* примитива.
*    Параметры вызова:
*    extdata-list    список элементов, которые надо присоединить. Может быть
*            любым из возможных для расширенных данных. Список вида
*        '(("str" . "Строка для записи")
*        ("scale" . <Масштаб элемента. Требуется, если вставка выполнена
*                в модели>)
*        ("layer" . <Имя слоя>)    ; пока не использую
*        )
*    Примеры вызова:
(_kpblc-ent-xdata-create '(("str" . "Строка") ("layer" . "0")))
=============================================================================|;
(defun _kpblc-ent-xdata-create (extdata-list / item res)
  (if (assoc "str" extdata-list)
    (setq res (append res (list (cons 1000 (cdr (assoc "str" extdata-list))))))
    ) ;_ end of if
  (if (assoc "layer" extdata-list)
    (setq
      res (append res (list (cons 1003 (cdr (assoc "layer" extdata-list)))))
      ) ;_ end of setq
    ) ;_ end of if
  (if (assoc "scale" extdata-list)
    (setq
      res (append res (list (cons 1042 (cdr (assoc "scale" extdata-list)))))
      ) ;_ end of setq
    ) ;_ end of if
  (setq res (list (cons -3 (list (cons *kpblc-appname* res)))))
  res
  ) ;_ end of defun
;|=============================================================================
*    Функция чтения расширенных данных из указанного примитива. Возвращается
* список точечных пар по DXF Reference
*    Параметры вызова:
*    ent    указатель на объект (ename или vla)
*    xdat    какие значения получать:
*        "scale"    - получить масштаб
*        "layer"    - получить слой
*        "str"    - получить строку
*        nil     - получить полный список
*    Примеры вызова:
(_kpblc-ent-xdata-get (entlast nil)
=============================================================================|;
(defun _kpblc-ent-xdata-get (ent xdat / res)
  (if (setq res (entget (_kpblc-ent-to-ename ent) (list *kpblc-appname*)))
    (progn
      (setq res
             (cdar
               (cdr
                 (assoc -3 (entget (_kpblc-ent-to-ename ent) (list *kpblc-appname*)))
                 ) ;_ end of cdr
               ) ;_ end of cdar
            ) ;_ end of setq
      ) ;_ end of progn
    ) ;_ end of if
  (if (and xdat
           (setq xdat (strcase xdat t))
           ) ;_ end of and
    (cond
      ((= xdat "scale")
       (setq res (cdr (assoc 1042 res)))
       )
      ((= xdat "layer")
       (setq res (cdr (assoc 1003 res)))
       )
      ((= xdat "str")
       (setq res (cdr (assoc 1000 res)))
       )
      ) ;_ end of cond
    ) ;_ end of if
  res
  ) ;_ end of defun
;|=============================================================================
*    Функция записи расширенных данных в указанный примитив
*    Параметры вызова:
*    ent        примитив, над которым выполняется действие.
*    extdata-list    список элементов, которые надо присоединить. Может быть
*            любым из возможных для расширенных данных. Список вида
*        '(("str" . "Строка для записи")
*        ("scale" . <Масштаб элемента. Требуется, если вставка выполнена
*                в модели>)
*        ("layer" . <Имя слоя>)    ; пока не использую
*        )
*    Примеры вызова:
(_kpblc-ent-xdata-set (entlast) '(("str" . "Строка") ("layer" . "0") (cons "scale" (kpblc-get-scale))))
=============================================================================|;
(defun _kpblc-ent-xdata-set (ent extdata-list / xdat)
  (setq xdat (_kpblc-ent-xdata-create extdata-list)
        ent  (append (entget (_kpblc-ent-to-ename ent)) xdat)
        ) ;_ end of setq
  (entmod ent)
  ) ;_ end of defun

---
Оффтоп: некисло тема вильнула...

Re: Функция для создания "пользовательских наборов"

> Ivspec
Согласен с > Александр Ривилис (2006-02-15 16:38:41)