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

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

Получить список блоков в чертеже

Ответ
Поиск в этой теме
Непрочитано 26.08.2008, 16:09 #1
Получить список блоков в чертеже
DonVik
 
Украина
Регистрация: 07.02.2007
Сообщений: 222

В общем мне нужно получить список (коллекцию) обьектов типа AcadBlockReference, дабы потом скопом работать с их атрибутами.

Пытаюсь делать так, дабы познать саму суть

Код:
[Выделить все]
Private Sub UserForm_Click()
 Dim a As AcadBlocks
 Dim b As AcadBlockReference
 Set b = Application.ActiveDocument.Blocks.Item(0)
 Caption = b.Name
End Sub
На Set b... выпадает ошибка Type Mismath
Хотя в хелпе сказано что
Цитата:
Access via:Block.Item
Вроде должен вернуть мне Item этот блок, но не хочет.

Итак: Как правильно получить коллекцию этих блоков?
Просмотров: 5013
 
Непрочитано 26.08.2008, 16:23
#2
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Определись что хочешь получить, список (массив строк), коллекцию (collection), набор(SelectionSet).

Способов несколько.
1. В набор занесты выбор всего чертежа с фильтрами для блоков (можно фильтр и для атрибутов поставить).
2. Перебрать все объекты чертежа ThisDrawing.ModelSpace, ну или Paper.

Коллекцию блоков трогать не нужно. Тебе же Reference нужны.

А в остальном, это делается просто. Будут трудности скину пример попозжее.
Vildar вне форума  
 
Непрочитано 26.08.2008, 16:33
#3
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Вот, примерно так, через Select:
Код:
[Выделить все]
Public Sub BlocksRef()
   
   Dim selSetBlocksRef As AcadSelectionSet
   Dim strSelSetName As String
   Dim intFilterType(1) As Integer
   Dim varFilterDate(1) As Variant
   
   strSelSetName = "Блоки"
   
   For Each selSetBlocksRef In ThisDrawing.SelectionSets
      If selSetBlocksRef.Name = strSelSetName Then
         selSetBlocksRef.Clear
         selSetBlocksRef.Delete
         Exit For
      End If
   Next
   
   Set selSetBlocksRef = ThisDrawing.SelectionSets.Add(strSelSetName)
   
   intFilterType(0) = 0: intFilterType(1) = 66
   varFilterDate(0) = "insert": varFilterDate(1) = 1
   
   selSetBlocksRef.Select acSelectionSetAll, , , intFilterType, varFilterDate
   
   MsgBox "Количество блоков с атрибутами в Моделе = " & selSetBlocksRef.Count
   
End Sub
Прикольная у тебя фишка с UserForm_Click
Vildar вне форума  
 
Автор темы   Непрочитано 26.08.2008, 17:20
#4
DonVik


 
Регистрация: 07.02.2007
Украина
Сообщений: 222


Ок. Сенькс, я завтра уж прорулюю пример.
Фишка в том что мне это нужно для знаний, а так я все задуманное в Делфи писать буду.

Я правильно понимаю что для того чтоб SelectionSets чето давало нужно в акаде выделить все?
DonVik вне форума  
 
Непрочитано 26.08.2008, 17:50
#5
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Цитата:
Сообщение от DonVik Посмотреть сообщение
Ок. Сенькс, я завтра уж прорулюю пример.
Фишка в том что мне это нужно для знаний, а так я все задуманное в Делфи писать буду.
Такс, а чем делфи хорош, раскажи. Я чет запутался. Делфи - это язык программирования на основе паскаля. Борланд - типа IDE, с поддержкой кучи языков, в том числе и делфи. Так что-ли.
Цитата:
Я правильно понимаю что для того чтоб SelectionSets чето давало нужно в акаде выделить все?
В моем примере выделять ничего не нужно, опция acSelectionSetAll - означает выбор всего чертежа автоматом, причем и на замороженных и на выключенных слоях тоже.
Можно перебрать все объекты чертежа, но имхо через Select быстрее.
Легенды о подводных камнях слышал, но толком не знаю про что они, и есть ли они в данном случае.
Vildar вне форума  
 
Автор темы   Непрочитано 27.08.2008, 09:19
#6
DonVik


 
Регистрация: 07.02.2007
Украина
Сообщений: 222


Цитата:
Такс, а чем делфи хорош, раскажи
Да просто я на нем привык уже работать. )
Я на нем быстрее решу задачу чем буду еще изучать VBA.
Плюс мне нужны уже готовые модули (это типа личное), а на Делфи они уже есть, типа подключения к БД, получения данныз юзера и прочее...

Цитата:
Борланд - типа IDE, с поддержкой кучи языков, в том числе и делфи. Так что-ли.
Ну вообще то не совсем так ну да я даж поспорить не смогу )

Цитата:
В моем примере выделять ничего не нужно, опция acSelectionSetAll - означает выбор всего чертежа автоматом, причем и на замороженных и на выключенных слоях тоже.
Ок. Я прорулюю этот Moment )
В любом случае спасибо, еси что еще потревожу.
DonVik вне форума  
 
Автор темы   Непрочитано 27.08.2008, 15:08
#7
DonVik


 
Регистрация: 07.02.2007
Украина
Сообщений: 222


Так пока все блоки я выдернул, но только в Модели.
А как мне получить все блоки и в остальных Лайоутах а не только в модели?

А все... Разобрался уж

Последний раз редактировалось DonVik, 27.08.2008 в 17:07.
DonVik вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Получить список блоков в чертеже

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить список слоев и список текстовых стилей? DANZZ Программирование 12 08.02.2016 18:57
Как получить Список файлов в директории (поддиректорий) VBA sf Программирование 2 17.12.2010 12:06
как создать список блоков, содержащихся в файле Александер Программирование 10 31.10.2007 15:50
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47
как получить список всех видов в чертеже Димас Программирование 12 22.02.2006 02:29