Тема: ObjectARX. Построение аксонометрий по ГОСТ

Привет всем!
То о чем так долго говорили на этом форуме, свершилось!
Начата работа над программой, которая строит аксонометрические проекции в соответствии с ГОСТом.
Именно начата, так как, хотя она уже что-то делает, но возможностей в нее еще включить можно очень много.
Критике и советам специалистов я буду только рад!
Отвечая на сообщение от Александра,
https://www.caduser.ru/forum/topic3091.html
могу сказать лишь одно, что за эти несколько дней я сумел впихнуть в программу только то, что она сейчас умеет :)
Со всем, о чем Вы написали, я бесспорно согласен.
Но это все предполагается сделать в будущем, если конечно проект будет развиваться...
Апроксимацию дуг и пр. подобных примитивов я выпоняю не отрезками, а делаю сплайн (AcDbSpline) по точкам.

Re: ObjectARX. Построение аксонометрий по ГОСТ

Скачать можно здесь
http://microstation.narod.ru/acad/aks/

Re: ObjectARX. Построение аксонометрий по ГОСТ

ок. Вопрос пока только один: где будет вестить обсуждение? здесь? на сайте? или только почта и без вариантов?

Re: ObjectARX. Построение аксонометрий по ГОСТ

> kpblc
Если Леонид не возражает, предлагаю обсуждение вести здесь.

> Леонид
Если нужны советы, помощь и т.д. - не стесняйтесь - чем смогу - помогу. Вы делаете очень полезную вещь!

Re: ObjectARX. Построение аксонометрий по ГОСТ

Имхо, общение по типу форума пока здесь, если что-нить конкретное - тогда на почту.
Если что не так, администратор меня подправит :)

Re: ObjectARX. Построение аксонометрий по ГОСТ

> Леонид
Леонид, Вы попались! smile
Установил Вашу программу и сразу несколько замечаний:
1) В режиме SDI = 1 не работает, разваливает AutoCAD.
2) Предлагаю дать возможность пользователю выбирать примитивы из которых будет строится аксонометрия.
3) Предлагаю вставлять аксонометрию в текущий dwg-файл (все созданные примитивы висят на курсоре и пользователь имеет возможность указать куда все это хозяйство поместить) или добавить в далоговое окошко опцию для выбора вставлять в текущий чертеж или в новый.
4) Кнопка "Закрыть" - IMHO лишняя. Есть стандарт Windows закрывать окна крестиком.
5) Кнопка "Об Авторе..." - информацию об Авторе (т.е. о Вас) IMHO следует выдавать в диалоговом окне или MessageBox(). Как-то сейчас не эстетично - окно остается на месте, а за ним что-то печатаеся в несколько строк.
Это для начала... smile

Re: ObjectARX. Построение аксонометрий по ГОСТ

P.S.: А из каких соображений диалоговое окно остается на экране после нажатия кнопки "Создать"? Логичнее IMHO его было бы закрывать...

Re: ObjectARX. Построение аксонометрий по ГОСТ

Окей, процесс тестирования пошел :)
1. Про режим SDI не подумал, у нас его никто не использует, посмотрю. Вываливаться автокаду не позолим!
2. Выбирать примитивы? По моему, выбор не очень богат - линии, полилинии. Имхо, это не первоочередное.
3. Насчет вставки в текущий файл - думал над этим, тоже будет добавлено.  Правда насчет висения на курсоре не обещаю :) Как повесить на курсор примитив, пока не въехал...
4. Это спорно :) Некоторые пользователи даже требуют, чтобы было меню.
5. Я тоже поначалу делал MessageBox, но потом решил, что пользователю было-бы удобнее скопировать адреса из командной строки.
Насчет после нажатия...
Да, логичнее окно после создания аксонометрии убрать, согласен.

Re: ObjectARX. Построение аксонометрий по ГОСТ

Леонид пишет:

Выбирать примитивы? По моему, выбор не очень богат - линии, полилинии. Имхо, это не первоочередное.

Не скажи... Я имел в виду возможность выбирать не по типу примитивов, а часть чертежа. Пример. На чертеже есть 3D и ты уже вставил одну аксонометрию. Теперь хочешь получить другую. И что теперь первая аксонометрия тоже будет повторно обработана? sad

Как повесить на курсор примитив, пока не въехал...

Самый простой способ - все вновь созданные примитивы объединяются в набор (используя функцию acedSSAdd). Ну а дальше, например acedDragGen.
Не стесняйся спрашивать! smile

Re: ObjectARX. Построение аксонометрий по ГОСТ

Да, это все полезные замечания, спасибо.
Но на самом деле сейчас, мне кажется, первоочередная задача - это расковырять солиды с мешами на линии и точки, по которым можно строить.
Буду разбираться с AcBrBrep...
Не случаем примерчика итерации по граням AcDb3dSolid?
Сейчас я смотрю их официальный пример BRDUMP. Но уж больно там наворочено...

Re: ObjectARX. Построение аксонометрий по ГОСТ

> Леонид
AcBrBrep - это хорошо, но IMHO не нужно. Вы проигнорировали мою идею с AcDbEntity::explode(), а зря!

AcDb3dSolid[b]->[/b]AcDbRegion|AcDb3DSolid
AcDbRegion[b]->[/b]AcDbLine|AcDbSpline|AcDbArc|AcDbCircle
AcDbPolyFaceMesh[b]->[/b]AcDbFace

Очень полезная табличка!
Путем последовательно расчленения Вы получите элементарные примитивы, с которыми уже умете работать. Внимание! В отличие от команды _EXPLODE, метод explode не добавляет новые примитивы в dwg-файл. Для них следует просто выполнить delete pEnt;

Re: ObjectARX. Построение аксонометрий по ГОСТ

Я так понял, что имеется ввиду - разнести все содержимое файла на кусочки, и на основании этих ошметков построить результат...
Но такой вариант, мне кажется, пользователи не одобрят.
Тот вариант, что ничего на самом деле не взрывается, меня вполне устраивает :)
Попробую...

Re: ObjectARX. Построение аксонометрий по ГОСТ

Леонид пишет:

Тот вариант, что ничего на самом деле не взрывается, меня вполне устраивает :)

Так а я о чем! Учите матчасть! biggrin
Кроме того этот метод избавит Вас от проблем с блоками, внутри которых тоже могут быть полезные для аксонометрии примитивы!
Кстати, если бы Вы использовали не метод explode(), а команду _Explode, но окаймили бы ее _Undo _Mark и _Undo _Back, то пользователи бы особо возражать бы не стали. Все бы осталось на месте. Но это менее эстетично...

Re: ObjectARX. Построение аксонометрий по ГОСТ

Раз уж такое дело пошло, тогда еще вопрос :)
Это просто два разных способа пройтись по содержимому сложных примитивов - explode() и AcBrBrep, или же в каждом заключена какая-то своя изюмина?

Re: ObjectARX. Построение аксонометрий по ГОСТ

explode() значительно универсальнее, а AcBrBrep применима только к AcDb3dSolid и AcDbRegion...

Re: ObjectARX. Построение аксонометрий по ГОСТ

Большое спасибо за консультацию! :)
Всё очень пригодится.

Re: ObjectARX. Построение аксонометрий по ГОСТ

Прошу прощения за вмешательство. В технологиях ObjectARX я, можно сказать, "ни бум-бум", но в "аксонометриях" "немного бум".
Задача безусловно очень нужная и перспективная. Поэтому может быть начать с постановки? Сформулировать, что мы желаем получить и из чего, при каких условиях, с какими ограничениями и т.п.
Иначе может оказаться, что "у нас его не используют", так не делают, такими примитивами не рисуют и т.п. То есть задача из перспективной и в коммерческом плане превратится в частную для одного компьютера и будет не интересна.

Re: ObjectARX. Построение аксонометрий по ГОСТ

Ваше вмешательство очень уместно!
В постановке задачи я исходил из положений ГОСТа. Главное на начальном этапе, имхо, - разработать основной алгоритм построения аксонометрии. Но общая постановка задачи тоже нужна.
Например, уже есть предложение ввести опцию зеркального отображения, то есть чтобы ось Y смотрела влево.
Какие у Вас есть предложения?

Re: ObjectARX. Построение аксонометрий по ГОСТ

Вот насчет оси Y влево - сомневаюсь, что надо. По крайней мере в строительном проектировании такое никогда не применяется. Но это не принципиально.
Честно говоря, я скептически отношусь к автоматическому построению "сантехнической аксонометрии"  из 3D-модели. Принципиально возможно - сам время от времени возвращаюсь. Но желаемого результата не будет, как не будет от систем машинного перевода.
В отдельных, простеньких случаях - возможно. Типа параллелепипеда.
Поясню, почему. Такая проекция традиционно применяется в разной сантехнике.
А там бывает очень много труб, идущих на большие расстояния, с мелкими деталями. При черчении на плоскости схема делается только в примерном масштабе, так как просто невозможно начертить точно в М1:100, например, 4 трубы (пусть две) идущих параллельно на 100 м с расстоянием между трубами 80 мм. Все сольется.
Кроме того, в трубы врезана арматура и другие изделия. Они по реальной величине маленькие (те же 80 мм), а отображаются внемасштабными условными знаками.
А еще участки схем визуально накладываются друг на друга и их приходится растаскивать, делать разрывы и т.п.
Если же мы возьмем модель в 3D, то, даже имея отработанный алгоритм, мы получим непригодную схему. Ее потом, конечно можно править, но правка будет нудная.
Но все можно упростить. Если схему делать не из примитивов наподобие SOLID, а только из осевого каркаса. Модель разные программы (ABS, MagiCAD) делают по своему. Еще надо разбираться с их причудами. А вот "обвести" любую модель осевой линией несложно (иногда она уже есть). И преобразовывать не всю модель, а только ось. Это значительно проще.
А уже потом будет возможность доработать плоскую заготовку по вкусу.

Re: ObjectARX. Построение аксонометрий по ГОСТ

Да, про все, что Вы говорите, я в курсе.
Конечно, никто и не претендует, что эта программа сразу все отрисует как надо.
Для сложных моделей менять и дорисовывать придется в любом случае.
Главное, что рисовать не надо, нужно только двигать!
Здесь все упирается в то, какие исходные данные берутся для построения аксонометрии.
Например, для MagiCAD можно использовать генерируемый им отчет в екселевском файле.
Можно фильтровать оси по какому-нибудь признаку при прочесывании. Главное - знать, что именно в данный момент нужно :)
Вообще, эту штуку я собираюсь делать по лицензии GPL - http://consumer.nm.ru/gpl_ru.htm
По сему, скорее всего, скоро выложу на сайте исходники.
Только надо все подготовить.
Чтобы каждый мог доделывать под себя.
Меня, имхо, на всех не хватит... :)
Постараюсь сделать наиболее универсальные вещи, по мере возможности.

Re: ObjectARX. Построение аксонометрий по ГОСТ

> ShaggyDoc
Извините, не сразу въехал. Смежники замучили :)
Как я понял, Вы предлагаете сделать опцию выбора примитивов по атрибутам? Например - построить аконометрию только по линиям с таким-то цветом и стилем.
Это сделать не сложно, учтем!

Re: ObjectARX. Построение аксонометрий по ГОСТ

> Леонид
Это отчасти пересекается с тем, о чем я уже писал - дать возможность пользователю самому выбрать то, что попадет в аксонометрию - элементарный acedSSGet(...). Ему это особенно удобно будет сделать, если он поотключает ненужные слои...
А вот что имел в виду уважаемый ShaggyDocговоря об осях, и мне не очень понятно... Если речь идет о сантехнических трубах - тогда ясно, что нужны оси. Правда если эти трубы нарисованы с использованием AcDb3dSolid - как получить ее ось - это вопрос... А если это custom-примитивы, то еще проблематичнее.
Еще одна мысль - примитивы в проекции разнести по слоям в зависимости от типов исходных примитивов. IMHO так с ними легче будет разбираться...

Re: ObjectARX. Построение аксонометрий по ГОСТ

1. Во-первых, прошу прощения про "насчет оси Y влево". Сразу возникла путаница в понятиях. Если сейчас "ось Y - вправо, как в скриншотах программы", то те, кто требует влево правы.
Для простоты - ось X аксонометрии на плоскости должна быть направлена на восток, а ось Y - на "северо-восток". Или на "юго-запад", если так удобнее, т.е. под углом 45 или 225 градусов по отношению к X в Автокадовских стандартах.
2. Я имею ввиду именно сантехнические трубы. А где еще понадобится такая проекция? В других случаях (с изделиями) вполне подойдет любая изометрия. А у труб всегда есть ось.
Получить ось из модели будет трудно - если модель не создана выдавливанием и ось осталась. Особенно трудно (невозможно?) - из custom. Поэтому и предлагаю сузить задачу. Ось у модели можно и обвести, а можно и при 2D черчении с планами и разрезами создать каркасную 3D-модель только осей специально для последующего преобразования. Это может значительно облегчить все.
3. Конечно преобразования надо производить только с набором. Это стандарт работы, понятный всем. Отбрасывать нераспознаваемые примитивы можно при формировании набора.

Re: ObjectARX. Построение аксонометрий по ГОСТ

> Александр Ривилис
Насчет выбора объектов я согласен. Но в отличие от построения сечиний в автокаде, я все-таки предоставлю пользователю выбирать - надо ему выделять или нет. Я сам, например, привык делать сечения без всякого выделения, просто отключив все ненужные слои.
Насчет разноса элементов по слоям - это тоже нужно.
Список требуемых добавлений не отстает от кода программы! :)
Пока, как мне кажется, есть другие важные задачки, например как взорвать бронированый AcDbBody...

> ShaggyDoc
Сделать зеркальным отображение аксонометрии элементарно - просто поставить в коде минус. Сложнее галку с этой опцией добавить! :)
Такого рода аксонометрические схемы встречаются еще для других сетей, например отопления и вентиляции. Типичный пример - аксонометрия по модели MagiCAD. Там действительно не нужны будут полностью все примитивы модели, только оси.
Как это решать, я еще до этого не добрался.
Два варианта - дибо копаться во внутренностях MagiCadа (в успешности этого я не уверен), либо делать аксонометрию по отчету элементов, генерируемому по модели. Там есть все, и координаты, и типы и пр.

Re: ObjectARX. Построение аксонометрий по ГОСТ

> Леонид
Под "сантехническими трубами" я подразумеваю все системы - отопление, вентиляция, водопровод, канализация, газ, технологические трубопроводы и т.п. Включая трубы, воздуховоды, газоходы.