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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как выделить отдельные ветви электроцепи с помощью VBA? Автокад 2012.

Как выделить отдельные ветви электроцепи с помощью VBA? Автокад 2012.

Ответ
Поиск в этой теме
Непрочитано 29.10.2020, 11:29 #1
Как выделить отдельные ветви электроцепи с помощью VBA? Автокад 2012.
deaf red
 
Регистрация: 16.09.2020
Сообщений: 15

У меня есть большая электросхема. В ней каждый элемент (рубильники, автоматы) это динамический блок. Элементы соединены проводами, которые просто отрезки. Каждый блок имеет два состояния видимости -- включен и отключен. При этом каждый блок имеет атрибут нормального положения -- включен и отключен. Код ВБА перебирает все блоки и находит те, у которых не совпадает текущее положение с атрибутом нормального положения.

Теперь вопрос. Допустим в линии есть элемент с несовпадением текущего и нормального положения. Как мне выделить всю электрическую линию?

Снизу для примера приведена картинка из интернета, где кружком обозначен элемент с несовпадением, а прямоугольником -- часть электрической линии, которую надо выделить. Что делать, если нужно выделить несколько электрических линий разных размеров?

Нажмите на изображение для увеличения
Название: unnamed.jpg
Просмотров: 75
Размер:	67.7 Кб
ID:	231384

Просмотров: 7959
 
Непрочитано 29.10.2020, 13:24
#2
Кулик Алексей aka kpblc
Moderator

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


По-моему, через чистый VBA выполнить выделение не получится. И что-то у меня подозрения, что надо работать не с ACAD, а с ACAD Electrical.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 29.10.2020, 13:43
#3
Сергей812


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


Чтобы выделить - должны быть заданы взаимосвязи между элементами: слой, XData, группа и т.д. Либо пытайтесь искать ближайшие подходящие элементы по вертикали. Сам акад ничего не знает о схеме, и, соответственно, не сможет выдать никакой информации для выделения.
Сергей812 вне форума  
 
Непрочитано 29.10.2020, 13:46
#4
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 176


Цитата:
Сообщение от deaf red Посмотреть сообщение
У меня есть большая электросхема. В ней каждый элемент (рубильники, автоматы) это динамический блок. Элементы соединены проводами, которые просто отрезки. Каждый блок имеет два состояния видимости -- включен и отключен. При этом каждый блок имеет атрибут нормального положения -- включен и отключен. Код ВБА перебирает все блоки и находит те, у которых не совпадает текущее положение с атрибутом нормального положения.
Я думаю это местные лисперы сделают очень быстро и просто, Вы выделите однолинейную схему, а они пробегут по элементам и посмотрят совпадет ли динамическое состояние блока с атрибутом внутри этого блока, и если нет, то что то из них возьмут за истину и исправят другое. Или тупо отметят кружочком.

Цитата:
Сообщение от deaf red Посмотреть сообщение
Теперь вопрос. Допустим в линии есть элемент с несовпадением текущего и нормального положения. Как мне выделить всю электрическую линию?
Я электрик, но я ничего не понял. Зачем вам выделять электрическую цепь, если у Вас несовпадение в виде динамического блока - и атрибута который прописан. Не надо трогать провода.
veb86 вне форума  
 
Автор темы   Непрочитано 29.10.2020, 14:43
#5
deaf red


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Чтобы выделить - должны быть заданы взаимосвязи между элементами: слой, XData, группа и т.д
Спасибо, кажется, что группы -- это то что надо. Буду обращаться через VBA к блоку, если он не в нормальном положении, то пусть выделяется вся группа. Не знаю, можно ли так сделать, но я попробую.


Цитата:
Сообщение от veb86 Посмотреть сообщение
Я электрик, но я ничего не понял. Зачем вам выделять электрическую цепь, если у Вас несовпадение в виде динамического блока - и атрибута который прописан. Не надо трогать провода.
если в присоединении хоть один блок находится не в нормальном положении, я хочу, чтобы выделилось все присоединение. Потому я трогаю и провода тоже.

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

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
И что-то у меня подозрения, что надо работать не с ACAD, а с ACAD Electrical
Работаю с тем, что есть.

Последний раз редактировалось deaf red, 29.10.2020 в 14:52.
deaf red вне форума  
 
Непрочитано 29.10.2020, 14:51
#6
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 176


Цитата:
Сообщение от deaf red Посмотреть сообщение
если в присоединении хоть один блок находится не в нормальном положении, чтобы выделилось все присоединение, вот что я хочу. Потому я трогаю и провода тоже.
Плохо понятно. Объясните на пальцах. Что Вы понимаете под присоединением? И зачем Вам видеть все присоединение? Относительно чего программа должна понять что блок находится не в нормальном состоянии, относительно одного из атрибутов или относительно того что происходит в других местах электрической схемы?
veb86 вне форума  
 
Автор темы   Непрочитано 29.10.2020, 15:15
#7
deaf red


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


Цитата:
Сообщение от veb86 Посмотреть сообщение
Что Вы понимаете под присоединением?
Присоединение
– электрическая цепь (оборудование и шины) одного назначения, наименования и напряжения, присоединенная к шинам РУ, генератора, щита, сборки и находящаяся в пределах электростанции, подстанции и т. п. Электрические цепи разного напряжения одного силового трансформатора (независимо от числа обмоток), одного двухскоростного электродвигателя считаются одним присоединением. В схемах многоугольников, полуторных и т. п. схемах к присоединению линии, трансформатора относятся все коммутационные аппараты и шины, посредством которых эта линия или трансформатор присоединены к РУ.

А если на пальцах, то, например, от шин щита отходит рубильник, от рубильника идут шины к предохранителям, далее -- пускатель, далее -- электродвигатель. Это и есть присоединение.


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


Цитата:
Сообщение от veb86 Посмотреть сообщение
И зачем Вам видеть все присоединение
Это нужно чтобы знать в каком присоединении произошли отклонения от нормальной схемы. Потом этот кусочек схемы пойдет в другой файл.
deaf red вне форума  
 
Непрочитано 29.10.2020, 15:57
#8
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 176


Задача, конечно своеобразная, но я думаю что решаемая. Я бы стал решать на С#.net, но думаю VBA тоже должно хватить.
Что нужно что бы выделить электрическую цепь, как я вижу решение, а я подобное уже решал:
1. Шины должны быть выделены, скорее всего лучше сделать жирной полилинией и дать атрибут, если так нельзя то поместить на определенный слой
2. Внутрь каждого динамического блока поместите еще один блок с именем "connector".
3. Все провода лучше сделать полилиниями, так будет быстрее сделать, но и отрезки тоже можно. Все провода будут начинаться на коннекторе и на коннекторе заканчиваться.
4. Организуете перебор, находите неправильный динамический блок -> ищете внутри него коннекторы -> организуете перебор всех отрезков(полилиний) ищем ту у кого начало/конец лежит в координате коннектора - > ищем другой конец и то что на той стороне находится и тд пока не дойдете до ШИНЫ или не упретесь в двигатель. По ходу сохраняйте координаты движения, габариты устройств что бы их обвести красной линией.
veb86 вне форума  
 
Автор темы   Непрочитано 29.10.2020, 16:20
#9
deaf red


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


veb86, извините, я наверное вас запутал своим неправильным объяснением. Под выделением я имел ввиду выбор, как например секущей рамкой выбрать элемент чертежа. Т.е. я нашел блок, и выбрал всю линию, связанную с этим блоком. Мне не нужно было ее обводить, просто выбрать. Как через БВЫБОР.
deaf red вне форума  
 
Непрочитано 29.10.2020, 16:43
#10
Ilya405


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


Возможно это поможет http://vbamodel.narod.ru/AutoCAD/idh_select.htm
Ilya405 вне форума  
 
Непрочитано 29.10.2020, 16:53
#11
veb86

Проектировщик электрических сетей
 
Регистрация: 17.01.2014
Пенза
Сообщений: 176


Цитата:
Сообщение от Ilya405 Посмотреть сообщение
Возможно это поможет http://vbamodel.narod.ru/AutoCAD/idh_select.htm
Программно это оно самое.

А так если вы хотите городить программу через постоянный выбор секущей рамкой и перебор того чего в него попал, с последующей опять выбор сек рамкой. То это очень медленно и запутанно. Проще один раз собрать в список все устройства и узловые точки проводов. И их быстренько перебрать. Будет проще и быстрее
veb86 вне форума  
 
Автор темы   Непрочитано 30.10.2020, 13:52
#12
deaf red


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


В итоге группировка -- хорошее решение. Но как группу или даже несколько отдельных групп скопировать в буфер обмена через ВБА? Это нужно, чтобы вставить группу как часть чертежа в ворд через специальную вставку. Как я понял, группы не добавляются в SelectionSet.
deaf red вне форума  
 
Непрочитано 30.10.2020, 14:24
#13
Сергей812


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


Цитата:
Сообщение от deaf red Посмотреть сообщение
Это нужно, чтобы вставить группу как часть чертежа в ворд через специальную вставку.
В .Net бы скорее сделал бы скриншоты и уже картинки в ворд вставлял. Есть подозрение - что при достаточно большом количестве спецвставок вордовский документ будет глючить)

Цитата:
Сообщение от deaf red Посмотреть сообщение
Как я понял, группы не добавляются в SelectionSet.
Может быть, давно уже акадовский VBA не использовал. Но что мешает создать пустой набор, получить AcadGroup и в цикле занести данные из AcadGroup в набор?
Сергей812 вне форума  
 
Автор темы   Непрочитано 30.10.2020, 14:46
#14
deaf red


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
В .Net бы скорее сделал бы скриншоты и уже картинки в ворд вставлял.
Скриншот -- не совсем то, что нужно. Нужны чертежи с белым фоном, как получается при спец.вставке -> рисунок(метафайл виндоуз).

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Но что мешает создать пустой набор, получить AcadGroup и в цикле занести данные из AcadGroup в набор?
Набор это еще одна группа? в нее добавление происходит через set myGroup = ThisDrawing.Groups.Add(Имя желаемой группы)?

При этом с группами не получается провернуть CopyToClipboard или PutInClipboard не помню уже точно как пишется.
deaf red вне форума  
 
Непрочитано 30.10.2020, 14:58
#15
Сергей812


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


Цитата:
Сообщение от deaf red Посмотреть сообщение
Набор это еще одна группа? в нее добавление происходит через set myGroup = ThisDrawing.Groups.Add(Имя желаемой группы)?
Набор - это AcadCollectionSet из коллекции AcadSelectionSets.
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как выделить отдельные ветви электроцепи с помощью VBA? Автокад 2012.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выделить всю штриховку с помощью Командной строки? G1SG1SG1S AutoCAD 14 18.01.2018 11:04
Как правильно настроить Автокад 2012 ( Штриховки и Вставку растра) Tornado AutoCAD 5 03.12.2014 13:43
Окно свойств открывается поверх командной строки и области рисования. Автокад 2012. Баловник AutoCAD 6 10.12.2012 17:26
Ошибка при работе с чертежем сделанным в учебной версии автокад. Raison AutoCAD 1 16.11.2012 09:11
Проблема с переустановкой A-CAD 2012 и Civil 3D 2012 black_mts AutoCAD 1 24.11.2011 12:24