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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Rotate нескольких объектов вокруг своей оси

Rotate нескольких объектов вокруг своей оси

Ответ
Поиск в этой теме
Непрочитано 16.09.2006, 00:37 #1
Rotate нескольких объектов вокруг своей оси
Silavsale
 
Kyiv
Регистрация: 19.02.2006
Сообщений: 19

мне нужно обернуть объект вокруг оси на 180 градусов..таких объектов сотни , хочу сыкономить время если такое возможно , оборачивать не поо тдельности а все сразу ....
когда выдиляешь все они обарачиваются вокруг одной точки а мне надо обернуть их вокруг своей оси тоесть оставить их на томже месте только верх ногами...
Просмотров: 17556
 
Непрочитано 16.09.2006, 01:47
#2
VVITTALIK

ИНЖЕНЕР
 
Регистрация: 21.06.2006
Солнечный Крым
Сообщений: 281


м-дя, в Максе это возможно, а вот в акаде...........
может в 2007, или лисп какой.
Я присоеденяюсь к вопросу. функция страсть как нуна бываеть.
Или в догонку вопрос: отмасштабировать кучу обьектов но так чтоб сами обьекты отмасштабировались а рвсстоянния между ними нет.
я не пишу лиспы, но помоему это не должно быть сложно. опять же в Масе подобное есть. но не чертить же чертежи в 3D maks........
__________________
Конструктор, Расчетчик, Налетчик......
VVITTALIK вне форума  
 
Автор темы   Непрочитано 16.09.2006, 02:58
#3
Silavsale


 
Регистрация: 19.02.2006
Kyiv
Сообщений: 19
<phrase 1=


Я нашел одномышленика-однопроблемника) . вопрос с маштабированием меня тоже интиресовал уже давно
Silavsale вне форума  
 
Непрочитано 16.09.2006, 04:08 Re: Rotate нескольких объектов вокруг своей оси
#4
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Silavsale
мне нужно обернуть объект вокруг оси на 180 градусов..таких объектов сотни , ...
В смысле, сотни копий одного объекта? Или сотни разных объектов? Если первое, попробуй применить прогу http://www.autocad.ru/cgi-bin/f1/board.cgi?t=21048Af которая заменяет одни объекры другими. То есть, разверни как надо копию своего объекта и меняй ею все с неправильным углом. Если второе, то все равно надо щелкать по объектам для их выбора. Попробуй макрос отсюда http://dwg.ru/art/2 третий сверху. Там-же и макрос с масштабированием
Vova вне форума  
 
Непрочитано 16.09.2006, 12:37
#5
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,296


ToolpPACK_9 там есть функция вращения и массштабирования объектов относительно геометрического центра.
Сама утилита в одном из писем на :
cadware2@yandex.ru
password: help
bernata вне форума  
 
Автор темы   Непрочитано 16.09.2006, 13:26
#6
Silavsale


 
Регистрация: 19.02.2006
Kyiv
Сообщений: 19
<phrase 1=


To Vova


Я делал чертежи многоэтажного здания, во всех помещениях ставил размеры и площади , как оказалось ставил размеры во двор и теперь прийдеться все поменять чтобы они смотрели на улицу так как это должно быть по правилам...

размеры(Text) должны остаться на томже месте но поменять направление на 180 градусов .... Сложность в том что их очень-очень много! и это день работы если использовать функцию Rotate а времени на это нет совсем ///
Silavsale вне форума  
 
Непрочитано 16.09.2006, 15:49
#7
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от Silavsale
To Vova


размеры(Text) должны остаться на томже месте но поменять направление на 180 градусов .... Сложность в том что их очень-очень много! и это день работы если использовать функцию Rotate а времени на это нет совсем ///
Написал нечетко, трудно понять. Дело в том, что размерный текст, если не менять UCS, всегда смотрит в нужную сторону, даже если размер развернуть командой Rotate. Выложи фрагмент чертежа здесь, покажи, как нарисовано и как хотелось бы исправить
Vova вне форума  
 
Автор темы   Непрочитано 16.09.2006, 17:53
#8
Silavsale


 
Регистрация: 19.02.2006
Kyiv
Сообщений: 19
<phrase 1=


Фрагмент чертежа на нем показано что нетак и что надо исправить
[ATTACH]1158414835.dwg[/ATTACH]
Silavsale вне форума  
 
Непрочитано 16.09.2006, 21:06
#9
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Похоже, для двухэтажного нет другого способа чем макросом, о котором я говорил выше. На самом деле это небольшая работа. однострочный текст командой Tjust (Express) приведи к выравниванию по центру и затем, пометив все, разверни одним махом через Пропертиес. Следующий раз сделай блоки с атрибутами, вращать которые очень легко. На твоем чертеже нет размеров, о повороте которых ты спрашивал. Заодно: почему все в слое 0? Это не есть грамотно
Vova вне форума  
 
Непрочитано 17.09.2006, 13:19
#10
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Слегка переработал свой старый код для вращения нескольких объектов относительно центра описанного вокруг них прямоугольника. Задаем угол вращения, затем в цикле выбираем объекты и жмем пробел.
Код:
[Выделить все]
(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 2))) 
    (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
  (while t
    (princ "\n§§§ Select objects and press Enter or Esc to Quit. §§§")
 (if 
   (not(setq objSet(ssget "_I"))) 
   (setq objSet(ssget)) 
   ); end if 
  (if objSet 
    (progn 
      (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) 
     ptLst(append ptLst(list mnPt)) 
     ptLst(append ptLst(list mxPt)) 
     xLst(vl-sort ptLst (function(lambda(e1 e2)(<(car e1)(car e2))))) 
     yLst(vl-sort ptLst (function(lambda(e1 e2)(<(cadr e1)(cadr e2))))) 
     mxPt(list(caar(reverse xLst))(cadar yLst)) 
     mnPt(list(caar xLst)(cadar(reverse yLst))) 
     miPt(list(+(car mnPt)(/(-(car mxPt)(car mnPt))2)) 
         (+(cadr mnPt)(/(-(cadr mxPt)(cadr mnPt))2)) 
         0.0); end list     
     ); end setq 
   ); end foreach 
   (foreach obj objSet  
    (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 if
   ); end foreach 
      (if(/= 0 errCount) 
   (princ(strcat "\n" (itoa errCount) " objects were on locked layer! ")) 
   ); end if 
      ); end progn 
    ); end if
  ); end while
      (princ) 
      ); end of c:srot
{Smirnoff} вне форума  
 
Непрочитано 18.09.2006, 11:24
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Объекты вращаются вокруг центра последнего выбранного примитива.
Нижеприведенный код вращает выбранные объекты вокруг относительно центра прямоугольника, описанного вокруг каждого объекта

Код:
[Выделить все]
 
(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
PS: Похожая тема: Поворот на 90 градусов.

Последний раз редактировалось VVA, 30.04.2010 в 13:08. Причина: Ссылка на тему
VVA вне форума  
 
Непрочитано 18.09.2006, 11:42
#12
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>VVA
Код нормальный. Программист - козёл (т. е. я). Почему то вставил недоделанный вариант оставшийся в буфере. Надо в конце каждого цикла обнулять (setq ptLst nil) и всё ок. То что вы закоментили как раз самое важное, т. е. определение координат прямоугольника описанного вокруг группы объектов.

Код:
[Выделить все]
(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 2))) 
    (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
  (while t
    (princ "\n§§§ Select objects and press Enter or Esc to Quit. §§§")
 (if 
   (not(setq objSet(ssget "_I"))) 
   (setq objSet(ssget)) 
   ); end if 
  (if objSet 
    (progn 
      (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) 
     ptLst(append ptLst(list mnPt)) 
     ptLst(append ptLst(list mxPt)) 
     xLst(vl-sort ptLst (function(lambda(e1 e2)(<(car e1)(car e2))))) 
     yLst(vl-sort ptLst (function(lambda(e1 e2)(<(cadr e1)(cadr e2))))) 
     mxPt(list(caar(reverse xLst))(cadar yLst)) 
     mnPt(list(caar xLst)(cadar(reverse yLst))) 
     miPt(list(+(car mnPt)(/(-(car mxPt)(car mnPt))2)) 
         (+(cadr mnPt)(/(-(cadr mxPt)(cadr mnPt))2)) 
         0.0); end list     
     ); end setq 
   ); end foreach 
   (foreach obj objSet  
    (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 if
   ); end foreach 
      (if(/= 0 errCount) 
   (princ(strcat "\n" (itoa errCount) " objects were on locked layer! ")) 
   ); end if 
      ); end progn 
    ); end if
    (setq ptLst nil)
  ); end while
      (princ) 
      ); end of c:srot
{Smirnoff} вне форума  
 
Непрочитано 18.09.2006, 12:20
#13
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


>Внося изменения я предполагал, что текст - самодостаточная единица для определения габарита, а запрос на выбор объектов - это способ выбрать сразу все, что нужно вращать. Твой вариант более универсален, позволяет вращать относительно некоего виртуального центра и здесь запрос на выбор объектов - это способ для нахождения этого виртуально центра.
Мой код надо рассматривать как модификацию под проблему Silavsale
Цитата:
а мне надо обернуть их вокруг своей оси тоесть оставить их на томже месте только верх ногами...
VVA вне форума  
 
Непрочитано 18.09.2006, 13:08
#14
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Цитата:
Сообщение от VVA
>Внося изменения я предполагал, что текст - самодостаточная единица для определения габарита, а запрос на выбор объектов - это способ выбрать сразу все, что нужно вращать. Твой вариант более универсален, позволяет вращать относительно некоего виртуального центра и здесь запрос на выбор объектов - это способ для нахождения этого виртуально центра.
Мой код надо рассматривать как модификацию под проблему Silavsale
Цитата:
а мне надо обернуть их вокруг своей оси тоесть оставить их на томже месте только верх ногами...
Теперь понятно
{Smirnoff} вне форума  
 
Непрочитано 18.09.2006, 19:53
#15
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


lenj pomogatj poiskom, no bilo zdesj zhe:

Цитата:
(defun c:mrotate_in_center (/ ass ra rp pn pt dst pts om)
(ssget)
(setq adoc (vla-get-activedocument (vlax-get-acad-object))
ass (vla-get-ActiveSelectionset adoc)
om (getvar "OSMODE"));setq
(initget "Point Center")
(setq kw (getkword "\nSelect Rotation Mode: [Point/Center]: <Center>"))
(if (null kw) (setq kw "Center"))
(if (= kw "Point")
(progn (setq obj (vla-item ass 0))
(vla-highlight obj :vlax-true)
(vla-getboundingbox obj 'pn 'px)
(setq pn (vlax-safearray->list pn)
pt (getpoint pt "\nEnter Rotation Point: ")
dst (distance pn pt) ang (angle pn pt))
(vla-update obj)));if
(setq ra (getreal "\nEnter Rotation Angle <0.0> : "))
(if (not ra) (setq ra 0))
(vla-startundomark adoc)
(vlax-for ent ass
(vla-getboundingbox ent 'mn 'mx)
(setq pts (mapcar 'vlax-safearray->list (list mn mx))
rp (vlax-3d-point (if (= kw "Point") (polar (car pts) ang dst)
(mapcar '(lambda (x y) (/ (+ x y) 2)) (car pts) (cadr pts)))));setq
(vla-rotate ent rp (* (/ ra 180) pi)));vlax-for
(setvar "OSMODE" om)
(vla-endundomark adoc)
);end
aftaru zachet, chtuchka lovkaja, neskoljko razov siljno viruchila
Dym вне форума  
 
Непрочитано 18.09.2006, 21:10
#16
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Сообщение от mitjaj
lenj pomogatj poiskom, no bilo zdesj zhe:
aftaru zachet, chtuchka lovkaja, neskoljko razov siljno viruchila
Узнал знакомые обозначения переменных, но не припоминаю саму прогу. Неужели я когда-то приложил к ней руку? Не помню! [sm2100] Наверное, старею [sm1223]
Лентяй вне форума  
 
Непрочитано 19.09.2006, 00:37
#17
VVITTALIK

ИНЖЕНЕР
 
Регистрация: 21.06.2006
Солнечный Крым
Сообщений: 281


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

Простите, если я был резок.
P. S. bernata & VOVA огромное спасибо, за конкретныую и полезную помощь.
__________________
Конструктор, Расчетчик, Налетчик......
VVITTALIK вне форума  
 
Непрочитано 19.09.2006, 01:37
#18
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


поищи местным поиском
Цитата:
Запуск программ в АВТОЛИСП
Dym вне форума  
 
Непрочитано 19.09.2006, 07:01
#19
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Цитата:
Сообщение от VVITTALIK
м-дя.
Большое всем спасибо. Все свободны.
Ваши вот эти, нет не подумайте весьма интересные, я даже не побаюсь слова Полезные, выкладки для простого, рядового пользователя, то бишь для меня, бред сивой кобылы. Я не занимаюсь програмированием, хакерством, и другим подобным занятием, как и многие пользователи сайта.
..
vvitalik, пооботрешся на форуме, и стыдно станет за такие слова. Ребята для тебя написали программы, возможно, решающие твои проблемы. Здесь не надо разбираться в программировании, надо лишь знать, как загрузить, запустить и опробовать программу, а это знают здесь многие, как ты выразился, обычные пользователи. Сто раз говорилось как запускаются программы. Попроси, и тебе найдут методику. Кстати, ты поблагодарил меня за практический совет. Но ведь это был совет по использованию тоже программы, но миниатюрной. Воспользовался? А лиспы-более развернутые и сложные проги. И некоторые обычные пользователи здесь, на форуме, становятся программистами. А уж нестандартный интерфейс имеет добрая половина.
Vova вне форума  
 
Непрочитано 19.09.2006, 18:30
#20
VVITTALIK

ИНЖЕНЕР
 
Регистрация: 21.06.2006
Солнечный Крым
Сообщений: 281


простие уж. погорячился.
__________________
Конструктор, Расчетчик, Налетчик......
VVITTALIK вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Rotate нескольких объектов вокруг своей оси