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

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

Lisp для копирования с поворотом

Ответ
Поиск в этой теме
Непрочитано 11.03.2009, 15:17 #1
Lisp для копирования с поворотом
zamtmn
 
КИПиА
 
Tyumen
Регистрация: 21.03.2005
Сообщений: 1,352

Наверно подобное уже было, но я не нашел

Нужно расставить оборудование в "круглом" здании.
В одной комнате оборудование (блоки) расставлено, нужно его повернуть - скопировать относительно указаной точки.

Т.е.примерно так - выбираем блоки, указываем точку относительно которой поворачивать, указываем точку - начальный угол, и погнали - блоки копируются с учетом пересчета точек вставки по следующим указанным пользователем.

зы. Блоки при этом поворачивать вокруг своей оси не обязательно, их я потом поверну отдельно (спасибо kpblc`у)
Просмотров: 9095
 
Непрочитано 11.03.2009, 15:20
#2
Profan


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


В Express Tools есть команда MOCORO (Move/Copy/Rotate). Может, сгодится?
Profan вне форума  
 
Непрочитано 11.03.2009, 15:25
#3
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013


DSTP_OBJCPYRT
в ToolPac

а "круговой массив" в _array не поможет?
Nike вне форума  
 
Автор темы   Непрочитано 11.03.2009, 15:26
#4
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


MOCORO
Не, не подходит она

DSTP_OBJCPYRT
Тоже не совсем то
zamtmn вне форума  
 
Непрочитано 11.03.2009, 15:38
#5
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Я пользуюсь вот этим:
Код:
[Выделить все]
(defun C:M_CopyRotate (/ *error* selset old_cmdecho)
;;; поворот с копированием
  ;;---------------
  ;;переопределение *error*
  (defun *error* (msg)
    (setvar "cmdecho" old_cmdecho)
    (vl-cmdf "_.undo" "_e")
    (vl-cmdf "_.undo" 1)
    (princ "\nВыполнение программы прервано пользователем!")
  )
  ;;---------------
  (setq old_cmdecho (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (vl-cmdf "_.undo" "_be")
  (setq selset (ssget))
  (vl-cmdf "_.copy"
	   selset
	   ""
	   (getpoint "\nБазовая точка: ")
	   "@"
	   "_.rotate"
	   selset
	   ""
	   "@"
  )
  (while (= (getvar "cmdactive") 1) (command pause))
  (vl-cmdf "_.undo" "_e")
  (setvar "cmdecho" old_cmdecho)
  (princ)
)
Makswell вне форума  
 
Непрочитано 11.03.2009, 15:41
#6
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013


Еще вариант:
Код:
[Выделить все]
;Tip1750:  COPYR.LSP        Copy and rotate        (C)2001, Ricardo Lopez

 ;*****************************************************
 ; COPYR.LSP    (Copy and rotate objects)
 ;*****************************************************
(defun C:COPYR (/ N POINT2 LAST1 LAST2 ROTATE_POINT)
  (setvar "osmode" 0)
  (setvar "orthomode" 0)
  (setq EN (ssget))
  (command "_undo" "_begin")
  (if EN
    (progn
      (setq N 0)
      (while (< N (sslength EN))
	(redraw (ssname EN N) 3)
	(setq N (+ N 1))
      )
      (initget "M")
      (setq POINT2 (getpoint "\nBase point or displacement/Multiple:"))
      (if (= POINT2 "M")
	(progn (setq POINT2 (getpoint "\nBase point:"))
	       (while POINT2
		 (command "_.move" EN "" POINT2)
		 (setq LAST1 (getvar "lastpoint"))
		 (command PAUSE)
		 (setq LAST2 (getvar "lastpoint"))
		 (setq ROTATE_POINT (getvar "lastpoint"))
		 (command "_.copy" EN "" ROTATE_POINT POINT2)
		 (command "_.rotate")
		 (command "_p" "" ROTATE_POINT PAUSE)
		 (setq POINT2 ROTATE_POINT)
	       )
	)
	(progn (if POINT2
		 (progn	(command "_.move" EN "" POINT2 PAUSE)
			(setq BASE (getvar "lastpoint"))
			(command "_.copy" EN "" BASE POINT2)
			(command "_.rotate" "_p" "" BASE PAUSE)
		 )
	       )
	)
      )
      (setq N 0)
      (while (< N (sslength EN))
	(redraw (ssname EN N) 4)
	(setq N (+ N 1))
      )
    )
  )
  (command "_undo" "_begin")
  (princ)
)
Nike вне форума  
 
Автор темы   Непрочитано 11.03.2009, 16:00
#7
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


COPYR - не то, сначало копирует - потом поворачивает

M_CopyRotate - почти то, вот бы еще повторять операцию многократео
zamtmn вне форума  
 
Непрочитано 11.03.2009, 16:04
1 | #8
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013


а так:

Код:
[Выделить все]
(defun c:COPYRM (/ mysset base_pt ref_ang new_ang loop_sw)
  (princ "select objects to rotate")
  (setq mysset (ssget))
  (setq base_pt (getpoint "\nselect basepoint"))
  (setq ref_ang (/ (* (getangle base_pt "\nselect reference angle") 180) pi))
  (setq loop_sw 1)
  (while (= loop_sw 1)
    (setq new_ang (getangle base_pt "\nselect new angle"))
    (if (boundp 'new_ang)
      (command "_rotate" mysset "" base_pt "_C" "_R" ref_ang (/ (* new_ang 180) pi))
      (setq loop_sw 0)
    ) ;_ end of if
  ) ;_ end of while
  princ
)
Nike вне форума  
 
Автор темы   Непрочитано 11.03.2009, 16:11
#9
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>а так:
Самое то. Спасибо!
zamtmn вне форума  
 
Непрочитано 14.03.2009, 22:11
#10
Velik84

Генплан и транспорт
 
Регистрация: 26.11.2008
Сообщений: 214


А поворачивть например на угол +-8d07'48" можете подсказать неопытному юзеру как сделать?
__________________
Hi people))):crazy:
Velik84 вне форума  
 
Непрочитано 15.03.2009, 18:30
#11
VVA

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


Velik84, на запрос угла поворота так и вводи: 8d7'48"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.03.2009, 20:10
#12
Velik84

Генплан и транспорт
 
Регистрация: 26.11.2008
Сообщений: 214


Цитата:
Сообщение от VVA Посмотреть сообщение
Velik84, на запрос угла поворота так и вводи: 8d7'48"
Ха))) а на кнопку как поставить?)))
__________________
Hi people))):crazy:
Velik84 вне форума  
 
Непрочитано 15.03.2009, 20:34
#13
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Velik84, макрос на кнопку сделай
COPYRM
;8d7'48";
вместо красного ставь свою команду
skkkk вне форума  
 
Непрочитано 09.04.2009, 11:22
#14
Mek

Изобретение металлических гаражей
 
Регистрация: 10.09.2004
Сибирь
Сообщений: 559


А команда Массив/круговой массив не канает здесь разве?
И Экспресс Тулз тоже...
Для чего ЛИСП изобретать, если оно в штатном порядке имеется...
__________________
В этом и состоит диалектика жизни
Mek вне форума  
 
Автор темы   Непрочитано 09.04.2009, 11:50
#15
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


объекты нужно было не скопировать потом повернуть,
а скопировать задавая угловое перемещение а не линейное
zamtmn вне форума  
 
Непрочитано 09.04.2009, 12:00
#16
Mek

Изобретение металлических гаражей
 
Регистрация: 10.09.2004
Сибирь
Сообщений: 559


Цитата:
Сообщение от zamtmn Посмотреть сообщение
объекты нужно было не скопировать потом повернуть,
а скопировать задавая угловое перемещение а не линейное
Если это ответ на мой вопрос, тогда да, согласен. Когда нужно копировать/поворачивать на разные углы несколько раз подряд - круговой массив может быть неудобен..
__________________
В этом и состоит диалектика жизни
Mek вне форума  
 
Непрочитано 21.07.2010, 13:03
#17
ezeff

гуру AutoCad 81 уровня ))
 
Регистрация: 14.01.2010
Сочи
Сообщений: 25
<phrase 1=


Ещё вариант, для ленивых типа меня
Поворачивает копию, вызывается командой CR
Код:
[Выделить все]
( Defun C:CR()
	(if (setq sset (ssget))  ;Определяем что выбрано
    	(progn
            (command "ROTATE" sset "" pause "copy" pause) ;вызываем команду ROTATE, и поворачиваем копию из всех выбранных элементов
	  )
  )
)
(princ "\n Утилита Rotate a Copy,\n")
(princ " Поворачивает копию объекта. Сделана на основе команды ROTATE,\n")
(princ " Работоспособность проверялась только на AC 2009,\n")
(princ " Для работы с утилитой введите в командной строке CR.\n")
;;(textscr) ;; чтобы не выскакивало текстовое окно
(princ)
ezeff вне форума  
 
Непрочитано 21.07.2010, 13:44
#18
Кулик Алексей aka kpblc
Moderator

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


ezeff, в официальных локализациях работать не будет, это раз. Отслеживания ошибок нет - это два. Будет "хамить" при некоторых условиях.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.07.2010, 14:03
#19
ezeff

гуру AutoCad 81 уровня ))
 
Регистрация: 14.01.2010
Сочи
Сообщений: 25
<phrase 1=


Кулик Алексей aka kpblc Например при каких?
ezeff вне форума  
 
Непрочитано 21.07.2010, 14:07
#20
Кулик Алексей aka kpblc
Moderator

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


Привязка, например: все очень близко, точный поворот вряд ли будет осуществлен.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp для копирования с поворотом



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен LISP для суммы длин отрезков линни ilka_t LISP 219 10.09.2019 10:22
NET:IronPython для AutoCAD 2006-2009 Красин Готовые программы 5 18.02.2016 20:55
lisp для автоматического переноса размеров в отдельный слой phantom_l LISP 7 08.07.2008 11:27
Нужен LISP для заливки отверстий ilka_t AutoCAD 20 24.03.2004 16:06