|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
VBA в AutoCAD
Регистрация: 11.08.2005
Сообщений: 921
|
||
Просмотров: 17907
|
|
||||
новичок Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396
|
в vba получается косовато: нет динамического вида создаваемых объектов (максимум резиновая лента). если есть оригинальные задумки лучше сразу изучать си и писать .arx приложения.
если получится изучить .arx, и понравилась идея: http://dwg.ru/dwl/453 , то можно будет переписать (самому времени не хватает). |
|||
![]() |
|
||||
Уважаемые коллеги!
Противоположный вопрос - а как отключить VBA в автокаде? У одной из наших сотрудниц он автоматически грузится во все файлы, создаёт ненужные и непонятные макросы, x-refы и откровенно мешает работать. Отключить не сумел, загружаеется и довольно долго при входе в ACAD. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Можно не так жестоко, по-моему:
- поискать файл acad.dvb и снести его, если он находится по путям поддержки када. - где-то на autocad.ru вроде как была тема по поводу отключения vba-макросов. Но как это делать, я чего-то не усек - даже в какой области копаться.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
новичок Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396
|
может быть в dwt шаблоне есть встроенный макрос, и по этому vba грузится автоматом. (соответственно он есть и вовсех созданных по этому шаблону файлах. и при их загрузке автоматом подгружаются vba.
Выковырять их можно так: запустить диспетчер vba: сервис->макросы-> диспетчер vba в диалоговом окне - кнопка в рамке "Рисунок" - ИЗВЛЕЧЬ или по п 2. см выше. хотя обычно макросы (хорошие) позволяют несколько расширить акад и повысить производительность. опущусь до саморекламы http://dwg.ru/dwl/453 |
|||
![]() |
|
||||
новичок Регистрация: 19.06.2005
Ярославль
Сообщений: 3,396
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 13.06.2005
Сообщений: 314
|
Цитата:
"_copybase 0,0,0 l " "_erase l " "_pasteclip" |
|||
![]() |
|
||||
Регистрация: 24.06.2007
Minsk
Сообщений: 34
|
Может есть тут специалисты по VBА, хочу для ACADа на VBA реализовать след. вещь - поиск элементов (линий, блоков и т.д.) аналог команды - "_qselect". Для начала надо найти в чертеже все блоки с именем "*Ux", где х - лубое число от 0 до 1000 и выбрать их... можте кто поможет, подскажет...
или может кто пример скинет, чтобы просто выбирал все линии, а я потом разберусь как нить... Спасибо... Жду... |
|||
![]() |
|
||||
Регистрация: 06.04.2009
Сообщений: 702
|
Sub Example()
Dim BlockObj As AcadBlockReference Dim entry As AcadEntity For Each entry In ThisDrawing.ModelSpace If entry.ObjectName = "AcDbBlockReference" Then Set BlockObj = entry MsgBox BlockObj.Name 'имя текущего блока, дальше делай с ним что нужно '(перебираются все вхождения блоков в модели) End If Next End Sub
__________________
КазнитьØнельзяØпомиловать:eek: |
|||
![]() |
|
||||
Регистрация: 15.03.2010
Сообщений: 3
|
Друзья, подскажите пожалуйста начинающему программисту.
У меня есть фрагмент программного кода, который ищет первый приметив и выводит его имя: Код:
Последний раз редактировалось Кулик Алексей aka kpblc, 15.03.2010 в 11:37. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Интересно... а какие координаты должны быть в результате, например, у выноски? Или у размера?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692
|
Добавь после
Код:
Код:
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Это "получилось" до тех пор, пока у текста (если, конечно, имеется в виду именно однострочный текст) выравнивание установлено "вниз-влево".
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692
|
Ну, ошибки код не выдает и при другом выравнивании..
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Ошибку-то он не выдаст. Но вот какие результаты?
Создаем примитив TEXT следующим лиспом (ну так, чтобы запутать ![]() Код:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692
|
Цитата:
![]() Код:
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
http://www.arcada.com.ua/forum/viewtopic.php?t=653
Offtop: Cейчас в раздумках - вносить статью на сайт autolisp или нет...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Вот для начала пример, а далее уже добавите что требуется.
|
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Если хотите писать на VBA под 64битный автокад старых версий (вроде в 2014 только новый VBA появился) - то ожидайте "приятных" сюрпризов. Так как нормального 64битного VBA в старых версиях нет, есть лишь обертки над 32битным.. И поэтому может быть все что угодно - у меня "последней каплей" стало периодическое пропадание стандартных функций типа "Mid" во время вызова макросов)
|
|||
![]() |
|
||||
Регистрация: 07.02.2012
Сообщений: 10
|
Мне нужно просто переменной присвоить значение атрибута блока, который будет выделен мышкой. На сегодняшний день я вынужден вначале запускать Lisp-программу, которая атрибуты переводит в однострочный текст, а потом МОЕЙ программой на VBA забирать этот текст куда мне надо. Я очень хочу уйти от использования Lisp программы, так как не хочу разрушать блоки.
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Ваше право, хотя чем больше занимаюсь лиспом - тем больше очаровываюсь его элегантностью) Хотя сложные вещи - однозначно NET (из знакомых технологий), имхо.
У вас блок статический, динамический? ----- добавлено через ~9 мин. ----- Точнее атрибут. Для статических атрибутов будет выглядеть примерно так код Сейчас в блокноте напишу примерный код) А то глючит форма ввода ----- добавлено через ~7 мин. ----- В общем, примерно (написан на коленке) такой код: Код:
----- добавлено через ~4 ч. ----- Да, если где то будет ругаться при присваивании - что типа требуется объект, то перед переменной ставите Set %Переменная% = %Выражение%. Выдирал из старого проекта на VB.NET, там чуть синтаксис отличается. Последний раз редактировалось Сергей812, 30.11.2014 в 19:59. Причина: Добавил выход из цикла |
|||
![]() |
|
||||
Регистрация: 07.02.2012
Сообщений: 10
|
К сожалению код в среде VBA не работает (дает ошибку) VB.net я не знаю. У меня много разных наработок на VBA и очень не хватает теперь этой возможности получить атрибут. Кстати блок у меня динамический, тег у блока например
"WWWW", нужно нажать кнопку на моей форме (немодальной), указать мышкой блок и получить в окне формы значение атрибута |
|||
![]() |
|
||||
Регистрация: 07.02.2012
Сообщений: 10
|
Код "Сергей812" на VBA не работает. Мне нужно получит value атрибута блока, который я выделю мышкой
Dim lBlock As AcadBlockReference Dim lAttrBlock As Object Dim I1 As Integer 'Если у блока есть атрибут If (lBlock.HasAttributes) Then ' Получаем атрибуты блока lAttrBlock = lBlock.GetAttributes() For I1 = 0 To UBound(lAttrBlock) if(lAttrBlock(I1).TagString = "%Имя атрибута откуда взять значение%")then ' И получаем значение атрибута % Ваша переменная %=lAttrBlock(I1).TextString Exit For End If Next I1 End If |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
trir, может, не GetEntity, а GetSubEntity?
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409
|
Получи указатель на вхождение атрибута и сними TextString (кажется, так).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Offtop: Вот молодец michvp, ловко провернул.
Сначала сказал что у него есть программа на VBA: Ему коды из справки накидали, но он шлангом прикинулся и в итоге за него все написали. Хотя любой, кто написал СВОЮ программу на VBA под автокад или офис, эти куски кода собрал бы в легкую, да и вообще подобного вопроса не задал бы, т.к. как работать с атрибутами в справке написано. Молодец. Я вот так не умею, потому и восхищаюсь. Вопрос к админам: А название топика разве не нарушает п.4.3 правил форума? |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
толку от того, что он получил значение атрибута?)
Но вот упоминания: я в программировании не силен, нету времени разбираться и т.д. - давно уже пора внести в список отягчающих... ) не видно-что человек хоть что-то пытался сам сделать... в программировании ему делать нечего, имхо |
|||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692
|
Цитата:
![]()
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
![]() |
|
||||
Регистрация: 07.02.2012
Сообщений: 10
|
Поясняю для BOXA: Атрибуты не использовал, а если встречались, то применял программу <bgtools2.27.lsp>, которая превращала значения атрибутов в однострочный текст.
Затем моей программой на VBA получал координаты нужных мне объектов и однострочного текста, в который превращались атрибуты. Теперь я понял, как можно напрямую получать значение атрибута и, естественно, включил фрагмент этого кода в свою программу. Кстати, хотелось бы все переписать на Lisp, пока его изучаю. Еще раз спасибо за возможность разобраться с кодом для получения атрибутов. В справке было не понятно. Последний раз редактировалось michvp, 03.12.2014 в 15:16. |
|||
![]() |