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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp Аксонометрия обработка блока

AutoLisp Аксонометрия обработка блока

Ответ
Поиск в этой теме
Непрочитано 14.03.2011, 14:11 #1
AutoLisp Аксонометрия обработка блока
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Друзья, нашел здесь замечательную прогу gakson (akspro не рассматриваю, так как нет исходников). В общем вопрос в следующем, там обрабатываются различные объекты, но нет блоков. Может кто-нибудь поможет кодом, как это все обработать. Нужно следующее - в блоке есть атрибут высоты. Нужно вначале достать его сравнить с предыдущим (если есть) и в зависимости от этого подняться или опуститься (нрисовать соответственно линию). Сам блок если он типа1 (представляет из себя динамический блок трубы, в котором 3 визибл сета, один из них это просто линия, так вот труба будет в одну линию) отрисовать в одну линию под нужным углом, если он типа2 посмотреть имя блока и вставить вместо него аналог отрисованный в аксонометрии (он уже готов). Если нужен код гаксона - выложу!
Просмотров: 3387
 
Непрочитано 14.03.2011, 15:00
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Zaghim Посмотреть сообщение
akspro не рассматриваю, так как нет исходников
Есть. Выложены на сайте автора: http://www.ustation.ru/apps/akspro/index.html
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 14.03.2011, 16:09
#3
Zaghim


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


Ух...а можно как-нибудь обойтись только лиспом?
Zaghim вне форума  
 
Непрочитано 14.03.2011, 18:00
#4
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Ух...а можно как-нибудь обойтись только лиспом?
Конечно можно, и даже проще. В основе-то лежит преобразование координат истинно трехмерной точки в условные координаты аксонометрии на плоскости. Для "сантехнической аксонометрии под 45 градусов" это:

Код:
[Выделить все]
 (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
  )
)

А теперь берешь набор примитивов, циклом извлекаешь координаты точек, преобразуешь, и по новым координатам рисуешь аксонометрию уже полилиниями. Например, для отдельного примитива полилинии или отрезка это будет:

Код:
[Выделить все]
 (defun ru-3d-axonom-ent (ent start_2d_point / lst_3d_points)
 ;; обрабатывать и другие примитивы. Блоки 
  (setq lst_3d_points
         (ru-pline-list-vertex ent)
  ) 
  (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)
    ) 
    (cadr lst_3d_points)
    0
    (ru-lw-current)
    nil
  ) 
) 
Разумеется, в цикл можно включить и заходы внутрь блоков. Но проблема не в самих блоках, а во всяких более сложных, чем линии примитивах.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 14.03.2011, 20:38
#5
Zaghim


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


ShaggyDoc, спасибо конечно, но это немного не то. Блок будет просто линия (труба и отвод) мне оттуда нужно вытащить только высотную отметку, что бы если высота изменится нарисовать соответсвующую линию подъема или опуска в аксонометрии. А если будут другие блоки, например огнезапорный клапан, то он имеет определенное имя, я посмотрю на это имя и вставлю соответсвующий блок, только отрисованный уже заранее в виде аксонометрии. Вот такая идея....
Zaghim вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > AutoLisp Аксонометрия обработка блока



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное поведение динамического блока высотной отметки hwd Динамические блоки 12 08.09.2011 11:15
Чтение координат из файла Zaghim Программирование 39 13.07.2010 18:07
Как перенести в чертеж блок из файла библиотеки блоков Main Urod Программирование 8 03.02.2010 14:15
Перевод имени блока в имя переменной и обратно Supermax Программирование 11 14.12.2009 23:26
Как извлечь из блока константные атрибуты (на AutoLISP)? Matt LISP 5 19.04.2007 21:12