Here is the original working code:
(defun C:COPYX (/ CMD PICK1ST PT PNT POINTLIST XR XREF ENTCNT REMSET)
(setq CMD (getvar "cmdecho"))
(setq OSM (getvar "osmode"))
(setq PICK1ST (getvar "pickfirst"))
(setvar "cmdecho" 0)
(STARTUNDO (ACADDOC))
(setvar "pickfirst" 1)
(setvar "osmode" 0)
(setq XR nil)
(while (= nil XR)
(progn (princ "\nCommand: Select X-Refs to copy objects from:")
(setq XR (ssget '((0 . "INSERT"))))))
(princ "\nCommand: Select copy area:")
(progn (command "._select" "_cp")
(while (and (setq PNT (getpoint))
(listp PNT))
(command PNT)
(setq POINTLIST (cons PNT POINTLIST)))
(command "" ""))
(if XR (progn (setq ENTCNT 0)
(while (/= ENTCNT (sslength XR))
(setq REMSET (ssget "X"))
(setq XREF (ssadd (ssname XR ENTCNT)))
(sssetfirst nil XREF)
(command "_-refedit" "O" "N" "_CP")
(foreach PT POINTLIST (command PT))
(command "" "" "N")
(command "_copy" "_CP")
(foreach PT POINTLIST (command PT))
(command "" "R" REMSET "" "0,0,0" "0,0,0")
(command "_refset" "R" "_CP")
(foreach PT POINTLIST (command PT))
(command "" "")
(command "_refclose" "D")
(setq XREF nil)
(setq REMSET nil)
(setq ENTCNT (+ 1 ENTCNT))))
(princ "\nNothing Selected. Exiting Function"))
(princ "\nCommand: Done")
(setvar "pickfirst" PICK1ST)
(setvar "osmode" OSM)
(ENDUNDO (ACADDOC))
(setvar "cmdecho" CMD)
(princ)
)
And here is the updated code:
(defun C:COPYX (/ CMD PICK1ST PT PNT POINTLIST XR XREF XRNAME ENTCNT REMSET YN)
(setq CMD (getvar "cmdecho"))
(setq OSM (getvar "osmode"))
(setq PICK1ST (getvar "pickfirst"))
(setvar "cmdecho" 0)
(STARTUNDO (ACADDOC))
(setvar "pickfirst" 1)
(setvar "osmode" 0)
(setq XR nil)
(while (= nil XR)
(progn (princ "\nCommand: Select X-Refs or Blocks to copy objects from:")
(setq XR (ssget '((0 . "INSERT"))))))
(princ "\nCommand: Select copy area:")
(progn (command "._select" "_cp")
(while (and (setq PNT (getpoint))
(listp PNT))
(command PNT)
(setq POINTLIST (cons PNT POINTLIST)))
(command "" ""))
(initget "Yes No")
(setq YN (getkword "\nDetach selected X-Refs? [Yes/No] (No): "))
(if XR (progn (setq ENTCNT 0)
(while (< ENTCNT (sslength XR))
(setq REMSET (ssget "X"))
(setq XREF (ssadd (ssname XR ENTCNT)))
(sssetfirst nil XREF)
(setq XRNAME (cdr (assoc 2 (ssadd (ssname XR ENTCNT)))))
(command "_-refedit" "O" "N" "_CP")
(foreach PT POINTLIST (command PT))
(command "" "" "N")
(command "_copy" "_CP")
(foreach PT POINTLIST (command PT))
(command "" "R" REMSET "" "0,0,0" "0,0,0")
(command "_refset" "R" "_CP")
(foreach PT POINTLIST (command PT))
(command "" "")
(command "_refclose" "D")
(if (= "Yes" YN)
(command "-XREF" "D" XRNAME))
(setq XREF nil)
(setq XRNAME nil)
(setq REMSET nil)
(setq ENTCNT (+ 1 ENTCNT))
) )
(princ "\nNothing Selected. Exiting Function")
)
(princ "\nCommand: Done")
(setvar "pickfirst" PICK1ST)
(setvar "osmode" OSM)
(ENDUNDO (ACADDOC))
(setvar "cmdecho" CMD)
(princ)
)
Andrew Ingram
Civil 3D x64 2019
Win 10 x64 Pro
Intel Xeon E5-1620
32 GB Ram