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

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

Как связать 2 блока Autocad при помощи VBA?

Ответ
Поиск в этой теме
Непрочитано 21.07.2015, 14:26 #1
Как связать 2 блока Autocad при помощи VBA?
allrather
 
Минск
Регистрация: 27.02.2011
Сообщений: 169

Доброго времени суток. Ребзя, необходимо решить конкретную задачу при помощи VBA, за которой последуют великие открытия, и я захвачу мир.
Итак, суть..
Имеем 2 блока (см. скрин 1). 1-й блок – динамический (с двумя простыми операциями изменения длины и ширины). 2-й блок – просто блок, думаю, позже придется и его сделать динамическим, но, пока что, не суть.
Так вот, допустим 1-й наш блок имеет размеры 100х50, 2-й – абсолютно рандомный.
Хочу, чтобы размеры 2-го блока зависели от размеров 1-го.
Например,
1-й блок: L1=100, B1=50.
2-й блок: L2=2*L1=200, B2=3*B1=150.
Соответственно, при изменении 1-го, менялся бы и второй.
Что сделано? При помощи VBA я научился читать атрибуты указанного блока и выводить их в MsgBox или листбокс, или записывать куда-нибудь. На этом, пока что все.
Представляю, что 2-й блок можно бы было сделать через координаты точек, которые были бы завязаны с атрибутами 1-го блока, затем построить прямоугольник из четырех линий.. И было бы норм (только для прямоугольников). Но мне кажется, что должен быть вариант попроще.

Буду очень признателен за помощь. :*

Миниатюры
Нажмите на изображение для увеличения
Название: Screen Shot.JPG
Просмотров: 67
Размер:	40.6 Кб
ID:	153732  

Вложения
Тип файла: dwg
DWG 2013
Чертеж.dwg (233.7 Кб, 1236 просмотров)


Последний раз редактировалось allrather, 21.07.2015 в 14:42. Причина: Нарушение п.4.3 правил форума
Просмотров: 5430
 
Непрочитано 21.07.2015, 14:54
#2
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,596


второй блок можно сделать в виде квадрата со стороной 1 и 1 и программно задавать ему масштаб по разным осям, например =)
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Автор темы   Непрочитано 21.07.2015, 14:56
#3
allrather


 
Регистрация: 27.02.2011
Минск
Сообщений: 169
Отправить сообщение для allrather с помощью Skype™


swell{d}, можно. Но, как только захочется делать подобные вещи с элементами типа тавр, Ваш метод исчерпает себя. )
allrather вне форума  
 
Непрочитано 21.07.2015, 15:00
#4
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,596


ну блин, между прямоугольником и тавром две большие разницы. тогда тупо построения.
там на видео, все мелкие каркасики (плоские/пространственные) у меня сначала строятся внутри блока, а затем эти блоки просто вставляются на чертёж в нужных местах.
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Автор темы   Непрочитано 21.07.2015, 15:32
#5
allrather


 
Регистрация: 27.02.2011
Минск
Сообщений: 169
Отправить сообщение для allrather с помощью Skype™


Цитата:
Сообщение от swell{d} Посмотреть сообщение
ну блин, между прямоугольником и тавром две большие разницы. тогда тупо построения.
там на видео, все мелкие каркасики (плоские/пространственные) у меня сначала строятся внутри блока, а затем эти блоки просто вставляются на чертёж в нужных местах.


swell{d},
Видео просматривал уже не раз (Лайк ставил ). Но неужели все строится через примитивы?
Схема получается совсем не гибкая!
В моем случае тогда уж проще уповать на связь динамики с параметрикой и надеяться, что они сработаются!

Неужели нельзя увязать иначе два блока?
allrather вне форума  
 
Непрочитано 21.07.2015, 16:01
#6
swell{d}

гадание на конечно-элементной гуще
 
Регистрация: 31.05.2006
Düsseldorf
Сообщений: 7,596


сформулируйте задачу конкретнее. пока речь про прямоугольник - всё элементарно. если тавр, то какой? что ещё, кроме тавра может выскочить?
__________________
.: WikiЖБК + YouTube :.
swell{d} вне форума  
 
Автор темы   Непрочитано 21.07.2015, 23:22
#7
allrather


 
Регистрация: 27.02.2011
Минск
Сообщений: 169
Отправить сообщение для allrather с помощью Skype™


swell{d}, Если сформулировать задачу совсем уж конкретно, то у всех пропадет желание даже читать это.

Попробую пояснить иначе.
Еще раз, значит, есть динамический блок (скрин.1). В виде атрибутов я достаю из него 2 параметра (X и Y - длину и ширину).
И есть второй какой-то динамический блок (с какими-то X1 и Y1). Могу ли я сделать, скажем, второй блок зависимым от первого при помощи VBA нужным мне соотношением.
Например:
X2=2*X1=200, X2=3*X1=150.

В данном случае, не важно, будет это прямоугольник, тавр или элипс.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.JPG
Просмотров: 16
Размер:	57.8 Кб
ID:	153752  Нажмите на изображение для увеличения
Название: 2.JPG
Просмотров: 13
Размер:	37.3 Кб
ID:	153753  
Вложения
Тип файла: dwg
DWG 2013
Связка 2х блоков.dwg (122.7 Кб, 1002 просмотров)
allrather вне форума  
 
Непрочитано 21.07.2015, 23:33
#8
Кулик Алексей aka kpblc
Moderator

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


Есть вариант попробовать параметрические зависимости. Без VBA и файл будет тяжеловат, но зато прикольно получится.
А так - устанавливай динамические параметры, взяв значения с первого блока. Потом обновляй вхождение
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 21.07.2015, 23:42
#9
allrather


 
Регистрация: 27.02.2011
Минск
Сообщений: 169
Отправить сообщение для allrather с помощью Skype™


Кулик Алексей aka kpblc, дело в том, что блок, с которого я буду брать параметры, он динамический (достаточно сложный, прямоугольник - это я так, чтобы пример попроще был). И, когда я туда еще и параметрику приписываю, он начинает вести себя неадекватно. Иногда акад вылетает. Как-то не нравится мне симбиоз параметрики и динамики.


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А так - устанавливай динамические параметры, взяв значения с первого блока. Потом обновляй вхождение
Звучит просто, не мог бы ты пояснить?
allrather вне форума  
 
Непрочитано 21.07.2015, 23:52
#10
Кулик Алексей aka kpblc
Moderator

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


Если бы я писал на VBA, я б, наверное, и пример привел. Я общий принцип расписал - см. DynamicProperties, получаешь коллекцию, высчитываешь элементы и т.д.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.07.2015, 11:55
#11
allrather


 
Регистрация: 27.02.2011
Минск
Сообщений: 169
Отправить сообщение для allrather с помощью Skype™


Кулик Алексей aka kpblc, да, ты был прав, dynamicproperties, затем через propertyname получаешь то, что нужно..

Еще один товарищ направил на путь истинный, денек, и все работает. Сижу на работе - счастливый.
Приду домой, запишу видео и код, может, кому будет интересно.
allrather вне форума  
 
Непрочитано 24.07.2015, 12:29
#12
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,326


Мне интересно. Еще лучше выложи 2 (*.dvb и *.dwg - с этими блоками) файла
v.psk вне форума  
 
Автор темы   Непрочитано 24.07.2015, 18:46
#13
allrather


 
Регистрация: 27.02.2011
Минск
Сообщений: 169
Отправить сообщение для allrather с помощью Skype™


Привет. Вот скринкаст по блокам.
https://screencast.autodesk.com/Main...b-2b91bd6b079f

Прикрепляю также акадовский файл и сам код. Надеюсь, кому-то будет полезно.

PS За код строго не судите, первый месяц изучаю VBA.

Тему можно считать закрытой.
Вложения
Тип файла: dwg
DWG 2013
Чертеж.dwg (92.0 Кб, 715 просмотров)
Тип файла: rar GetDynamicBlockProps.rar (8.1 Кб, 71 просмотров)
allrather вне форума  
 
Непрочитано 24.07.2015, 21:56
#14
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,326


Цитата:
Сообщение от allrather Посмотреть сообщение
Прикрепляю также адовский файл
еще бы в 2010 сохранил чтобы не конвертить
v.psk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как связать 2 блока Autocad при помощи VBA?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autocad plugin на Delphi kolio Программирование 10 03.08.2013 22:06
Проблема в объектном отслеживание (AutoCAD 2013-2014) gomer8 Баги и пожелания в Autodesk 0 19.06.2013 12:22
Extended AutoCAD .Net API hwd .NET 5 22.08.2012 19:38
Что нового в AutoCAD 2005 ilka_t AutoCAD 40 19.05.2004 16:48