Тема: Копирование из чертежа в чертеж без буфера обмена

Здравствуйте!
Все время наталкиваюсь на проблему с использованием буфера обмена при копировании фрагментов из чертежа в чертеж. Понял, что при присутствии в исходном чертеже объектов (AEC), созданных наверное в СПДС, буфер обмена некорректно работает. Устал бороться - надо открывать чертеж на компьютере с установленным СПДС, и пересохранять с превращением этих объектов в примитивы ACAD. А когда надо скопировать небольшой простой фрагмент - процедура неадекватно длительная. Сам я не приверженец СПДС - раздражает его наглая манера править без спроса установки и др, поэтому его на моем рабочем месте нет.
Вспомнил, что еще во времена DOS c друзьями сочинили лиспик для целей такого копирования, в меню добавили две позиции "Clip" и "Paste". Первая сбрасывала выбираемый фрагмент командой WBLOCK в определенное место на диске. Второй - можно было вставить его в открытый новый чертеж (в то время можно было работать только с одним открытым чертежом - небылоWindows). Подумал, что забытой прогой можно было бы попользоваться и теперь. 
Вот посмотрите:

;**************************** CLIPBOARD.LSP ********************************|
;      Name:        CLIPBOARD
;      Description:
;      23/04/94 19:59
;***************************************************************************|
(princ "\nLoading: CLI_ERR")
;******************************* CLI_ERR ***********************************|
; Description: If an error (such as CTRL-C) occurs while command is active

(defun CLI_ERR ( MESSAGE )
  (if (/= MESSAGE "Function cancelled")
      (princ (strcat "\nCLIPBOAR error: " MESSAGE))
  )
  (setq *ERROR* OLD_ERR           ; Restore old *ERROR* handler
        OLD_ERR nil)
  (princ)
)                              ; def CLI_ERR

(princ "\rLoading: C:CLIPBOARD                        ")
;**************************** MAIN FUNCTION ********************************|

(defun C:CLIPBOARD ( / OLD_ERR blk ss name flag pt )
  (setq OLD_ERR *ERROR*           ; Save old *ERROR* handler
        *ERROR* CLI_ERR
  )
  (setq blk  (getstring "\nBlock name to clip: ")
        flag t)
  (if (eq blk "")
      (progn (setq ss (ssget))
             (while (not (setq pt (getpoint "\rClip ins ert point: ")))
             )                    ; wh
      )                           ; pr
      (progn (if (not (tblsearch "BLOCK" bkl))
                 (princ "\nERROR: block ")
                 (princ blk)
                 (princ " not found")
                 (setq flag nil)
             )                    ; i
      )                           ; pr
  )                              ; i
  (if flag
      (progn (setq name "D:\\tools\\ac-clip")
             (setvar "cmdecho" 0)
             (if (findfile (strcat name ".dwg"))
                 (if (eq blk "")
                     (command "-wblock" name "yes" "" pt ss "" "u")
                     (command "-wblock" name "yes" blk)
                 )                ; i - found
                 (if (eq blk "")
                     (command "-wblock" name "" pt ss "" "u")
                     (command "-wblock" name blk)
                 )                ; i - not found
             )                    ; i
             (setvar "cmdecho" 1)
      )                           ; pr
  )                              ; i
  (setq *ERROR* OLD_ERR           ; Restore old *ERROR* handler
        OLD_ERR nil)
  (princ)
)                              ; def C:CLIPBOARD

(princ "\rLoading: C:PASTE                        ")
;******************************** PASTE ************************************|
; Description:
; Parameter:
; Return:

(defun C:PASTE ( / CLI_ERR name blk )
  (setq OLD_ERR *ERROR*           ; Save old *ERROR* handler
        *ERROR* CLI_ERR
  )
  (setq name "D:\\tools\\ac-clip" )
  (if (findfile (strcat name ".dwg"))
      (progn (initget "Entities")
             (setq pt (getpoint "\nEntities/Point to ins ert past: "))
             (if (eq pt "Entities")
                 (progn (setq pt (getpoint "\nPoint to ins ert past: "))
                        (setvar "cmdecho" 0)
                        (command "ins ert" (strcat "*" name)
                              pt "" "")
                        (setvar "cmdecho" 1)
                 )                ; pr
                 (progn (setq blk (clip_name))
                        (setvar "cmdecho" 0)
                        (command "insert" (strcat blk "=" name)
                              pt "" "" pause)
                        (se tvar "cmdecho" 1)
                 )                ; pr
             )                    ; i

      )                           ; pr
      (princ (strcat "\nERROR: File "
                     name " not found! Don't make paste!"
      )      )
  )
  (se tq *ERROR* OLD_ERR           ; Restore old *ERROR* handler
        OLD_ERR nil)
  (princ)
)                              ; def PASTE
(princ "\rLoading: CLIP_NAME                        ")
;****************************** CLIP_NAME **********************************|
; Description:
; Parameter:
; Return:

(defun CLIP_NAME ( / tmp )
  (se tq tmp 1)
  (while (tblsearch "BLOCK" (strcat "CLIP" (itoa tmp)))
         (se tq tmp (1+ tmp))
  )                              ; wh
  (strcat "CLIP" (itoa tmp))
)                              ; def CLIP_NAME
;********************************* END *************************************|
(princ "\rCLIPBOARD.lsp loaded                      ")
(princ)


В последних версиях ACAD ею не пользовались, это понятно - clipboard удобнее. Попробовал поставить - syntax error. К сожалению, навыки подзабылись и не могу найти синтаксическую ошибку. Помогите, пожалуйста.

Re: Копирование из чертежа в чертеж без буфера обмена

Так должно работать. Здешний движок форума глючный. Поэтому публикую на гугле
https://docs.google.com/document/edit?i … amp;pli=1#

Re: Копирование из чертежа в чертеж без буфера обмена

Проверил, работает. Спасибо огромное!