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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Нужен макрос (поворот на 90 предварительно выделенного)

Нужен макрос (поворот на 90 предварительно выделенного)

Закрытая тема
Поиск в этой теме
Непрочитано 10.07.2007, 06:33 #1
Нужен макрос (поворот на 90 предварительно выделенного)
dextron3
 
проектировшик
 
СССР
Регистрация: 01.01.2007
Сообщений: 5,143

Существует макрос:

*^C^C_Select;\_Rotate;P;;\90
*^C^C_Select;\_Rotate;P;;\-90

(нецелесообразен)

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

Нужен макрос:

1. Сначало выделяешь нужное
2. Нажимаешь кнопку осуществляется поворот на 90 градусов


(обычно всегда сначало выделяешь а потом думаешь чтобы сделать с выделенным а не наоборот)
__________________
инженер проектировшик с опттом программа авто гад образование высшие
Просмотров: 8998
 
Непрочитано 10.07.2007, 06:58
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Я вот, наоборот, обычно сначала думаю, что надо сделать, а потом - как сделать. Было время, когда предварительного выбора не было. Но предварительный выбор иногда удобнее.
Макросы я бы записал так:
Код:
[Выделить все]
*^C^C_Select;\_Rotate;_P;;\90 
*^C^C_Select;\_Rotate;_P;;\-90
Макросы для предварительно выбранных объектов:
Код:
[Выделить все]
_Rotate;\90
_Rotate;\-90
Profan вне форума  
 
Автор темы   Непрочитано 10.07.2007, 10:19
#3
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


_Rotate;\90
_Rotate;\-90

А нельзя сделать эти макросы чтобы автоматом переворачивали без указания точки поворота (точкой поворота является центр тяжести или симметрии выделенных обектов в целоом)

Тогда бы макрос был полностью законченным
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 10.07.2007, 10:27
#4
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Во-первых. Каких объектов? Если объекты - отрезки, например, то о центре тяжести или симметрии говорить трудно.
Во-вторых. Это будет уже не макрос, а программа.
Profan вне форума  
 
Автор темы   Непрочитано 10.07.2007, 10:53
#5
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Цитата:
Сообщение от Profan
Во-первых. Каких объектов? Если объекты - отрезки, например, то о центре тяжести или симметрии говорить трудно.
Во-вторых. Это будет уже не макрос, а программа.
Хотябы точкой указывалась любая область координат в которой находятся поворачиваемые тела(элементы, отрезки)
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 10.07.2007, 10:56
#6
Dym


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


ищи на форуме, был именно такой лиспик.
Dym вне форума  
 
Автор темы   Непрочитано 10.07.2007, 11:01
#7
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Цитата:
Сообщение от mitjaj
ищи на форуме, был именно такой лиспик.
скажи страницу в форуме, полгода читаю дальше первых 10 страниц спуститься не могу постоянно новые темы
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 10.07.2007, 12:09
#8
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Лови програмку...

Код:
[Выделить все]
(defun c:test (/ SS)
 (princ "\nВыберите примитивы для поворота на 90 гр.")
 (if
  (setq ss (ssget))
  (foreach e
           (mapcar (function (lambda (x / mi ma)
                              (vla-GetBoundingBox x 'mi 'ma)
                              (list (mapcar (function (lambda (x1 x2) (/ (+ x1 x2) 2.0)))
                                            (vlax-safearray->list mi)
                                            (vlax-safearray->list ma)
                                    ) ;_  mapcar
                                    x
                              ) ;_  list
                             ) ;_  lambda
                   ) ;_  function
                   (mapcar
                    (function vlax-ename->vla-object)
                    (vl-remove-if (function listp) (mapcar (function cadr) (ssnamex ss)))
                   ) ;_  mapcar
           ) ;_  mapcar
   (vla-TransformBy
    (cadr e)
    (vlax-tmatrix
     ((lambda (a1 p)
       (list (list (cos a1)
                   (- (sin a1))
                   0.
                   (- (car p) (* (car p) (cos a1)) (* (cadr p) (- (sin a1)))) ;_  +
             ) ;_  list
             (list (sin a1)
                   (cos a1)
                   0.
                   (- (cadr p) (* (car p) (sin a1)) (* (cadr p) (cos a1))) ;_  -
             ) ;_  list
             '(0. 0. 1. 0.)
             '(0. 0. 0. 1.)
       ) ;_  list
      ) ;_  lambda
      (/ pi 2.)
      (car e)
     )
    ) ;_  vlax-tmatrix
   ) ;_  vla-TransformBy
  ) ;_  foreach
 ) ;_  if
 (princ)
) ;_  defun
PS. адаптировал свою старенькую программку, начало обсуждения смотри:
http://forums.augi.com/showthread.php?t=47398
Елпанов Евгений вне форума  
 
Непрочитано 10.07.2007, 12:18
#9
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


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

Код:
[Выделить все]
(defun c:test (/ SS)
 (princ "\nВыберите примитивы для поворота на 90 гр.")
 (if
  (setq ss (ssget))
  (foreach e
           (mapcar (function (lambda (x / mi ma)
                              (vla-GetBoundingBox x 'mi 'ma)
                              (list (mapcar (function (lambda (x1 x2) (/ (+ x1 x2) 2.0)))
                                            (vlax-safearray->list mi)
                                            (vlax-safearray->list ma)
                                    ) ;_  mapcar
                                    x
                              ) ;_  list
                             ) ;_  lambda
                   ) ;_  function
                   (mapcar
                    (function vlax-ename->vla-object)
                    (vl-remove-if (function listp) (mapcar (function cadr) (ssnamex ss)))
                   ) ;_  mapcar
           ) ;_  mapcar
   (vla-rotate (cadr e)(vlax-3d-point (car e)) (/ pi 2.))
  ) ;_  foreach
 ) ;_  if
 (princ)
)
Елпанов Евгений вне форума  
 
Непрочитано 10.07.2007, 14:44
1 | #10
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Код:
[Выделить все]
(defun c:rot (/ sset lst pt lst-getboundingbox)
  (vl-load-com)
  (defun lst-getboundingbox (lst / maxp minp);;;http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22466cL
    (if	(and lst (listp lst))
      (apply
	(function
	  (lambda (a1 a2 a3 a4 a5 a6)
	    (list
	      (list
		(apply (function min) a1)
		(apply (function min) a2)
		(apply (function min) a3)
	      ) ;_  list
	      (list
		(apply (function max) a4)
		(apply (function max) a5)
		(apply (function max) a6)
	      ) ;_  list
	    ) ;_  list
	  ) ;_  lambda
	) ;_  function
	(apply
	  (function mapcar)
	  (cons
	    'list
	    (mapcar
	      (function
		(lambda	(x)
		  (vla-getboundingbox x 'minp 'maxp)
		  (append
		    (vlax-safearray->list minp)
		    (vlax-safearray->list maxp)
		  ) ;_  list
		) ;_  lambda
	      ) ;_  function
	      lst
	    ) ;_  mapcar
	  ) ;_  cons
	) ;_  apply
      ) ;_  apply
    ) ;_  if
  ) ;_  defun
  (setvar "cmdecho" 0)
  (if (setq sset (ssget))
    (setq lst
	   (mapcar
	     (function vlax-ename->vla-object)
	     (vl-remove-if
	       (function listp)
	       (mapcar (function cadr) (ssnamex sset))
	     ) ;_ vl-remove-if
	   ) ;_  mapcar
    ) ;_  setq
  ) ;_ end of if
  (setq	pt (apply 'mapcar
		  (cons	'(lambda (x y) (/ (+ x y) 2))
			(lst-getboundingbox lst)
		  ) ;_ end of cons
	   ) ;_ end of apply
  ) ;_ end of setq
  (vl-cmdf "_rotate" "_p" "" pt "90")
) ;_ end of defun
CB вне форума  
 
Непрочитано 10.07.2007, 15:20
#11
VVA

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


Вот те лиспы, про которые говорит mitjaj
http://forum.dwg.ru/showthread.php?p=92287#post92287
Твой вариант похоже {Smirnoff} №12
VVA вне форума  
 
Автор темы   Непрочитано 10.07.2007, 16:09
#12
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


Лисп rot выдал
Command: _appload rot.lsp successfully loaded.

только выделил так сразу
Command: ; error: bad argument type: numberp: nil


Лисп test поворачивает каждый отдельный приметив вокруг своей оси
если обычный чертеж выделить переворачивает все донеузноваемости
можно шифровать свои файлы, очень в редких местах, но пригодится
БЕРУ

VVA то что нужно!


Спасибо за все лиспы
[sm166]
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 10.07.2007, 16:39
#13
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для dextron3
Попробуй-ка после выполнения команды test выполнить команду отмены...
Profan вне форума  
 
Непрочитано 10.07.2007, 17:24
#14
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Если кому не лень - протестите лисп c:rot, потому что у меня все работает нормально...
CB вне форума  
 
Непрочитано 10.07.2007, 18:38
#15
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Я на работе попробовал, сработала нормально. AutoCAD 2006 РУС. Только вот центр поворота неочевиден. Как бы его показать?
Profan вне форума  
 
Непрочитано 10.07.2007, 18:47
#16
VVA

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


>CB ТОже погонял без фанатизма: работает.
Выдает ошибку при пустом выборе, но не ту, которую показал dextron3
VVA вне форума  
 
Непрочитано 10.07.2007, 19:00
#17
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


>Profan
Сделал как просили
Цитата:
А нельзя сделать эти макросы чтобы автоматом переворачивали без указания точки поворота (точкой поворота является центр тяжести или симметрии выделенных обектов в целоом)
Поворот осуществляется относительно центра габаритного контейнера выбранных объектов
CB вне форума  
 
Непрочитано 10.07.2007, 19:25
#18
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Насчет габаритного контейнера я понял из кода. Это, конечно, не "центр тяжести", ну и ладно.
Profan вне форума  
 
Непрочитано 10.07.2007, 19:30
1 | #19
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


>VVA

Да, насчет пустого выбора согласен
Код:
[Выделить все]
(defun c:rot (/ sset lst pt lst-getboundingbox)
  (vl-load-com)
  (defun lst-getboundingbox (lst / maxp minp);;;http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22466cL 
    (if	(and lst (listp lst))
      (apply
	(function
	  (lambda (a1 a2 a3 a4 a5 a6)
	    (list
	      (list
		(apply (function min) a1)
		(apply (function min) a2)
		(apply (function min) a3)
	      ) ;_  list 
	      (list
		(apply (function max) a4)
		(apply (function max) a5)
		(apply (function max) a6)
	      ) ;_  list 
	    ) ;_  list 
	  ) ;_  lambda 
	) ;_  function 
	(apply
	  (function mapcar)
	  (cons
	    'list
	    (mapcar
	      (function
		(lambda	(x)
		  (vla-getboundingbox x 'minp 'maxp)
		  (append
		    (vlax-safearray->list minp)
		    (vlax-safearray->list maxp)
		  ) ;_  list 
		) ;_  lambda 
	      ) ;_  function 
	      lst
	    ) ;_  mapcar 
	  ) ;_  cons 
	) ;_  apply 
      ) ;_  apply 
    ) ;_  if 
  ) ;_  defun 
  (setvar "cmdecho" 0)
  (if (setq sset (ssget))
    (progn
      (setq lst
       (mapcar
		 (function vlax-ename->vla-object)
		 (vl-remove-if
		   (function listp)
		   (mapcar (function cadr) (ssnamex sset))
		 ) ;_ vl-remove-if 
	       ) ;_  mapcar 
	     pt (apply 'mapcar
		       (cons '(lambda (x y) (/ (+ x y) 2))
			     (lst-getboundingbox lst)
		       ) ;_ end of cons 
		) ;_ end of apply 
      ) ;_ end of setq 
      (vl-cmdf "_rotate" "_p" "" pt "90")
    ) ;_ end of progn
    (princ "\Ничего не выбрано")
  ) ;_ end of if
  (princ)
) ;_ end of defun
CB вне форума  
 
Автор темы   Непрочитано 10.07.2007, 20:25
#20
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,143


работает!
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Нужен макрос (поворот на 90 предварительно выделенного)

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