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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Поворот на 90 градусов.

Поворот на 90 градусов.

Ответ
Поиск в этой теме
Непрочитано 27.07.2005, 10:15
Поворот на 90 градусов.
Pave1
 
электроснабжение и автоматика
 
г. Пермь
Регистрация: 21.06.2005
Сообщений: 329

Уважаемые знатоки. Не сочтите за труд - напишите лисп, облегчите жизнь проектировщика, плз.
Хочется получить лисп, который будет поворачивать выделенный объект на 90 градусов без указания точки вокруг которой необходимо вращать объект. Пусть он вращается вокруг своего центра.
Заранее благодарен. Павел.
__________________
хочу все знать
Просмотров: 11052
 
Непрочитано 06.05.2010, 13:40
#21
Кулик Алексей aka kpblc
Moderator

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


А если по аналогии с таким?
Код:
[Выделить все]
(vl-load-com)

(defun c:rotate-90x (/ adoc selset res midp minp maxp )

  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if (setq res (setq selset (ssget "_:L")))
    (foreach obj (mapcar
                   (function vlax-ename->vla-object)
                   ((lambda (/ tab item)
                      (repeat (setq tab  nil
                                    item (sslength selset)
                                    ) ;_ end setq
                        (setq tab
                               (cons (ssname selset (setq item (1- item))) tab)
                              ) ;_ end of setq
                        ) ;_ end of repeat
                      ) ;_ end of lambda
                    )
                   ) ;_ end of mapcar
      (vla-getboundingbox obj 'minp 'maxp)
      (setq midp (mapcar (function (lambda (a b) (* (+ a b) 0.5)))
                         (vlax-safearray->list minp)
                         (vlax-safearray->list maxp)
                         ) ;_ end of mapcar
            ) ;_ end of setq
      (vla-rotate3d
        obj
        (vlax-3d-point midp)
        (vlax-3d-point
          (list (+ (car midp) 1.)
                (cadr midp)
                (caddr midp)
                ) ;_ end of list
          ) ;_ end of vlax-3d-point
        (/ pi 2.)
        ) ;_ end of vla-Rotate3D
      ) ;_ end of foreach
    ) ;_ end of if
  (sssetfirst res res)
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
P.S. Полностью код не гонял. По идее поворот осуществляется вокруг мировой оси Ох.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.05.2010, 08:51
#22
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


DonJad, если устроит готовое решение, то у меня в программе Help-Paper есть недокументированная функция ad-rot, она вертит все выбранные объекты вокруг общего геометрического центра или каждое отдельно вокруг своего центра, управляется цифровыми клавишами клавиатуры:
1, 3 (7, 9) - вокруг оси Z (соответственно в одну или другую сторону),
2, 8 - вокруг оси X,
4, 6 - вокруг оси Y,
5 - окно настройки. угол поворота за один раз (по умолчанию 45 градусов),
esc - выход.
Оси берёт из текущей системы координат.

Последний раз редактировалось Евгений А., 07.06.2010 в 08:52.
Евгений А. вне форума  
 
Непрочитано 14.05.2010, 11:40
#23
DonJad


 
Регистрация: 20.12.2005
Murmansk
Сообщений: 106


Спасибо всем!!!

Попробую на днях разобраться в примере который опубликовал уважаемый Крыс. Надо тренироваться в лиспе ))
DonJad вне форума  
 
Непрочитано 06.06.2010, 01:00
#24
Нефтепроводчик


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


Спасибо, прикольный лисп! Не помешало бы, что бы после первого поворота придлагалось повторить команду.
Можно ли сделать, если выбран в качестве объекта блок, чтобы вращение происходило вокруг базовой точки этого блока?

Последний раз редактировалось Нефтепроводчик, 06.06.2010 в 01:23.
Нефтепроводчик вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Поворот на 90 градусов.