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

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

VBA Как узнать общее количество блоков ?

Ответ
Поиск в этой теме
Непрочитано 27.02.2013, 20:59
VBA Как узнать общее количество блоков ?
maratovich
 
г. Самара
Регистрация: 12.07.2009
Сообщений: 2,435

Вопрос простой - сколько блоков в чертеже ?
После выполнения кода получаю 9 шт. а в реальности 30. (поправка :ошибочка вышла, их 27)
Код:
[Выделить все]
Private Sub CommandButton1_Click()
Dim i As Long
Dim objEnt As AcadEntity
i = 0
For Each objEnt In ThisDrawing.ModelSpace
    If objEnt.ObjectName = "AcDbBlockReference" Then
       i = i + 1
    End If
Next
MsgBox i
End Sub

Вложения
Тип файла: dwg
DWG 2007
Блоки.dwg (65.0 Кб, 3119 просмотров)


Последний раз редактировалось maratovich, 28.02.2013 в 12:15. Причина: Поправка
Просмотров: 7796
 
Непрочитано 28.02.2013, 12:10
#21
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
hwd, еще раз скачай вложение и проверь, что должно получиться при ручном расчете.
Как показывает практика - сегодня повторно скачивать бесполезно. Это уже на следующий день нужно качать.

UPD
Если выполнить прямую итерацию по базе данных, то получаю вообще 13 вхождений:
Код:
[Выделить все]
App.Document doc = cad.DocumentManager.MdiActiveDocument;
Db.Database db = doc.Database;
Ed.Editor ed = doc.Editor;
Int32 count = 0; /* общее количество вхождений блоков */
using (Db.Transaction tr = db.TransactionManager.StartTransaction()) {                
    Db.Handle handle = default(Db.Handle);
    Db.ObjectId id = Db.ObjectId.Null;
    for (Int64 i = db.BlockTableId.Handle.Value; i < db.Handseed.Value; i++) {
        handle = new Db.Handle(i);                    
        Boolean result = db.TryGetObjectId(handle, out id);
        if (result && id.IsValid && !id.IsErased && id.ObjectClass.Name.Equals("AcDbBlockReference",
            StringComparison.CurrentCulture)) {
            Db.BlockReference btr = tr.GetObject(id, Db.OpenMode.ForRead) as Db.BlockReference;     
            ed.WriteMessage("\nВхождение блока '{0}'", btr.Name);
            ++count;
        }
    }
    tr.Commit();
}

ed.WriteMessage("\nBlock references count: {0}\n", count);
Результат работы такой:
Цитата:
Вхождение блока 'Блок1'
Вхождение блока 'Блок2'
Вхождение блока 'Блок3'
Вхождение блока 'Блок1'
Вхождение блока 'Блок2'
Вхождение блока 'Блок2'
Вхождение блока 'Блок3'
Вхождение блока 'Блок3'
Вхождение блока 'Блок1'
Вхождение блока 'Блок1'
Вхождение блока 'Блок2'
Вхождение блока 'Блок1'
Вхождение блока 'Блок1'
Block references count: 13
Странно. И это всё при том, что блоки даже не параметрические и не аннотативные.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 28.02.2013 в 13:36. Причина: Добавил информацию.
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > VBA Как узнать общее количество блоков ?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Каким образом узнать длину нескольких динамических блоков ie.spb Динамические блоки 40 10.08.2021 13:25
Где узнать на какое количество машин расчитан гараж? sima Прочее. Архитектура и строительство 77 15.01.2009 13:43
VBA - как узнать закрытый ли контур To Thuc Программирование 4 18.06.2007 16:55
как узнать сколько блоков в чертеже определенного имени? ilka_t AutoCAD 11 22.07.2005 10:57
как узнать сколько layout в файле текущем DWG файле VBA sf Программирование 1 09.03.2005 12:36