Тема: Копирование из чертежа в чертеж без буфера обмена
Здравствуйте!
Все время наталкиваюсь на проблему с использованием буфера обмена при копировании фрагментов из чертежа в чертеж. Понял, что при присутствии в исходном чертеже объектов (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. К сожалению, навыки подзабылись и не могу найти синтаксическую ошибку. Помогите, пожалуйста.