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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите немного изменить лисп для поворота группы объектов вокруг их центров

Помогите немного изменить лисп для поворота группы объектов вокруг их центров

Ответ
Поиск в этой теме
Непрочитано 18.11.2019, 20:04 #1
Помогите немного изменить лисп для поворота группы объектов вокруг их центров
iskatel111
 
Регистрация: 13.06.2012
Сообщений: 98

Нашел в этой ветке https://forum.dwg.ru/showthread.php?t=8297 такой лисп для поворота группы объектов вокруг их центров. Но он всегда поворачивает в плоскости X-Y, независимо от того какой вид выбран на экране, мне же нужно повернуть в плоскости Y-Z. Как можно это сделать?
Код:
[Выделить все]
 (defun c:srot (/ ERRCOUNT MAXPT MINPT MIPT MNPT MXPT 
OBJSET VLAOBJ PTLST XLST YLST) 
(vl-load-com) 
(if(not srot:ang)(setq srot:ang (* pi 0.5))) 
(setq oldAng srot:ang 
srot:ang(getangle 
(strcat"\nSpecify rotation angle <"(angtos srot:ang)">: ")) 
); end setq 
(if(null srot:ang)(setq srot:ang oldAng)) 
(setq errCount 0 
ptLst '() 
); en setq
(princ "\n§§§ Select objects or press Enter to Quit. §§§")
(if 
(not(setq objSet(ssget "_I"))) 
(setq objSet(ssget)) 
); end if
(sssetfirst) 
(while objSet
(setq objSet 
(mapcar 'vlax-ename->vla-object 
(vl-remove-if 'listp 
(mapcar 'cadr(ssnamex objSet))))) 
(foreach obj objSet 
(vla-GetBoundingBox obj 'MinPt 'MaxPt) 
(setq mnPt(vlax-safearray->list MinPt) 
mxPt(vlax-safearray->list MaxPt)
miPt (polar mnPt (angle mnPt mxPt)(* 0.5 (distance mnPt mxPt))) 
)
(if 
(vl-catch-all-error-p 
(vl-catch-all-apply 'vla-rotate 
(list obj(vlax-3D-Point miPt)srot:ang))) 
(setq errCount(1+ errCount)) 
) 
); end foreach 
(if(/= 0 errCount) 
(princ(strcat "\n" (itoa errCount) " objects were on locked layer! ")) 
); end if
(princ "\n§§§ Select objects or press Enter to Quit. §§§")
(setq objSet(ssget)) 
); end while 
(princ) 
); end of c:srot

Последний раз редактировалось iskatel111, 18.11.2019 в 20:15.
Просмотров: 1520
 
Непрочитано 18.11.2019, 22:49
#2
Кулик Алексей aka kpblc
Moderator

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


Я не уверен - но попробуй сменить ПСК перед выполнением.
В крайнем случае - применяй матрицу преобразования (которую, правда, еще придется вычислять).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.11.2019, 22:55
#3
iskatel111


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Я не уверен - но попробуй сменить ПСК перед выполнением.
А это как и куда дописать?

К сожалению я не силен в лиспе. Разве что на .NET могу что-то изобразить (но тоже не сходу). Думал раз есть уже почти готовое, то несложно чуть подкорректировать.
Пока только есть идея весь чертеж целиком крутануть вокруг начала координат, воспользоваться этим лиспом, а потом крутануть обратно. Но опасаюсь "подводных камней"
iskatel111 вне форума  
 
Непрочитано 18.11.2019, 23:05
#4
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от iskatel111 Посмотреть сообщение
А это как и куда дописать?
Да руками сделай, по команде _.ucs
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.11.2019, 23:14
#5
iskatel111


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Да руками сделай, по команде _.ucs
Ну так я писал - как не крути чертеж на экране, поворот всегда в X-Y, я правда не командой крутил, а на кнопку в верхнем правом углу чертежа с надписями "top" "front" и т.п. но думаю что это одно и тоже.

----- добавлено через ~15 мин. -----
Добавлю для понятности, крутит в X-Y самого чертежа, а не вида. Если вид как то повернуть, то объекты повернуться все равно в плоскости вида "TOP"
iskatel111 вне форума  
 
Непрочитано 19.11.2019, 02:11
1 | #6
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Код:
[Выделить все]
 (setq miPt (mapcar (function (lambda (e1 e2) (/ (+ e1 e2) 2.0))) mnPt mxPt))
(vl-catch-all-apply
  'vla-rotate3d
  (list obj (vlax-3D-Point miPt) (vlax-3D-Point (mapcar '+ miPt '(1 0 0))) srot:ang)
)
Vov.Ka вне форума  
 
Автор темы   Непрочитано 19.11.2019, 11:56
#7
iskatel111


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


Спасибо, теперь работает как нужно.
iskatel111 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите немного изменить лисп для поворота группы объектов вокруг их центров

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите изменить программу по построению контура объектов. Softdie LISP 4 13.04.2018 15:47
Помогите убрать команду которая появляется после работы с таблицей AutoCAD 2017 и изменить цвет фона вставленного поля ArtistAvidaDollars AutoCAD 3 26.03.2018 21:15
Помогите изменить стиль расчлененного текста Ghsrt1994 AutoCAD 6 11.10.2016 23:07
Помогите изменить старый расчет в лире сапр mgsu58 Лира / Лира-САПР 3 27.04.2016 13:22
Помогите исправить программу 3DSPIRAL для 2006 vn Программирование 8 05.04.2006 13:15