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

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

Lisp. Копирование объектов между точками

Ответ
Поиск в этой теме
Непрочитано 08.06.2010, 23:33 #1
Lisp. Копирование объектов между точками
Yuzer
 
Мозговой штурм
 
Рідна ненька - Україна, Харків
Регистрация: 26.10.2008
Сообщений: 5,705

Здравствуйте.
Сегодня столкнулся с трудностью: между двумя точками на одинаковом расстоянии нужно вставить n объектов.
Рисую линию, делю ее и вставляю по точкам объекты. Процесс долгий, тем более если количество объектов потом нужно менять (т.е. я их удаляю и заново повторяю процедуру).
Подскажите, пожалуйста, решение.
Просмотров: 8335
 
Непрочитано 08.06.2010, 23:52
#2
Nike

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


не могу понять, чем тебя не устраивает _divide
Nike вне форума  
 
Автор темы   Непрочитано 08.06.2010, 23:53
#3
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Всю цепочку действий нужно повторять в случае изменения числа объектов
Yuzer вне форума  
 
Непрочитано 08.06.2010, 23:55
#4
Nike

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


ну удалил старые и снова - (command "_divide" Линия "_b" Блок Промежуток)
делов то..
Nike вне форума  
 
Автор темы   Непрочитано 08.06.2010, 23:57
#5
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Так я снова получу точки, в которые нужно вставить заново объекты
Yuzer вне форума  
 
Непрочитано 09.06.2010, 00:10
#6
Nike

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


Опция "_b" вставляет вместо точек блоки, а блоками ты можешь распределить любую фигуру
Nike вне форума  
 
Автор темы   Непрочитано 09.06.2010, 00:37
#7
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Nike, меня устроит: выбрать объект/указать 2 точки/указать число раз
Yuzer вне форума  
 
Непрочитано 09.06.2010, 00:40
#8
Кулик Алексей aka kpblc
Moderator

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


А что за объекты расставляешь?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.06.2010, 00:42
#9
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


когда как: отрезки, круги, блоки, в общем разное...
Yuzer вне форума  
 
Непрочитано 09.06.2010, 01:03
#10
Nike

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


попробуй это (не помню откуда и чье)
Код:
[Выделить все]
(defun C:MASSIV1 ()
  (setvar "cmdecho" 0)
  (setvar "osnapcoord" 1)
  (prompt "\nВыберите объекты: ")
  (setq old_error *error*)
  (setq *error* ERR_)
  (setq
    LL (ssget)
    W  (entget (ssname LL 0))
    TN (cdr (assoc 10 W))
    S  (getreal "\n Шаг копирования: ")
  ) ;setq
  (setq
    UG (getangle "\n Направление копирования: <горизонтально> ")
  ) ;
  (if (= UG nil)
    (setq UG 0)
  ) ;if
  (setq
    L  (getdist "\n Участок копирования: ")
    Q  (fix (/ L S))
    TK (polar TN UG S)
    N  2
  ) ;_ end of setq
  (command "_.undo" "_be")
  (repeat Q
    (command "_.copy" LL "" TN TK)
    (setq
      S1 (* S N)
      TK (polar TN UG S1)
      N  (+ 1 N)
    ) ;_ end of setq
  ) ;repeat
  (command "_.undo" "_end")
  (setq *error* old_error)
)   ;setq
(defun ERR_ (msg)
  (command "_.undo" "_end")
  (setq *error* old_error)
  (princ)
) ;_ end of defun
Nike вне форума  
 
Автор темы   Непрочитано 09.06.2010, 01:10
#11
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Спасибо. Offtop: Вещь явно понравилась
Но тут задается шаг, а мне нужно равномерное распределение.
Yuzer вне форума  
 
Непрочитано 09.06.2010, 01:15
#12
superkot007


 
Регистрация: 15.01.2010
Сообщений: 254


Yuzer, есть "извратный" метод с привлечением Excel (ну Калькулятора на худой конец)
Разность координат точек делишь на n-1 (если требуется n объектов ВСЕГО). Получаешь т.н. "приращения" по осям. А дальше уже просто - через Массив задаешь расстояние между рядами/столбцами (для этого и требовалось считать "приращение"), угол наклона - и все...

В общем через ...., но когда "прямых" знаний не хватает, то вполне...
superkot007 вне форума  
 
Непрочитано 09.06.2010, 01:15
#13
Кулик Алексей aka kpblc
Moderator

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


Создает точки, но модифицировать код, думаю, особого труда не составит:
Код:
[Выделить все]
(vl-load-com)

(defun test (/ adoc pt1 pt2 range step base ang)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (if (and (= (type (setq pt1 (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (getpoint "\nПервая точка <Отмена> : ")
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'list
              ) ;_ end of =
           (= (type (setq pt2 (vl-catch-all-apply
                                (function
                                  (lambda ()
                                    (getpoint pt1 "\nВторая точка <Отмена> : ")
                                    ) ;_ end of lambda
                                  ) ;_ end of function
                                ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'list
              ) ;_ end of =
           (= (type (setq range (vl-catch-all-apply
                                  (function
                                    (lambda ()
                                      (getint "\nКоличество сегментов <Отмена> : ")
                                      ) ;_ end of lambda
                                    ) ;_ end of function
                                  ) ;_ end of vl-catch-all-apply
                          ) ;_ end of setq
                    ) ;_ end of type
              'int
              ) ;_ end of =
           ) ;_ end of and
    (progn
      (setq step (/ (distance pt1 pt2) range)
            base pt1
            ang  (angle pt1 pt2)
            ) ;_ end of setq
      (repeat range
        (entmakex (list (cons 0 "POINT")
                        (cons 10 (setq base (polar base ang step)))
                        ) ;_ end of list
                  ) ;_ end of entmakex
        ) ;_ end of repeat
      ) ;_ end of progn
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 09.06.2010, 01:23
#14
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Кулик Алексей, ну это уже не по моей части...

superkot007, действительно ацкий способ.
Yuzer вне форума  
 
Непрочитано 09.06.2010, 01:30
#15
Nike

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


Цитата:
Сообщение от Yuzer Посмотреть сообщение
Но тут задается шаг, а мне нужно равномерное распределение.
тогда так:
Код:
[Выделить все]
(defun C:MASSIV1 ()
  (setvar "cmdecho" 0)
  (setvar "osnapcoord" 1)
  (prompt "\nВыберите объекты: ")
  (setq old_error *error*)
  (setq *error* ERR_)
  (setq
    LL (ssget)
    W  (entget (ssname LL 0))
    TN (cdr (assoc 10 W))
    Q  (getint "\n Число копий: ")
  ) ;setq
  (setq
    UG (getangle "\n Направление копирования: <горизонтально> ")
  ) ;
  (if (= UG nil)
    (setq UG 0)
  ) ;if
  (setq
    L  (getdist "\n Участок копирования: ")
    S  (/ L Q)
    TK (polar TN UG S)
    N  2
  ) ;_ end of setq
  (command "_.undo" "_be")
  (repeat Q
    (command "_.copy" LL "" TN TK)
    (setq
      S1 (* S N)
      TK (polar TN UG S1)
      N  (+ 1 N)
    ) ;_ end of setq
  ) ;repeat
  (command "_.undo" "_end")
  (setq *error* old_error)
)   ;setq
(defun ERR_ (msg)
  (command "_.undo" "_end")
  (setq *error* old_error)
  (princ)
) ;_ end of defun
Nike вне форума  
 
Автор темы   Непрочитано 09.06.2010, 01:36
#16
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Спасибо!!!
Yuzer вне форума  
 
Непрочитано 09.06.2010, 04:31
#17
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Давно пользуюсь, не помню чъя программа но премного благодарен.
Вложения
Тип файла: lsp pl_copytr.LSP (3.0 Кб, 112 просмотров)
Jonas вне форума  
 
Автор темы   Непрочитано 09.06.2010, 08:48
#18
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


C этим лиспом не получается...
Подгрузил лисп, прописываю в строке: copytr
Цитата:
Команда: copytr
; ошибка: no function definition: VLAX-GET-ACAD-OBJECT
Что делаю не так?
Yuzer вне форума  
 
Непрочитано 09.06.2010, 09:38
#19
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Может не перезагрузил Акад?
Jonas вне форума  
 
Непрочитано 09.06.2010, 09:48
#20
Елпанов Евгений

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


Цитата:
Сообщение от Jonas Посмотреть сообщение
Давно пользуюсь, не помню чъя программа но премного благодарен.
Внутри написано:
Цитата:
Copyright ©2004 Пётр Лоскутов (Alaspher)
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Копирование объектов между точками

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Копирование, сортировка, переименование листов (layout) VVA Готовые программы 96 08.12.2023 14:11
Lisp: Обработка объектов и получение списка свойств (координаты точек) Nanotronic LISP 2 23.04.2009 23:07
LISP. Распределение по слоям объектов dim.,hatch,text Суханова LISP 5 28.08.2008 13:31
Как определить расстояние между 2 точками по spline? Хотабыч Программирование 5 22.01.2006 15:33
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19