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

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

Lisp. Копирование объекта, шаг и повтор с добавлением в новый слой

Ответ
Поиск в этой теме
Непрочитано 09.04.2016, 20:42 #1
Lisp. Копирование объекта, шаг и повтор с добавлением в новый слой
pobat
 
инжинириг
 
Регистрация: 26.01.2012
Сообщений: 20

Друзья возникла необходимость проделать следующий алгоритм действий после выделения объекта (группы объектов: прямая, поллиния, круг и т.д.) и запуска программы:

-ввести значения всех переменных, n, deltaX, deltaY, угол, префикс имени слоя

-Указать (выбрать) базовую точку относительно объекта (набора объектов)

- начать цикл от i=1 до n
1. скопировать объект с смещением по горизонтали (+- deltaX указать число) и вертикали (+- deltaY)
2. при вставке на новую позицию повернуть (+ - по/против часовой "угол" градусов) относительно скопированной базовой точки (сдвинутой на deltaX и deltaY)
3. Скопированную объект (объекты) поместить в новый слой по шаблону "префикс имени слоя"+ i (номер шага цикла) (например слой001, слой002, слой003...)
конец цикла

Если кто сможет помочь, буду очень благодарен.
Может есть что то похожее, что можно взять за основу?
Заранее спасибо!
Просмотров: 3223
 
Непрочитано 10.04.2016, 00:22
#2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


У слоя кроме имени есть и другие свойства
gomer вне форума  
 
Непрочитано 10.04.2016, 13:04
#3
Кулик Алексей aka kpblc
Moderator

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


pobat, в каком месте у тебя проблема? Покажи свои наработки - там и видно будет.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.04.2016, 21:23
#4
pobat

инжинириг
 
Регистрация: 26.01.2012
Сообщений: 20


gomer никаких дополнительных свойств нету
Кулик Алексей aka kpblc я пока я нашел ряд отдельных программ: либо для вертикального или горизонтального копирования массивов и копирование объектов путём поворота относительно указаной точки на указаный угол (не знаю можно указывать сайт источник)

Одномерный вертикальный массив varray:
Код:
[Выделить все]
 (DEFUN C:VARRAY()
(setvar "CMDECHO" 0)
(SETQ ss (SSGET))
(SETQ r (GETINT "
Количество элементов: "))
(SETQ d (GETREAL "
Дистанция между элементами?: "))
(COMMAND "array" ss "" "r" r 1 d )
(setvar "CMDECHO" 1)
(princ)
)
Одномерный горизонтальный массив harray:
Код:
[Выделить все]
 (DEFUN C:HARRAY()
(setvar "CMDECHO" 0)
(SETQ ss (SSGET))
(SETQ c (GETINT "
Количество элементов: "))
(SETQ d (GETREAL "
Дистанция между элементами?: "))
(COMMAND "array" ss "" "r" 1 c d )
(setvar "CMDECHO" 1)
(princ)
)
Копирование объектов путём поворота относительно указаной точки на указаный угол:
Код:
[Выделить все]
 (DEFUN C:CR (/ SS PT AN)
 (SETQ ss (SSGET))
 (SETQ pt (GETPOINT "
Точка вращеня?: "))
 (SETQ an (GETREAL "
Угол вращения?: "))
   (COMMAND "copy" ss "" pt pt )
   (COMMAND "rotate" ss "" pt an )
 (princ)
)
собственно это пока всё
pobat вне форума  
 
Непрочитано 11.04.2016, 22:34
#5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


В первом приближении как-то так
Код:
[Выделить все]
(defun C:TEST ()
(if (setq ss (ssget "_I"))
  (progn
    (initget 1)(setq pt (getpoint "\nБазовая точка: "))
    (initget 7)(setq N (getint "\nКоличество шагов: "))
    (initget 1)(setq dX (getreal "\nДельта Х: "))
    (initget 1)(setq dY (getreal "\nДельта Y: "))
    (initget 1)(setq Ang (getangle "\nУгол поворота: "))
    (initget 1)(setq Lay (getstring "\nПрефикс слоя: "))
    (setq i 0)
    (repeat N
      (setq i (1+ i))
      (setq eLast (entlast))
      (command "_copy" ss "" "_non" pt "_non" (setq pt (mapcar '+ pt (list dX dY 0))) "")
      (setq ss nil ss (ssadd))
      (while (setq e (entnext eLast))
        (ssadd e ss)
        (setq eLast e)
        )
      (setq Lsuf (itoa i))
      (while (< (strlen  Lsuf) 3)(setq Lsuf (strcat "0" Lsuf)))
      (command "_-layer" "_n" (setq L (strcat Lay Lsuf)) "")
      (command "_CHPROP" ss "" "_layer" L "")
      (command "_rotate" ss "" "_non" pt (/ (* Ang 180.0) pi))
      )
    )
  (alert "Сперва выберите объекты")
  )
  )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 12.04.2016 в 16:20.
VVA вне форума  
 
Автор темы   Непрочитано 12.04.2016, 11:41
#6
pobat

инжинириг
 
Регистрация: 26.01.2012
Сообщений: 20


VVA это Просто то что нужно! спасибо большое!

Для удобного формирования в списке слоев от большего к меньшему есть маленькая просьба,
если возможность организовать нумерованию слоев вида "001 002 003", а не "1,2,3".
Сейчас есть некоторая сбивка.

но это уже не принципиально. так как это огромный задел!

Спасибо!!
pobat вне форума  
 
Непрочитано 12.04.2016, 16:20
#7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


pobat, Обновил #5 Правил "на лету", без проверки. Вроде нигде не накосячил
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.04.2016, 09:33
#8
pobat

инжинириг
 
Регистрация: 26.01.2012
Сообщений: 20


VVA огромное Вам спасибо! Уже работаю с новыми возможностими
pobat вне форума  
 
Непрочитано 18.10.2016, 17:50
#9
gosho

architect
 
Регистрация: 31.01.2011
moscow
Сообщений: 30
Отправить сообщение для gosho с помощью Skype™


Здравствуйте коллеги!
А можно этот Lisp переписать так, чтобы:

- угол поворота по умолчанию был принят 0 градусов (чтобы просто нажать ввод и копировалось все без поворота)
- все происходило на том слое в котором лежит примитив

И еще вариант.

Можно ли вообще переделать скрипт под следующий алгоритм

Выбираем примитив(ы)
Команда!
Задайте шаг (или укажите графически мышкой):
а
Укажите базовую точку
Тык

Потом просто тянем мышку и за мышкой с заданным шагом копируются примитивы.
Соответственно если тянем под углом то дельта Y берется графически.
gosho вне форума  
 
Непрочитано 19.10.2016, 08:18
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от gosho Посмотреть сообщение
- угол поворота по умолчанию был принят 0 градусов (чтобы просто нажать ввод и копировалось все без поворота)
- все происходило на том слое в котором лежит примитив
Такой код уже есть в #4 (внес небольшие правки для работы в локализованных версиях)
Код:
[Выделить все]
 
(DEFUN C:HARRAY()
(setvar "CMDECHO" 0)
(SETQ ss (SSGET "_:L"))
(SETQ c (GETINT "\nКоличество элементов: "))
(SETQ d (GETDIST "\nДистанция между элементами?: "))
(COMMAND "_array" ss "" "_r" 1 c d )
(setvar "CMDECHO" 1)
(princ)
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Копирование объекта, шаг и повтор с добавлением в новый слой

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консервация объектов незавершенного строительства msv_mnv Обследование зданий и сооружений 6 11.11.2017 23:07
Копирование объектов из слоя xref на новый слой Sart AutoCAD 8 07.08.2015 11:34
Линии электрических соединений Shoorup Программирование 23 07.02.2015 15:13
Ввод в эксплуатацию салона красоты - нужно ли (и в какой форме) согласование с пожарниками ? drill_man Прочее. Архитектура и строительство 4 20.09.2013 12:03
Возможно ли перенести примитивы разных слоев в новый слой с сохранением их прежних свойств? Gedezuk5 AutoCAD 2 16.01.2013 21:05