PDA

View Full Version : Copy Xref


BCrouse
2005-02-10, 04:28 PM
What would cause this Lisp to not work in AutoCAD 2005? Can someone look at this?

Thank you

(defun c:copyxref (/ *error* CMD FD OBJ EN XREF ADD INS SCLX SCLY ROT)
(defun *error* (msg)
(if (or (= msg "Function cancelled")
(= msg "quit / exit abort")
)
(progn
(setvar "cmdecho" CMD)
(setvar "filedia" FD)
(princ)
)
(princ (strcat "\nError: " msg))
)
)
(setq CMD (getvar "cmdecho"))
(setq FD (getvar "filedia"))
(setvar "cmdecho" 0)
(setvar "filedia" 0)
(while (/= OBJ 1)
(setq EN (entsel "\nSelect Xref to insert: "))
(cond
((not EN)
(progn
(cond
((= (getvar "errno") 7) (princ "\nNo Xref selected"))
((= (getvar "errno") 52) (exit))
)
)
)
((/= (cdr (assoc 0 (entget (car EN)))) "INSERT")
(princ "\nNot an Xref")
)
((= 4
(logand
(cdr
(assoc
70
(entget
(tblobjname "block" (cdr (assoc 2 (entget (car EN)))))
)
)
)
4
)
)
(setq OBJ 1)
)
(T (princ "\nNot an Xref"))
)
)
(setq XREF (cdr (assoc 2 (entget (car EN)))))
(setq ADD
(cdr
(assoc 1
(entget
(tblobjname "block" (cdr (assoc 2 (entget (car EN)))))
)
)
)
)
(setq NEWNAME (getstring "\nName of XREF: "))
(setq INS (getpoint "\nSpecify insertion point: "))
(setq SCLX (getreal "\nEnter X scale factor: "))
(setq SCLY (getreal "\nEnter Y scale factor: "))
(setq ROT (getreal "\nSpecify rotation angle: "))
(command "XREF"
"Overlay"
(strcat NEWNAME "=" ADD)
INS
(rtos SCLX)
(rtos SCLY)
(rtos ROT)
)
(exit)
)

kennet.sjoberg
2005-02-10, 11:46 PM
I am sorry, I can not run AutoCAD 2005, but I can mess up Your code. Try or cry. . .

(defun c:CopyXref (/ OldCmd OldFD Xref Ent OrgName NewName InsPkt SclX SclY Rot )

;; Errorhandler
(defun CopyXref_Err (msg)
(princ (strcat "\nError: " msg ", resetting !" ) )
(setq *error* OldError )
(setvar "CMDECHO" OldCmd )
(setvar "FILEDIA" OldFD )
)

;; Settings
(setq OldError *error* *error* CopyXref_Err )
(setq OldCmd (getvar "CMDECHO" ) )
(setq OldFD (getvar "FILEDIA" ) )
(setvar "CMDECHO" 0 )
(setvar "FILEDIA" 0 )

(while (not Xref )
(if (setq Ent (entsel "\nSelect Xref to insert: " ) )
(if (assoc 2 (entget (car Ent )))
(if (= 4 (logand (cdr (assoc 70 (tblsearch "BLOCK" (cdr (assoc 2 (entget (car Ent ))))))) 4 ) )
(setq Xref T )
(princ "Ordinary Block" )
)
(princ "Not an Xref" )
)
(princ "Miss, aim better ! " )
)
)

(setq OrgName (cdr (assoc 1 (entget (tblobjname "block" (cdr (assoc 2 (entget (car Ent )))))))) )
(while (or (= NewName "" ) (= NewName nil ))
(setq NewName (getstring "\nName of XREF: " ) )
)
(initget 1 ) (setq InsPkt (getpoint "\nSpecify insertion point: " ) )
(initget 7 ) (setq SclX (getreal "\nEnter X scale factor: " ) )
(initget 7 ) (setq SclY (getreal "\nEnter Y scale factor: " ) )
(initget 1 ) (setq Rot (getreal "\nSpecify rotation angle: " ) )
(command "._XREF" "Overlay" (strcat NewName "=" OrgName ) InsPkt (rtos SclX ) (rtos SclY ) (rtos Rot ) )

;; Resetting
(setq *error* OldError )
(setvar "CMDECHO" OldCmd )
(setvar "FILEDIA" OldFD )
(princ)
)


: ) Happy Computing !

kennet