dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

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

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

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

Simson вне форума Вставить имя

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

Код:
[Выделить все]
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.
Просмотров: 3949
 
Непрочитано 11.03.2018, 10:25
#21
Сергей812


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


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

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


Т.е. проще сделать собственный вариант "извлечения" - во избежание, как говорится
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей 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
Сообщений: 5,338


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

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 1,189
Отправить сообщение для 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
Санкт-Петербург
Сообщений: 1,786


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

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 1,189
Отправить сообщение для 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
Сообщений: 5,338


все равно с первого раза не получиться конечный вариант) Сначала будете выгребать всякие логические ошибки, потом в процессе работы всплывают какие то рабочие нюансы и снова переделывать. С фильтрами наборов будет быстрее работать, с циклом проще в понимании на первое время. Всегда можно переписать код, используя фрагменты уже отлаженного кода из предыдущих версий)
Сергей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
Волгоград
Сообщений: 1,189
Отправить сообщение для 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
Сообщений: 5,338


вот из экселя и стучались бы в акад через позднее связывание. Через 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
Волгоград
Сообщений: 1,189
Отправить сообщение для 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
Волгоград
Сообщений: 1,189
Отправить сообщение для doctorraz с помощью Skype™


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

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


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


Цитата:
Сообщение от 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

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||