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

Ок, понял. Просто я не встречал, чтобы технологические трубопроводы называли сантехникой, хотя знаком с ними не по наслышке. Наверно так принято в других организациях. Спорить не буду.

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

> ShaggyDoc
Насчет создания планов и разрезов в 2D для последующего построения - это тоже неплохая идея. Однако, все это уже будет смахивать на навороченную систему типа MagiCAD :)

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

> Леонид
Это будет очень популярно. В 2D работают очень многие. И будут продолжать работать, потому что 3D-модель далеко не всегда нужна, хотя иногда очень полезна. Но софт для 3D сложный, дорогой и пока еще несовершенный.
Схемы же к двухмерке ничего не мешает делать трехмерными. С этим справится любая "тетка", не нужен дорогой софт и его наполнение оборудованием и деталями. Но получить вращением схемы "стандартную сантехническую проекцию" нельзя. Да и СПДС требует ее. Впрочем, дело даже не в СПДС, а в том, что "изометрия под 120" очень плохо вписывается в габариты форматов и у нее все равно остаются проблемы с наложением. Даже если она будет узаконена, большинству "сантехников" она не понравится - я уже проводил такие эксперименты.
Преобразование 3М схемы, созданной хоть по 3М-модели, хоть по плоским планам дает независимость и от "десктопов". Такие схемы достаточно просты, так как большая часть вычерчивается ортогонально, кривые и сплайны отсутствуют, в редких случаях (гибкие участки) они все равно могут создаваться отрезками прямых.
Алгоритм трансформации фактически сведется к преобразованию координат части точек с учетом удвоения длины по Y. Списки полученных точек можно обрисовать простыми примитивами, например LINE.

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

Насчет алгоритма трансформации можно поподробнее? Что вообще будет являться исходными данными - несколько файлов с планами и сечениями? Если нужно перевести только план с вычерченными на нем линиями в аксонометрию, то в данный момент программа уже это делает.
Если я откровенно торможу, то давайте так:
пришлите мне на email образцы исходных файлов, и образец той аксонометрии, что надо получить.

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

Но софт для 3D сложный, дорогой и пока еще несовершенный.

А что касается несовершенности программ для 3D, здесь я выскажу свое мнение, если Вы не против.
Если программа очень популярна, то это не значит, что она самая совершенная...
Это значит что ее очень хотят продать :)
Нормальные программы для работы с трехмеркой существовали всегда, даже в довиндозовское время в юниксах, и продолжают развиваться до сих пор. Жалко конечно, что про них у нас их мало кто знает...

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

> Леонид
О хороших программах для 2d тоже не знают.

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

Выложил обновление.
Теперь можно выбирать примитивы для схемы.

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

На данный момент из 3D солидов идет обработка только тех, которые содержат линии, то есть например куба или клина.
По идее - цилиндр как должен отобразиться в аксонометрии?..
Два круга и связывающие их две линии, идущие по касательным.
Это задача не такая простая, как отобразить просто линии,
она как раз сейчас у меня в списке задач на первом месте.
Для примера, попробуйте просто по обычному взорвать цилиндр.
Получите просто два круга, а тело цилиндра просто исчезнет,
примерно то же самое происходит и во время выполнения программы.
То же и с конусом, с тором и с другими подобными примитивами.
Думаю, это все решаемо.

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

Обновление на 29.08 здесь
http://microstation.narod.ru/acad/aks/akspro-0.1.4.zip
Исходники здесь
http://microstation.narod.ru/acad/aks/a … .4-src.zip
Предложения по оптимизации кода принимаются :)
На всякий случай напомню: продажа кому-либо этой программы без исходников нарушает лицензию.

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

Леонид, заготовка программы замечательная. Но есть нюансы.
1. Аксонометрия строится "наизнанку". На параллелепипеде это незаметно, а если трансформировать отдельную "трубу", сразу бросается в глаза. Имею ввиду то, что у тебя называется "косоугольная фронтальная изометрическая проекция" с отзеркаливанием.
Психологически объясняется тем, что чертят обычно в положительном квадранте осей XY - 0 находится слева внизу, X направлена вправо, Y - вверх. Проекция должна получиться такая же - вектор X вправо, вектор Y - на "северо-восток".
Имея 3D Poly с координатами, например (LISP-список)

(
 (0.0 0.0 0.0)
 (10000.0 0.0 0.0)
 (10000.0 0.0 5000.0)
 (10000.0 10000.0 5000.0)
)

должны получить координаты проекции

(
 (0.0 0.0)
 (10000.0 0.0)
 (10000.0 5000.0)
 (17071.1 12071.1)
 )

2. Проекцию лучше делать не в новом чертеже, а запросить указание точки начала "псевдокоординат" проекции в этом же чертеже. В частном случае - тот же 0.
А при расчете трансформированных координат точки передавать аргументом еще и точку начала координат проекции. Или смещать точки на уровне программы.

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

Окей, посмотрю, что можно сделать.
А есть какие-нибудь нормативы, по которым строятся такие схемы? В ГОСТе таких нет.

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

> Леонид
Говорю только про строительное черчение. Стандарты СПДС не разжевывают построение "асонометрии под 45", но в них во всех есть примеры схем, где они так и построены. Плюс опыт многих десятилетий, так что у сантехников и вопросов не возникает.
По стандартам чертежи зданий располагаются длинной стороной вдоль длинной стороны формата. И схемы так же чертят. Хотя иногда, для удобства восприятия, схему делают повернутой, но все равно ось Y рисуют с "автокадовским" углом 45 градусов.
А вот мои наброски на LISP.
Для набора:

(defun ru-3d-axonom-selection (/ count selection start_2d_point)
  (princ "\nВыбор объектов для создания изометрии: \n")
  (if (setq selection (ssget
                        '((-4 . "<OR")
                          (0 . "LINE")
                          (0 . "POLYLINE")
                          (0 . "LWPOLYLINE")
                          (-4 . "OR>")
                         )
                      ) ;_ end of ssget
      ) ;_ end of setq
    (progn
      (setq start_2d_point
             (ru-get-point-reguired "Начало псевдокоординат аксонометрии" nil)
            count -1
      ) ;_ end of setq
      (repeat (sslength selection)
        (ru-error-catch
          (function (lambda ()
                      (ru-3d-axonom-ent
                        (ssname selection
                                (setq
                                  count (1+ count)
                                ) ;_ end of setq
                        ) ;_ end of ssname
                        start_2d_point
                      ) ;_ end of ru-3d-axonom-ent
                    ) ;_ end of lambda
          ) ;_ end of function
          (function
            (lambda (msg)
              (princ (strcat "\nСбой создания аксонометрии "
                             ", ОШИБКА: "
                             msg
                             "\n"
                     ) ;_ end of strcat
              ) ;_ end of princ
              nil
            ) ;_ end of lambda
          ) ;_ end of function
        ) ;_ end of ru-error-catch
      ) ;_ end of repeat
    ) ;_ end of progn
  ) ;_ end of if
  (princ)
)

Для примитива:

(defun ru-3d-axonom-ent (ent start_2d_point / lst_3d_points)
  (setq lst_3d_points
         (ru-pline-list-vertex ent)
  ) ;_ end of setq
  (ru-pline-add
    (mapcar (function
              (lambda (point)
                (ru-3d-point-to-ax-point (ru-conv-point-to-3d-point point) start_2d_point)
              ) ;_ end of lambda
            ) ;_ end of function
            (car lst_3d_points)
    ) ;_ end of mapcar
    (cadr lst_3d_points)
    0
    (ru-lw-current)
    nil
  ) ;_ end of ru-pline-add
)

И трансформация точки

(defun ru-3d-point-to-ax-point (3d_point start_2d_point)
;;; Трансформация 3-мерной точки в точку на плоскости
;;; в "сантехнической аксонометрии"
;;; 3d_point - трехмерная точка
;;; start_2d_point - точка начала условных координат 2-мерной проекции
;;; 0.707107 - cos и sin 45
  (list (+ (nth 0 start_2d_point) (nth 0 3d_point) (* (nth 1 3d_point) 0.707107) 0.0)
        (+ (nth 1 start_2d_point) 0.0 (* (nth 1 3d_point) 0.707107) (nth 2 3d_point))
        0.0
  ) ;_ end of list
)

Назначение остальных ru-* функций понятно из названий.
Кстати, даже в таком виде программа сразу понравилась, и даже если чертеж вообще сделан на плоскости. Делать аксонометрию даже из 2-м линий со множеством поворотов, компенсаторов или змевиков греющего пола очень нудно, а тут один выбор и одно указание. Полученную заготовку все равно надо дополнять уже внемасштабными символами, поэтому в набор берутся только *LINE.

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

Спасибо за примеры на LISP, постараюсь в них разобраться, когда будет время, учитывая то, что для меня LISP как для китайца польский :)
На данный момент, думаю, сделаю следующим образом - предоставлю пользователю возможность самому настраивать направлнение осей X и Y на аксонометрической схеме. Можно будет их произвольно вертеть во всех направлениях, в том числе и менять искажение по оси.

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

> Леонид
Очень неплохая (как для программиста) мысль. Ее очень желательно расширить "предустановками", т.е. набором готовых вариантов, их которых пользователь может выбрать нужный.

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

> Александр Ривилис
Да, само собой. Усложнять работу пользователя - дело неблагодарное.

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

Я бы посоветовал сделать AksPro не командой, а функцией с аргументами. Аргументы позволяют работать с "предустановленными" стандартными вариантами, без диалога, начиная с выбора объектов. А одна из комбинаций аргументов (или вызов без аргументов) - диалоговая работа для любителей экспериментов.

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

Насчет функции не совсем понял. Речь идет о функции для программ LISP?
Вообще, была такая идея - просто сделать на каждый тип аксонометрии свою команду, и еще команду для схемы с последними настройками, а диалоговое окно вызывать тоже по команде, как окно опций. Наверно, к такому варианту все и придет. Уж больно много настроек в перспективе намечается, тяжеловато для стартового дилога.

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

> Леонид
То, о чем написал уважаемый ShaggyDoc можно реализовать в одной и той же функции, если определить ее в ObjectARX Wizard (которым Вы уже воспользовались) не через ARX commands, а через ADS symbols & commands, задав ей имя C:ASKPRO. Тогда если введена команда AKSPRO, то можно показать диалоговое окно и все спросить у пользователя, а если выполнен запуск функции C:ASKPRO, то ей можно передать параметры. В отличие от lisp-функций количество аргументов функции (и соответственно параметров, которые ей передаются) может быть переменным:

(C:AKSPRO [<param1>] [<param2>] ... [<paramN>])

Функция примет переданные параметры используя функцию acedGetArgs() и все сделает сама молча без лишних запросов или запросит только то, что ей не передано в параметрах. Причем какие-то параметры можно сделать необязательными и они получат значения по умолчанию. Осталось продумать список параметров, описать их для пользователя и в бой! Желаю успеха. smile

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

Да, интересная тема. Попробую.
Век живи, век учись!

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

Програмка класная. Огромное спасибо!
У меня есть предложение. А именно:
Добавить флажок Поддерживать свойства примитивов. Т. е. сделать так что веса, цвет и масштаб линий сохранялись на созданной аксонометрии.
Объясню для  чего это нужно. К примеру в 3D вычерчена большая спринклерная система, а это куча переходов диаметра труб от начала рядка спринклеров к концу. Я к примеру для подсчёта длинны труб и последующего образмеривания с помощью лисп-програмки черчу их различными весами линий, а также для каждого направления задаю свой цвет.
Если примитивы имеют цвет ByLayer то брать цвет соответсвующего слоя. Ну или вообще "экстра" в виде флажока Поддерживать слои.

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

Забыл сказать самое главное. Что это нужно для упрощения дальнейшего образмеривания диаметров труб и др. и вообще так будет легче ориентироваться если схема сложная. Хотя это и так понятно.  В моём случае количество спринклеров может исчисляться тысячами, а переходы диаметров сотнями.
Ещё раз спасибо! :)

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

> Fantomas
Окей, добавил в список задач.

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

Новая версия здесь
http://microstation.nm.ru/acad/aks/akspro-0.2.1.zip
добавлены две функции
(C:AKSPRO ...) и (C:AKSSEL ...)
аргументы - тип аксонометрии (0-4) или углы осей аксонометрии
например
(C:AKSPRO 1)
будет выполнена отрисовка аконометрии по пункту 1.2 ГОСТа   
(C:AKSSEL 0 44.5 90)
будет выполнена отрисовка по осям аксонометрии X - 0?, Y - 44.5?, Z - 90

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

http://microstation.nm.ru/acad/aks/akspro-0.2.2.zip
Добавлено сохранение в аксонометрии свойств элементов - толщина, цвет и т.д.

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

http://microstation.narod.ru/acad/aks/akspro-0.2.3.zip
Теперь цилиндры и конусы (тела) рисуются полностью.