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

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

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

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

мне нужно обернуть объект вокруг оси на 180 градусов..таких объектов сотни , хочу сыкономить время если такое возможно , оборачивать не поо тдельности а все сразу ....
когда выдиляешь все они обарачиваются вокруг одной точки а мне надо обернуть их вокруг своей оси тоесть оставить их на томже месте только верх ногами...
Просмотров: 17805
 
Непрочитано 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 вне форума  
 
Непрочитано 09.02.2012, 09:30 Произвольное вращение на 180
#21
voron83

Геодезист
 
Регистрация: 09.02.2012
Сергиев Посад
Сообщений: 6


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

Код:
[Выделить все]
 
(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 градусов.
Привет.
Очень нравятся твой лисп и я рад что есть такие этузиасты.
Сам я в лиспах полный 0000000000000000, так что прошу помощи у тебя.
Суть программки такова:
есть примерно 150 элементов оного и того же блока
нужно что бы при выполнении лиспа все эти блоки произвольно вращались на 180.
т.е. либо блок вращался на 180 либо остовался на своем месте (вращение на 360 или на 0)
Если есть возможность модернизируй свой лисп добавив в него возможность такого вращения выбранных элементом плиз.
Жду твоей помощи, а пока пробую сам разобраться.
P.S. посоветуй литературку для изучения autolisp
voron83 вне форума  
 
Непрочитано 11.06.2013, 11:59
#22
FRC_Volen


 
Регистрация: 10.06.2013
Тюмень
Сообщений: 14


Я прошу меня извинить, но я познакомился с автокадом в пятницу, а в понедельник я уже пытаюсь изучать команды и знакомлюсь с языком lisp и все с помощью данного форума без возможности проконсультироваться с кем либо в живую. Мне пока трудно освоить все сразу не отрываясь от прямых моих обязанностей на работе.
Поиск насилую постоянно,
на данный момент я нашел как разворачивать объекты все сразу и вокруг своей оси. Пусть это отдельная программа но это не так важно. Главное что эту операцию можно выполнить всего один раз, вместо 1000 для каждого объекта отдельно

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

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

За основу решения проблемы взята программа описная ниже
Программа вымерят расстояние между двумя точками и записывает текстов в третей точке.


Цитата:
Сообщение от skkkk Посмотреть сообщение
Что-то типа такого? (Без проверок, обработки ошибок и прочих прелестей)
Код:
[Выделить все]
(defun C:test ()
    (vl-load-com)
    (vla-AddMtext (vla-get-ModelSpace(vla-get-activedocument (vlax-get-acad-object)))
              (vlax-3d-point '(0.0 0.0 0.0)) 
              0
              (vl-princ-to-string (distance (getpoint "\nУкажите первую точку") (getpoint "\nУкажите вторую точку")))
    )
    (command "_.copybase" '(0.0 0.0 0.0) (entlast) "")
    (command "_.erase" (entlast) "")
    (command "_.pasteclip")
)
Конечно, написание кода заняло буквально пару минут, но поиск никто не отменял - было уже множество решений. Очень советую поискать - полезное занятие.

Как она это делает я так и не понял, но она это делает отлично.

А как теперь добиться корректировки выводимых данных, а именно: полученный результат нужно умножить на два (чертеж в масштабе и требуется корректировка полученных результатов) и прибавить к полученному значению +30

т.е. вместо "10" она должна будет выводить 10*2+30= "50"

и как можно осуществить повтор выполнения команды на примере макроса когда в начале ставится * и команда повторятся до нажатия кнопки Esc

Просьба отнестись с нисхождением) я все таки пользователь с опытом работы автокада меньше недели и у меня сжатый срок на выполнение большого объема типовой работы
FRC_Volen вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Rotate нескольких объектов вокруг своей оси