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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > для объекта AcadSelectionSet значения филтров filterdata:= ?

для объекта AcadSelectionSet значения филтров filterdata:= ?

Ответ
Поиск в этой теме
Непрочитано 21.08.2007, 17:12 #1
для объекта AcadSelectionSet значения филтров filterdata:= ?
sergeytr
 
engineer
 
Haifa
Регистрация: 17.12.2006
Сообщений: 16

Доброе утро всем!
где можно увидеть список констант этого филтра?
для объекта AcadSelectionSet значения филтров filterdata:= "?????"
блоки "INSERT"
полилинии "LWPOLYLINE"
...
вообщето мне необходимо выбрать блоки внутри блоков ..!?
Спасибо!
:roll:
__________________
Спасибо
Просмотров: 3129
 
Непрочитано 22.08.2007, 09:23
#2
Кулик Алексей aka kpblc
Moderator

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


Во-первых, это на каком языке? Подозреваю, что VBA.
См. справка, DXF Reference:
Цитата:
3DFACE
3DSOLID ; ACAD_PROXY_ENTITY ; ARC ; ATTDEF ; ATTRIB ; BODY ; CIRCLE ; DIMENSION ; ELLIPSE ; HATCH ; IMAGE ; INSERT ; LEADER ;
LINE ; LWPOLYLINE ; MLINE ; MTEXT ; OLEFRAME ; POINT ;
POLYLINE ; RAY ; REGION ; SHAPE ; SOLID ; SPLINE ; TABLE ; TEXT ; TOLERANCE ; TRACE ; VIEWPORT ; XLINE
Вроде бы так, лишнего не оставил. Но, поскольку тебе надо "заходить внутрь блоков", тебе придется SelectionSet формировать по принципу:
Код:
[Выделить все]
Option Explicit

Public Sub FilteredSelectionSet()
Dim objSelSet As AcadSelectionSet, sSelSetName As String
Dim flType() As Integer, SelSetFilterLength As Integer, lCounter As Long
Dim flData() As Variant, BlockResult() As Variant
Dim Entity As Variant, EntResult() As Variant
  sSelSetName = "Filtered"
  SelSetFilterLength = 1
  On Error Resume Next
  ThisDrawing.SelectionSets.Item(sSelSetName).Clear
  ThisDrawing.SelectionSets.Item(sSelSetName).Delete
  On Error GoTo 0
  Set objSelSet = ThisDrawing.SelectionSets.Add(sSelSetName)
  ReDim flType(SelSetFilterLength - 1): ReDim flData(SelSetFilterLength - 1): ReDim BlockResult(0)
  ReDim EntResult(0)
  flType(0) = 0: flData(0) = "INSERT"
  objSelSet.SelectOnScreen flType, flData
  For lCounter = 0 To objSelSet.Count
    BlockResult(UBound(BlockResult) - 1) = objSelSet.Item(lCounter)
    For Each Entity In ThisDrawing.Blocks.Item(objSelSet.Item(lCounter).Name)
      EntResult(UBound(EntResult) - 1) = Entity
    Next Entity
  Next lCounter
  ThisDrawing.SelectionSets.Item(sSelSetName).Clear
  ThisDrawing.SelectionSets.Item(sSelSetName).Delete
  ' Теперь в массиве BlockResult хранятся указатели на вхождения блоков, попавшие в набор;
  ' А вот в EntReult - список подпримитивов блоков. Неотфильтрованный.
End Sub
Прошу понять, я в VBA не работаю практически, так что код надо проверять и проверять.
P.S. http://vbamaker.narod.ru/Cod1.html глянь еще закомпанию.
P.P.S. Черт, никак не могу найти ссылки на сайт, где Fatty свои функции публикует.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.08.2007, 10:07
#3
sergeytr

engineer
 
Регистрация: 17.12.2006
Haifa
Сообщений: 16


спасибо kpblc!
действительно VBA
с кодом сейчас буду разбираться - на первый взгляд понятно.
а вот в ссылке DXF Reference не нашел этого списка - пож. утoчни ссылку.
__________________
Спасибо
sergeytr вне форума  
 
Непрочитано 22.08.2007, 10:14
#4
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Леша, ну зачем-же так серьезно? Может быть товарищу просто нужен
Код:
[Выделить все]
(setq ass (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
(vla-SelectOnScreen ass (vlax-safearray-fill (vlax-make-safearray vlax-vbInteger '(0 . 0)) '(0))
    (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant '(0 . 0)) '("*Insert,*Polyline")))
А список констант, сиречь - DXF кодов, которые "0" для типа примитива, "8" для слоя и т.п. можно увидеть в соотв. разделе HELP.
Например селектор с таким фильтром
Код:
[Выделить все]
(vla-SelectOnScreen ass (vlax-safearray-fill (vlax-make-safearray vlax-vbInteger '(0 . 2)) '(0 8 1))
    (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant '(0 . 2))  (list "*Insert,*Poliline" "0" 1)))
будет выбирать блоки и полилинии, находящиееся на слое"0" с ринудительно установленнвм (hard set) красным цветом.
Лентяй вне форума  
 
Непрочитано 22.08.2007, 10:31
#5
Кулик Алексей aka kpblc
Moderator

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


> sergeytr : В акаде меню Help -> Developer Help и в окне найти DXF Reference. Там все коды расписаны.
> Лентяй : Я и не спорю. Надо только получить, как я понял, не столько сам набор, сколько список (ну или в VBA-шной терминологии "массив") объектов типа LWPOLYLINE, входящих внутрь вставок блоков, попавших в набор. В лиспе мне тоже больше нравится такое делать, но автору требуется VBA
P.S. Во втором коде не очепятка часом?
Код:
[Выделить все]
(vla-SelectOnScreen ass (vlax-safearray-fill (vlax-make-safearray vlax-vbInteger '(0 . 2)) '(0 8 1))
    (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant '(0 . 2))  (list "*Insert,*Polyline" "0" 1)))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.08.2007, 16:26
#6
sergeytr

engineer
 
Регистрация: 17.12.2006
Haifa
Сообщений: 16


Алексей спасибо!
1) идея "For Each Entity.." работает, все что мне нужно было я сделал.
сам код не работает - думаю проблема с размерами массивов,
но это уже не важно!
2) видимо в ACAD2000 (у меня) по другому устроен HELP - список я так и не нашeл!
__________________
Спасибо
sergeytr вне форума  
 
Непрочитано 22.08.2007, 16:36
#7
Кулик Алексей aka kpblc
Moderator

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


Не, проблема не с размерами, наверное, а с логикой все же. Могу только порекомендовать пошагово проходить...
Насчет справки... В 2002-м (да и в 2005-м) впрямую этот список отсутствует, но это не означает, что его нельзя посмотреть
Заходишь в DXF Reference, раскрываешь его группу ENTITIES Section - вуаля, все типы примитивов на месте
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.08.2007, 16:57
#8
sergeytr

engineer
 
Регистрация: 17.12.2006
Haifa
Сообщений: 16


Алексей, спасибо!
Полностью удовлетворен!
__________________
Спасибо
sergeytr вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > для объекта AcadSelectionSet значения филтров filterdata:= ?