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

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

Alternative copy

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

Скажем копируем оси. Мы знаем расстояние между соседними осями, но copy устроен так, что надо каждый раз отсчитывать координату от базовой точки. Может есть такая программа позволяющая при многократном копировании передвигать базовую точку вместе с копией объекта?
Просмотров: 8744
 
Непрочитано 16.06.2009, 18:53
#21
VVA

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


Piton, При наличиии Express Tools
Код:
[Выделить все]
(defun c:nc (/            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 ()
				  (acet-ss-drag-move selset start "\nСледующая точка <Отмена> : " nil)
                                  ;(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
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.06.2009, 13:10
#22
Piton

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


VVA Спасибо. То что нужно
Piton вне форума  
 
Автор темы   Непрочитано 18.06.2009, 11:35
#23
Red Nova

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


Почему-то при работе лиспа выходит из строя polar tracking. Хотя возможно это идет из express tools..
__________________
Блог
Red Nova вне форума  
 
Непрочитано 24.06.2009, 12:14
#24
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 692


VVA, не подскажешь почему расстояние между копиями неправильно идет?
Вложения
Тип файла: zip Video_2009-06-24_121213.zip (963.2 Кб, 81 просмотров)
gest вне форума  
 
Непрочитано 09.07.2009, 09:02
#25
Piton

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


Такая же проблема. То нормально работает, то на неправильные расстояния копирует.
Piton вне форума  
 
Непрочитано 11.02.2010, 13:39
2 | #26
VVA

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


Много воды утекло. gest, Piton, думаю это проблемы aset-ss-drag-move
Попробуйте альтернативный вариант
Код:
[Выделить все]
(defun c:nc ( / ss start next adoc _cmdecho oBjLst)
  ;;;New Copy
  ;;;Alternative copy альтернативное копирование
  ;;; http://forum.dwg.ru/showthread.php?p=519958#post519958
;;; Иногда хочется иметь такую функцию, чтобы при копировании объекта, при вводе расстояния оно 
;;;откладывалось не от исходного объекта, как в стандартной функции, а от только что скопированного.
;;;при многократном копировании базовая точка передвигается вместе с копией объекта
  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (if
    (and
      (setq ss (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  _cmdecho  (getvar "cmdecho")) ;_ end of setq
       (setvar "cmdecho" 0)
   ;;;       (setq oBjLst  (mapcar 'vlax-ename->vla-object
;;;      (vl-remove-if 'listp
;;;        (mapcar 'cadr
;;;          (ssnamex ss)))))
;;; (mapcar 'vla-copy oBjLst)
       (command "_.COPY" ss "" "@" "@")
       (while
         (= (type (setq next (vl-catch-all-apply
                               '(lambda ()
                                  (princ "\nСледующая точка. Отмена ESC : ")
				  (command "_.MOVE" ss "" start pause)
                                  (getvar "LASTPOINT")
                                  ;(getpoint start "\nСледующая точка <Отмена> : ")
                                  ) ;_ end of lambda
                               ) ;_ end of vl-catch-all-apply
                        ) ;_ end of setq
                  ) ;_ end of type
            'list
            ) ;_ end of =
          ;;(mapcar 'vla-copy oBjLst)
          (command "_.COPY" ss "" "@" "@")
          (setq start     next) ;_ end of setq
          ) ;_ end of while
       (command "_.ERASE" ss "")
       ) ;_ end of progn
     ) ;_ end of if
  (if _cmdecho
    (setvar "cmdecho" _cmdecho)
    ) ;_ end of if
  (vla-endundomark adoc)
  (princ)
  )
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 20.08.2012 в 09:32. Причина: Новая редакция
VVA вне форума  
 
Непрочитано 12.02.2010, 08:51
#27
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 692


Спасибо вроде теперь все работает нормально.
gest вне форума  
 
Автор темы   Непрочитано 16.02.2010, 22:13
#28
Red Nova

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


Пора обновить, рад что теперь есть корректный вариант
__________________
Блог
Red Nova вне форума  
 
Непрочитано 02.03.2010, 15:04
#29
Piton

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


Не правильно работает при копировании текст содержащий "field".
Вложения
Тип файла: dwg
DWG 2004
1.dwg (67.1 Кб, 899 просмотров)
Piton вне форума  
 
Непрочитано 03.03.2010, 11:34
#30
VVA

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


Piton, Немного отредактировал код в #26. Пробуйте
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.03.2010, 11:42
#31
Piton

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


VVA Спасибо - работает как надо.
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