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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Alternative copy

Alternative copy

Ответ
Поиск в этой теме
Непрочитано 22.03.2008, 15:33 #1
Alternative copy
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,990

Скажем копируем оси. Мы знаем расстояние между соседними осями, но copy устроен так, что надо каждый раз отсчитывать координату от базовой точки. Может есть такая программа позволяющая при многократном копировании передвигать базовую точку вместе с копией объекта?
Просмотров: 8706
 
Непрочитано 22.03.2008, 16:34
#2
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Copym
Vova вне форума  
 
Автор темы   Непрочитано 22.03.2008, 16:53
#3
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Нету там такого. Может я не понятно объяснил. Расстояния между копиями могут быть и разными.
Red Nova вне форума  
 
Непрочитано 22.03.2008, 22:05
#4
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


Тем не менее можно заставить команду сделать то, что тебе надо. Здесь 2 варианта.
1. Опция Divide. На запрос Select division ending point вбиваешь расстояние. На запрос количество вбиваешь 1.
2. Опция Measure. Последовательно, отвечая на запросы, дважды вбиваешь расстояние
Или пиши самодельный макрос
Vova вне форума  
 
Непрочитано 22.03.2008, 23:13
#5
Кулик Алексей aka kpblc
Moderator

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


Попробуйте, я особо не гонял:
Код:
[Выделить все]
(defun c:new-copy (/ selset start next fun_get-from-last *lastent*)

  (defun fun_get-from-last (ent / tmp res)
    (setq res (ssadd))
    (while (setq tmp (entnext ent))
      (setq res (ssadd tmp res)
            ent tmp
            ) ;_ end of setq
      ) ;_ end of while
    res
    ) ;_ end of defun

  (vl-load-com)
  (if
    (and
      (setq selset (ssget "_:L"))
      (= (type (setq
                 start (vl-catch-all-apply
                         '(lambda () (getpoint "\nНачальная точка <Отмена> : "))
                         ) ;_ end of vl-catch-all-apply
                 ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      ) ;_ end of and
     (vl-catch-all-apply
       (function
         (lambda ()
           (setq *lastent* (entlast))
           (while
             (vl-cmdf "_.copy"
                      selset
                      ""
                      start
                      (setq next (getpoint start "\nСледующая точка <Отмена> : "))
                      ) ;_ end of vl-cmdf
              (setq start     next
                    selset    (fun_get-from-last *lastent*)
                    *lastent* (entlast)
                    ) ;_ end of setq
              ) ;_ end of while
           ) ;_ end of lambda
         ) ;_ end of function
       ) ;_ end of vl-catch-all-apply
     ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.03.2008, 23:33
#6
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Кулик Алексей aka kpblc, То что надо, спасибо.
Red Nova вне форума  
 
Автор темы   Непрочитано 23.03.2008, 00:29
#7
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


А можно добавить возможность отмены в течении копирования (crt+z), как в copy?
Red Nova вне форума  
 
Непрочитано 23.03.2008, 00:32
#8
Кулик Алексей aka kpblc
Moderator

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


не очень понял... В любом варианте - завтра, ладно?
Все, понял. Вроде так получится:
Код:
[Выделить все]
(defun c:new-copy
       (/ selset start next fun_get-from-last *lastent* adoc *error*)

  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun fun_get-from-last (ent / tmp res)
    (setq res (ssadd))
    (while (setq tmp (entnext ent))
      (setq res (ssadd tmp res)
            ent tmp
            ) ;_ end of setq
      ) ;_ end of while
    res
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (setq selset (ssget "_:L"))
      (= (type (setq
                 start (vl-catch-all-apply
                         '(lambda () (getpoint "\nНачальная точка <Отмена> : "))
                         ) ;_ end of vl-catch-all-apply
                 ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      ) ;_ end of and
     (vl-catch-all-apply
       (function
         (lambda ()
           (setq *lastent* (entlast))
           (while
             (vl-cmdf "_.copy"
                      selset
                      ""
                      start
                      (setq next (getpoint start "\nСледующая точка <Отмена> : "))
                      ) ;_ end of vl-cmdf
              (setq start     next
                    selset    (fun_get-from-last *lastent*)
                    *lastent* (entlast)
                    ) ;_ end of setq
              ) ;_ end of while
           ) ;_ end of lambda
         ) ;_ end of function
       ) ;_ end of vl-catch-all-apply
     ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.03.2008, 00:44
#9
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


У меня изменений не видно.
Если плохо объяснил при многократном copy нажми crt+z, сразу понятно станет. (проставленная только что копия исчезает, но команда не отключается)
Red Nova вне форума  
 
Непрочитано 23.03.2008, 00:54
#10
Dym


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


прикольная штука, но вроде макросом тоже может получиться
Dym вне форума  
 
Непрочитано 23.03.2008, 02:28
#11
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Red Nova Посмотреть сообщение
У меня изменений не видно.
Если плохо объяснил при многократном copy нажми crt+z, сразу понятно станет. (проставленная только что копия исчезает, но команда не отключается)
В 2005 отменяется все.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.03.2008, 09:26
#12
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


У меня 2008.
Red Nova вне форума  
 
Непрочитано 23.03.2008, 09:51
#13
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


а в конце так и должно ругаться?
Код:
[Выделить все]
Command:  NEW-COPY
Select objects: Specify opposite corner: 1 found

Select objects:
Начальная точка <Отмена> :
Следующая точка <Отмена> : _.copy
Select objects:   1 found

Select objects:
Specify base point or [Displacement/Multiple] <Displacement>: Specify second 
point or <use first point as displacement>:
Command:
Следующая точка <Отмена> :  Application ERROR: Invalid type sent as command 
input
asys вне форума  
 
Непрочитано 23.03.2008, 12:16
#14
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Как вариант:
http://dwg.ru/dnl/554
Krieger вне форума  
 
Непрочитано 23.03.2008, 15:05
#15
Кулик Алексей aka kpblc
Moderator

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


Чтобы не ругалось:
Код:
[Выделить все]
(defun c:new-copy (/            selset       start        next
                   fun_get-from-last         *lastent*    adoc
                   _cmdecho
                   )

  (defun fun_get-from-last (ent / tmp res)
    (setq res (ssadd))
    (while (setq tmp (entnext ent))
      (setq res (ssadd tmp res)
            ent tmp
            ) ;_ end of setq
      ) ;_ end of while
    res
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (setq selset (ssget "_:L"))
      (= (type (setq
                 start (vl-catch-all-apply
                         '(lambda () (getpoint "\nНачальная точка <Отмена> : "))
                         ) ;_ end of vl-catch-all-apply
                 ) ;_ end of setq
               ) ;_ end of type
         'list
         ) ;_ end of =
      ) ;_ end of and
     (progn
       (setq *lastent* (entlast)
             _cmdecho  (getvar "cmdecho")
             ) ;_ end of setq
       (setvar "cmdecho" 0)
       (while
         (= (type (setq next (vl-catch-all-apply
                               '(lambda ()
                                  (getpoint start "\nСледующая точка <Отмена> : ")
                                  ) ;_ end of lambda
                               ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'list
            ) ;_ end of =
          (vl-cmdf "_.copy" selset "" start next)
          (setq start     next
                selset    (fun_get-from-last *lastent*)
                *lastent* (entlast)
                ) ;_ end of setq
          ) ;_ end of while
       ) ;_ end of progn
     ) ;_ end of if
  (if _cmdecho
    (setvar "cmdecho" _cmdecho)
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
> Krieger, у тебя там (по заявлению по крайней мере) работает только с текстами...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.03.2008, 17:35
#16
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Krieger, у тебя там (по заявлению по крайней мере) работает только с текстами...
Ну в описаловке же написано:
Цитата:
Копируется любой набор объектов с переносом базовой точки в последнюю указанную. В этом наборе находятся текстовые объекты и предлагается по порядку их отредактировать.
2 варианта запуска, макрос на кнопку:
если надо редактировать текст
^C^C(if (eq Kr_Copy_and_Edit nil) (load "Kr_Copy_and_Edit.vlx"));(defun c:Kr () (Kr_Copy_and_Edit t));Kr
есле не надо редактировать текст (просто копируем)
^C^C(if (eq Kr_Copy_and_Edit nil) (load "Kr_Copy_and_Edit.vlx"));(defun c:Kr () (Kr_Copy_and_Edit nil));Kr
В данном случае используя последний вариант макроса достигнем желанного результата, т.е. nil надо в параметры передать и текст трогаться не будет, будет обычное копирование чего угодно с переносом базовой точки. Никаких фильтров на текстовые примитивы нету.
Krieger вне форума  
 
Непрочитано 23.03.2008, 19:59
#17
Кулик Алексей aka kpblc
Moderator

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


Прости, я прочел "по диагонали"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.03.2008, 10:48
#18
DonJad


 
Регистрация: 20.12.2005
Murmansk
Сообщений: 106


можно OTrack включить в привязках... и таким макаром привязываться к точкам, тогда вбиваемые координаты будут отсчитываться уже от произвольной заданной точки.
DonJad вне форума  
 
Непрочитано 24.03.2008, 12:06
#19
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Еще вариант. Вводим "_copy" выбираем объекты, указываем базовую точку, выбираем привязку "_from" (либо пишем в комстроке, либо в контекстном меню с зажатым ctrl), пишем собачку "@" (последняя указанная точка), ну и дальше копируем сколько угодно раз с переносом базовой точки.
Krieger вне форума  
 
Непрочитано 16.06.2009, 15:08
#20
Piton

Инженер строитель
 
Регистрация: 24.02.2005
Москва
Сообщений: 396


kpblc
не удобо, что при работе комманды не видно перемещение копируемого объекта. Просьба добавить эту возможность
Piton вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Alternative copy



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать команду copy многоразовой??? BAX AutoCAD 42 31.07.2008 08:41
copy to layers eugene1957 AutoCAD 2 14.10.2007 15:56
AutoCAD2007 Совместить Align и Copy vn AutoCAD 18 25.07.2006 12:38
AutoCAD 2005 - что стало с командой COPY? dermoon AutoCAD 18 25.04.2005 00:04