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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как по примитиву получить указатель на динамический блок, в котором этот примитив находится?

Как по примитиву получить указатель на динамический блок, в котором этот примитив находится?

Ответ
Поиск в этой теме
Непрочитано 08.02.2011, 14:58 #1
Как по примитиву получить указатель на динамический блок, в котором этот примитив находится?
молодой человек
 
Регистрация: 14.11.2007
Сообщений: 159

Здравствуйте!
Есть динамический блок с НЕ постоянными атрибутами и с полилиниями.
Задача в следующем:
Мне нужно выбрать интересующий меня примитив(полилинию) в блоке, чтобы получить его свойства, а затем получить указатель на динамический блок в котором находится этот примитив, чтобы прочитать атрибуты.
До примитива добираюсь с помощью команды:
(car (nentsel)),
а до динамического блока:
(entget (cdr (assoc 330 (entget (car (nentsel))))))


Код:
[Выделить все]
((-1 . <Имя объекта: 7363de48>) (0 . "BLOCK_RECORD") (5 . "3F61") (102 . "{ACAD_XDICTIONARY") (360 . <Имя объекта: 7363ded8>) (102 . "}") (330 . <Имя объекта: 73607c08>) (100 . "AcDbSymbolTableRecord") (100 . "AcDbBlockTableRecord") (2 . "*U28") (360 . <Имя объекта: 7363de50>) (340 . <Имя объекта: 0>) (102 . "{BLKREFS") (331 . <Имя объекта: 7363f0b0>) (331 . <Имя объекта: 7363e1a0>) (331 . <Имя объекта: 7363e280>) (102 . "}") (70 . 0) (280 . 1) (281 . 0))
и в этом dxf представлении среди элементов с кодом 331 есть искомый динамический блок, но как понять какой именно- непонятно(
Подскажите, пожалуйста, как добраться до дин. блока?
Просмотров: 3503
 
Непрочитано 08.02.2011, 15:23
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


Цитата:
Сообщение от молодой человек Посмотреть сообщение
До примитива добираюсь с помощью команды:
(car (nentsel))
Цитата:
Сообщение от молодой человек Посмотреть сообщение
но как понять какой именно- непонятно
(last (nentsel))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 08.02.2011, 15:29
#3
Лиспер


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


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

(defun _dwgru-get-effnameblock-by-ent (ent / res adoc owner name)
                                      ;|
*    Получение указателя на блок, в который входит указанный примитив
*    Параметры вызова:
	ent -> указатель на примитив (ename или vla)
|;
  (if (and (setq ent (cond
                       ((= (type ent) 'ename) (vlax-ename->vla-object ent))
                       ((= (type ent) 'vla-object) ent)
                       ) ;_ end of cond
                 ) ;_ end of setq
           (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
           (setq owner (vla-objectidtoobject adoc (vla-get-ownerid ent)))
           ) ;_ end of and
    (if (not (equal (vla-get-islayout owner) :vlax-true))
      (vla-get-effectivename
        (vlax-ename->vla-object
          (cdr
            (assoc
              331
              (entget
                (vlax-vla-object->ename
                  (vla-item (vla-get-blocks adoc) (vla-get-name owner))
                  ) ;_ end of vlax-vla-object->ename
                ) ;_ end of entget
              ) ;_ end of assoc
            ) ;_ end of cdr
          ) ;_ end of vlax-ename->vla-object
        ) ;_ end of vla-get-effectivename
      (if (equal owner (vla-get-modelspace adoc))
        (vla-get-name owner)
        (vla-get-name (vla-get-layout owner))
        ) ;_ end of if
      ) ;_ end of if
    ) ;_ end of if
  ) ;_ end of defun
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 08.02.2011, 21:47
#4
молодой человек


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


Спасибо вам, теперь разобрался.
молодой человек вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как по примитиву получить указатель на динамический блок, в котором этот примитив находится?

Система Техэксперт дает уверенность в правильности и эффективности принимаемых инженерных решений!
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На каком лайоуте находится выбранный блок? DonVik Программирование 30 29.08.2008 17:20