Как из раздела dxf "BLOCKS Section" получить точки контуров объектов HATCH и REGION?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как из раздела dxf "BLOCKS Section" получить точки контуров объектов HATCH и REGION?

Как из раздела dxf "BLOCKS Section" получить точки контуров объектов HATCH и REGION?

Ответ
Поиск в этой теме
Непрочитано 06.11.2010, 02:44 #1
Как из раздела dxf "BLOCKS Section" получить точки контуров объектов HATCH и REGION?
KAI
 
геологоразведка, строительство
 
Магадан
Регистрация: 14.10.2003
Сообщений: 311

Имеется объект "INSERT", внутри него есть объекты "HATCH" и/или "REGION". Требуется получить список точек контуров этих объектов (хотя бы приближенно) в координатах объекта ("INSERT").
Что-то не хочется решать эту проблему по "рабоче-крестьянски". Может у кого есть уже наработки?
__________________
Лень - великий двигатель прогресса!
Просмотров: 2794
 
Непрочитано 06.11.2010, 03:24
#2
Кулик Алексей aka kpblc
Moderator

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


У объекта Hatch можно получить данные по его границам; а как с Region дело обстоит - просто не помню. Сами-то указатели на объекты блока получить не сложно:
Код:
[Выделить все]
(vl-load-com)

(defun dwgru-get-hatch-or-region-by-block (ent / ent_list res)
          ; ent -> óêàçàòåëü íà áëîê
  (cond
    ((not ent)
     (if (= (type (setq ent (vl-catch-all-apply
                              (function
                                (lambda ()
                                  (ssname (ssget "_+.:S:E" '((0 . "INSERT"))) 0)
                                  ) ;_ end of lambda
                                ) ;_ end of function
                              ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'ename
            ) ;_ end of =
       (setq res (dwgru-get-hatch-or-region-by-block (vlax-ename->vla-object ent)))
       ) ;_ end of if
     )
    ((= (type ent) 'ename)
     (setq res (dwgru-get-hatch-or-region-by-block (vlax-ename->vla-object ent)))
     )
    ((and (= (type ent) 'vla-object)
          (= (vla-get-objectname ent) "AcDbBlockReference")
          ) ;_ end of and
     (setq ent      (vla-item (vla-get-blocks (vla-get-document ent)) (vla-get-name ent))
           ent_list ((lambda (/ lst)
                       (vlax-for item ent
                         (setq lst (cons item lst))
                         ) ;_ end of vlax-for
                       (reverse lst)
                       ) ;_ end of lambda
                     )
           res      (mapcar (function
                              (lambda (x)
                                (cons (strcase x t)
                                      (vl-remove-if-not
                                        (function
                                          (lambda (a)
                                            (= (strcase (vla-get-objectname a)) (strcat "ACDB" (strcase x)))
                                            ) ;_ end of lambda
                                          ) ;_ end of function
                                        ent_list
                                        ) ;_ end of vl-remove-if-not
                                      ) ;_ end of cons
                                ) ;_ end of lambda
                              ) ;_ end of function
                            '("Hatch" "Region")
                            ) ;_ end of mapcar
           ) ;_ end of setq
     )
    ) ;_ end of cond
  res
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 06.11.2010, 09:06
#3
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


После анализа нескольких объектов HATCH попробовал просто достать из dxf все точки с кодом 10, отбросил нулевую точку, и получил приближенный набор точек штриховки.
Контур получил по функции CONVEX_POLYGON_PTS.
Хоть что-то!

Но меня терзаю смутные сомнения, что это не всегда будет верно.
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как из раздела dxf "BLOCKS Section" получить точки контуров объектов HATCH и REGION?