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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > vba, как посчитать количество блоков с помощью item и handle?

vba, как посчитать количество блоков с помощью item и handle?

Ответ
Поиск в этой теме
Непрочитано 10.03.2018, 18:07
vba, как посчитать количество блоков с помощью item и handle?
Simson
 
Регистрация: 08.03.2018
Сообщений: 45

Дело в том что макрос вбивает команду извлечения данных в командную строку а потом работает с извлеченными данными. Но по факту получается что он не дождавшись когда команда выполнится начинает обрабатывать данные, а они еще не извлеклись, соответственно файл пустой. решил сделать отдельную процедуру( продолжение основного когда) реагирующего на завершение команды.
в основном коде вот такой строчкой завершается код.

Код:
[Выделить все]
ThisDrawing.SendCommand ("-ДАННЫЕИЗВЛ" & vbCr & spath & dxe & ".dxe" & vbCr & "Да" & vbCr)
Теста ради написал такие строчки чтоб проверить как работает...

Код:
[Выделить все]
Private Sub AcadDocument_beginCommand(ByVal CommandName As String)
    If CommandName <> "-ДАННЫЕИЗВЛ" & vbCr Then
        Exit Sub
    End If
    MsgBox "hopla"
End Sub
в итоге условие распознания команды вовсе не реагирует.. не видит он эту команду. пробовал и vbcr добавлять- никак..
как это можно исправить?
и может есть идеи реализовать это проще? может внутри процедуры можно все такие задать условие при котором код продолжиться только после завершения команды?

Последний раз редактировалось Simson, 10.03.2018 в 22:09.
Просмотров: 9339
 
Непрочитано 11.03.2018, 10:25
#21
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


Цитата:
Сообщение от Simson Посмотреть сообщение
Дело в том что макрос вбивает команду извлечения данных в командную строку а потом работает с извлеченными данными.
Т.е. на извлечении самих данных работа не заканчивается.
Сергей812 вне форума  
 
Непрочитано 11.03.2018, 12:25
#22
Кулик Алексей aka kpblc
Moderator

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


Т.е. проще сделать собственный вариант "извлечения" - во избежание, как говорится
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.03.2018, 12:33
#23
Simson


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


Да не только блоки. есть несколько определений блока(динамических) и множественное количество их вставок. в принципе да нужен аналог извлечения данных, т е длины и количества конкретных полилиний( пот типу линии например отобрать) количество вставок блока каждого определения и для каждой вставки их динамические параметры. вот такая простая задача.

----- добавлено через ~4 мин. -----
почему же не vba? на vba не реализуемо? казалось бы базовая задача почему так неочевидно выполняется.. странно странно
Simson вне форума  
 
Непрочитано 11.03.2018, 12:43
#24
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


реализуемо, люди и на лиспе реализуют подобную обработку) Просто VBA в плане обработки информации достаточно урезанный язык, придется писать всякие костыли, использовать внешние словари или реализовывать их программно.
Сергей812 вне форума  
 
Непрочитано 11.03.2018, 12:59
#25
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,295
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Simson Посмотреть сообщение
Да не только блоки. есть несколько определений блока(динамических) и множественное количество их вставок. в принципе да нужен аналог извлечения данных, т е длины и количества конкретных полилиний( пот типу линии например отобрать) количество вставок блока каждого определения и для каждой вставки их динамические параметры. вот такая простая задача.
и решение простое, селсетом делаешь выборку динамических блоков по нужному пространству, можно добавить еще условия выборки слой, цвет и прочее.
потом по EffectiveName в цикле отбираешь, только блоки с нужным именем, если это нужный блок в этом же цикле выдергиваешь из него нужные данные, и закидываешь их например в массив
потом работаешь только с массивом.
с полилинией аналогично.
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 11.03.2018, 13:00
#26
Simson


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


а без выделения? через итем перебрав не выдернуть нужную инфу?
Simson вне форума  
 
Непрочитано 11.03.2018, 13:09
| 1 #27
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Simson Посмотреть сообщение
Да не только блоки. есть несколько определений блока(динамических) и множественное количество их вставок. в принципе да нужен аналог извлечения данных, т е длины и количества конкретных полилиний( пот типу линии например отобрать) количество вставок блока каждого определения и для каждой вставки их динамические параметры. вот такая простая задача.
Да, простая задача. Описали Вы ее очень сумбурно, если так же писать код - будет беда.
В остальном, данная задача решается компоновкой примеров, которые есть в справке.
Boxa вне форума  
 
Непрочитано 11.03.2018, 13:11
#28
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,295
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Simson Посмотреть сообщение
а без выделения?
при чем тут выделение... http://vbamodel.narod.ru/AutoCAD/idh...set_object.htm
http://vbamodel.narod.ru/AutoCAD/idh_select.htm
задавай фильтры, и обрабатывай выборку, как тебе заблогарассудится, но да дин блок по имени выбрать не получится, обычный легко. Зато можно сделать выборку блоков только с атрибутами, по слою или слоям, с модели или только листов с любого листа или еще как.. и не перебирать тупо в цикле все блоки пространства.
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 11.03.2018, 13:22
#29
Simson


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


Цитата:
Сообщение от Boxa Посмотреть сообщение
Да, простая задача. Описали Вы ее очень сумбурно, если так же писать код - будет беда.
В остальном, данная задача решается компоновкой примеров, которые есть в справке.
справкой видимо я тоде не научился полноцеено пользоваться если подскажете что то полезное в этом направлении будет здоорово

----- добавлено через 53 сек. -----
Всем спасибо за наводки буду пробовать
Simson вне форума  
 
Непрочитано 11.03.2018, 14:23
#30
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


все равно с первого раза не получиться конечный вариант) Сначала будете выгребать всякие логические ошибки, потом в процессе работы всплывают какие то рабочие нюансы и снова переделывать. С фильтрами наборов будет быстрее работать, с циклом проще в понимании на первое время. Всегда можно переписать код, используя фрагменты уже отлаженного кода из предыдущих версий)
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.03.2018, 15:47
#31
Simson


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


это дело понятное. я начал как раз с перебора и осознания всяких методов и свойств дин блоков
что то получается.. количество и имена я все таки изъял
а вот со свойствами загвоздка.
как задать переменную чтоб ей присвоить свойство дин блока?
так не работает:
Код:
[Выделить все]
Dim blk As Object
blk = blo.GetDynamicBlockProperties

Последний раз редактировалось Simson, 11.03.2018 в 15:52.
Simson вне форума  
 
Непрочитано 11.03.2018, 16:08
#32
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,295
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Simson Посмотреть сообщение
это дело понятное
мне не совсем...
я понимаю, что ты создаешь очередную супер секретную программу...
если не затруднит.. озвучь алгоритм ее работы хотя бы в общих чертах, с чего она начинает и что болжно получиться в итоге...
не хочу показаться резким но таких велосипедов уже есть больше чем один.
и сообщество возможно даст тебе ссылки на готовое..
если жэж это нечто неординарное.. мне было бы очень интересно и познавательно в этом поучаствовать

----- добавлено через ~1 мин. -----
ЧТО ДОЛЖНО БЫТЬ НА ВЫХОДЕ!
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 11.03.2018, 16:15
#33
Simson


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


может таких велосипедов и полно но пока не наткнулся ни на один.. плохо ищу? возможно..
суть как и говорилось проста.. есть автокад с кучей блоков раскиданных по всему чертежу(благо в одном определенном заранее известном слое) нужно чтоб после изменения и сохранения начинался макрос( с этим я справился), который заключается в следующем:
считать все дин параметры блоков их имена и их количества, и количество и длины определенных полилиний.. и всю эту инфу выбросить в ексель.. а там есть классная табличка которая все что нужно посчитает..
сейчас задача стоит собственно лишь в считывании информации из автокада.. все что до и после уже работает

----- добавлено через ~3 мин. -----
на выходе при сохранении автокада в экселе готовые расчитанные данные

----- добавлено через ~5 мин. -----
я это сделал через коммнадную строку встроенной функцией извлечения.. но она выполнялась после кода.. поэтому нужно было сохранить дважды чтоб работало..

Последний раз редактировалось Simson, 11.03.2018 в 17:08.
Simson вне форума  
 
Непрочитано 11.03.2018, 19:00
| 1 #34
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


вот из экселя и стучались бы в акад через позднее связывание. Через SelectionSet и фильтры сграбливаете информацию из акада и сразу заполняете свою "хитрую" табличку.
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.03.2018, 19:50
#35
Simson


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


да я вот как раз сейчас разгребаю в этом направлении..
до этого казалось такое извлечение единственный выход..
застрял на моменте когда присваиваю переменной свойства дин блока. вот здесь ошибку выдает
Код:
[Выделить все]
Dim blk As Object
blk = blo.GetDynamicBlockProperties
как исправить?

----- добавлено через ~2 мин. -----
а я из экселя могу достучаться до событий автокада? как же макрос будет запускаться?
Simson вне форума  
 
Непрочитано 11.03.2018, 19:58
#36
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,295
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Simson Посмотреть сообщение
а я из экселя могу достучаться до событий автокада? как же макрос будет запускаться?
если не будешь пользовать командные методы, тебе события ... не уперлись.. а для такой простой задачи, как в вебеа извлечь данные из блоков, разобрать их и выплюнуть например в таблицу того жэж автокад.. даже эксель не нужен.. блокнот и расширение файла vbs
__________________
Мастерская СПДС
doctorraz вне форума  
 
Автор темы   Непрочитано 11.03.2018, 20:03
#37
Simson


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


ну допустим я не использую командные методы. но автокад это такая подвижная субстанция.. все время что то меняется.. поэтому хотелось бы что это автоматически все подгружалось в случае изменения... зря я что ли это пишу? чтоб кнопку запуска макроса самому тыкать каждый раз?
Simson вне форума  
 
Непрочитано 11.03.2018, 20:06
#38
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,295
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Simson Посмотреть сообщение
хотелось бы что это автоматически все подгружалось в случае изменения... зря я что ли это пишу? чтоб кнопку запуска макроса самому тыкать каждый раз?
есть такое решение, но рад не будешь, лучше получать отчеты когда все готово... иначе тормоза жестокие неминуемые.

----- добавлено через ~2 мин. -----
даже автодеск это не пользует в своих вертикалках (а они то в курсе).. параметризация и дин блоки с табицами параметров.... это такое г...
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 11.03.2018, 20:08
#39
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,036


Цитата:
Сообщение от Simson Посмотреть сообщение
как исправить?
читать справку. И смотреть не только на аргументы, но и на тип возвращаемого значения.
Сергей812 вне форума  
 
Автор темы   Непрочитано 11.03.2018, 20:09
#40
Simson


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


так кнопку сохранения и тыкают обычно когда все готово.. если раз в день будет макрос запускаться то не страшно думаю)

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
И смотреть не только на аргументы, но и на тип возвращаемого значения.
подробнее не скажете? секрет?
Simson вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > vba, как посчитать количество блоков с помощью item и handle?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Слой и стили. Их создание, установка текущими, и возврат к исходному состоянию после завершения команды Browning Zed LISP 7 23.02.2018 11:36
Очистка временных файлов после вызова команды Копировать в буфер olga87 LISP 12 15.11.2017 12:45
Как настроить AutoCAD. Сохранение протокола командной строки после закрытия файла auzerius Программирование 2 01.11.2015 17:25
Зависание системы после установки AutoCAD 2010 Westroy AutoCAD 1 11.05.2010 15:27
Зарос в командной строке русского AutoCAD. {Smirnoff} AutoCAD 4 12.01.2006 14:06