feargt Posted June 23, 2015 Author Posted June 23, 2015 my line of thining was the following Get list of Xref names with "*_ELC" at the end For each Xref in list get Insertion Point insert first new xref at Insertion Point insert second new xref at Insertion Point Quote
feargt Posted June 23, 2015 Author Posted June 23, 2015 With the function vla-put-path would take care of all and using codes much better than using commands as you are planning to. but wont that only work with an Xref that already exists in my drawing? Quote
Tharwat Posted June 23, 2015 Posted June 23, 2015 insert first new xref at Insertion Point insert second new xref at Insertion Point Can you explain these two phrases a little bit more ? Quote
feargt Posted June 23, 2015 Author Posted June 23, 2015 for example XREF_1_ELC and XREF_2_ELC exist in my drawing . they will be replaced with 2 Xrefs each XREF_1_ELC_Sub_1 & Xref_1_ELC_Sub_2 XREF_2_ELC_Sub_1 & Xref_2_ELC_Sub_2 These must be inserted at the same Insertion Point as the original XREF Quote
Tharwat Posted June 23, 2015 Posted June 23, 2015 for example XREF_1_ELC and XREF_2_ELC exist in my drawing . they will be replaced with 2 Xrefs each XREF_1_ELC_Sub_1 & Xref_1_ELC_Sub_2 XREF_2_ELC_Sub_1 & Xref_2_ELC_Sub_2 These must be inserted at the same Insertion Point as the original XREF So did you or were you able to test the program that I posted in post No# 14 ? Quote
feargt Posted June 23, 2015 Author Posted June 23, 2015 no, I didn't test it because that will only replace the existing Xref, and will not insert the second xref Quote
Tharwat Posted June 23, 2015 Posted June 23, 2015 no, I didn't test it because that will only replace the existing Xref, and will not insert the second xref You are wrong , as I said before after running the program you need to save and close and open the drawing again to see the changes . Quote
feargt Posted June 23, 2015 Author Posted June 23, 2015 (defun c:test (/ lst fnd pth) ;; Tharwat 23.06.2015 ;; (setq lst '(([color=red]"Xref_1_ELC"[/color] [color=blue]"Xref_1_ELC_Sub1"[/color]) ([color=red]"Old"[/color] [color=blue]"New"[/color]))) (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (if (and (= :vlax-true (vla-get-isxref blk)) (setq fnd (assoc (vla-get-name blk) lst)) (setq pth (findfile (strcat (cadr fnd) ".dwg"))) ) (vla-put-path blk pth) ) ) (princ) )(vl-load-com) "Xref_1_ELC" needs to be replaced by 2 Xrefs"Xref_1_ELC_Sub1" and "Xref_1_ELC_Sub_2" on a side note: adding (vla-reload blk) to the end of the code would probably avoid having to save and reopen the drawing to see the Change http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/vla-put-path/td-p/3312595 Quote
feargt Posted June 23, 2015 Author Posted June 23, 2015 by the way I do really appreciate your assistance on this! Quote
feargt Posted June 24, 2015 Author Posted June 24, 2015 (defun c:findxref ( / idx ins sel td xrf xrn ) (while (setq td (tblnext "block" (not td))) (and (= (logand (cdr (assoc 70 td)) 4) 4) (wcmatch (setq xrn (strcase (cdr (assoc 2 td)))) "*_ELC") ;; Must pass this criteria before being added to the list (setq xrf (vl-list* "," xrn xrf)) ) ) (if (setq sel (ssget "_X" (list '(0 . "INSERT") (cons 2 (apply 'strcat (cdr xrf)))))) (progn (repeat (setq idx (sslength sel)) (setq ins (cons (cadr (assoc 10 (entget (ssname sel (setq idx (1- idx)))))) ins)) ) (print ins) ) (princ "\nNo xrefs found.") ) (princ) ) was able to solve my problem using the code from Lee Mac by making the following modifications which gave the Name and the Insertion Point. Then while in the Repat funtion I was able to add my xrefs using the Insertion Point and delete the original. (defun c:findxref ( / idx ins sel td xrf xrn [color=red]Xrn2 xrefN[/color][color=red] Path[/color]) [color=red](setq pfad "C:/XXXX/Xrefs/")[/color] (while (setq td (tblnext "block" (not td))) (and (= (logand (cdr (assoc 70 td)) 4) 4) (wcmatch (setq xrn (strcase (cdr (assoc 2 td)))) "*_ELC") ;; Must pass this criteria before being added to the list (setq xrf (vl-list* "," xrn xrf)) ) ) (if (setq sel (ssget "_X" (list '(0 . "INSERT") (cons 2 (apply 'strcat (cdr xrf)))))) (progn (repeat (setq idx (sslength sel)) [color=red](setq ins (cadr (assoc 10 (entget (ssname sel (setq idx (1- idx)))))))[/color] [color=red](setq xrn2 (cdr (assoc 2 (entget (ssname sel idx)))))[/color] [color=#ff0000] (print (strcat xrn2 " at " (rtos x)))[/color] [color=#ff0000] (setq xrefn (vl-string-subst "_ELC_Sub1.dwg" "_ELC" (strcase xrn2)))[/color] [color=red] (if (findfile (strcat pfad xrefn)) (command "_.-XREF" "_overlay" (strcat pfad xrefn) (strcat (rtos x) ",0,0") "1" "1" "0"))[/color] [color=#ff0000](setq xrefn (vl-string-subst "_ELC_Sub2.dwg" "_ELC" (strcase xrn2))) [color=red] (if (findfile (strcat pfad xrefn)) (command "_.-XREF" "_overlay" (strcat pfad xrefn) (strcat (rtos x) ",0,0") "1" "1" "0"))[/color][/color] [color=#ff0000][/color] ) ) (princ "\nNo xrefs found.") ) (princ) ) Probably not the most eloquent method but it achieves the purpose!! Thanks again for all your help Tharwat and Lee! Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.