Ajmal Posted December 29, 2020 Posted December 29, 2020 (edited) how to setq all entity after exploding ( now i need mtext but how do in another entity also) (setq obj (vlax-ename->vla-object ent) cobj (vla-copy obj)) (vl-cmdf "explode" (vlax-vla-object->ename cobj) "") (vla-delete cobj) Edited December 29, 2020 by Ajmal Quote
mhupp Posted December 29, 2020 Posted December 29, 2020 need a little more detail of what you are trying to do. Quote
pkenewell Posted December 29, 2020 Posted December 29, 2020 (edited) 8 hours ago, Ajmal said: how to setq all entity after exploding ( now i need mtext but how do in another entity also) (setq obj (vlax-ename->vla-object ent) cobj (vla-copy obj)) (vl-cmdf "explode" (vlax-vla-object->ename cobj) "") (vla-delete cobj) Perhaps This? (setq obj (vlax-ename->vla-object ent) cobj (vla-copy obj) ss (ssadd) ) (vla-delete obj) (setq en (entlast)) (vla-explode cobj) (while (setq en (entnext en)) (if (not (wcmatch (cdr (assoc 0 (entget en))) "ATTRIB,VERTEX,SEQEND"))(ssadd en ss)) ) (sssetfirst nil ss) Don't understand exactly what you want. Edited December 29, 2020 by pkenewell Quote
Ajmal Posted December 30, 2020 Author Posted December 30, 2020 last time i check some code for leader extend to text last point. i find from some one from here but now i cant find the topic. am not expert to code when i check single single line i got some thing i will explain what i understand please explain if am wrong when i run the code its working very well but its getting one more entity that means its copying the text(a) and exploding(a) and deleting the text (a) before text (a) is single element after exploding it will get multiple element(a,b,c) but deleting only (a) this is what i understand (vl-load-com) (while (setq sel (entsel "\nSelect Leader Text : ")) (setq el (entget (setq ent (car sel))) w nil nobj nil) (cond ( (= (cdr (assoc 0 el)) "MTEXT") (setq obj (vlax-ename->vla-object ent) cobj (vla-copy obj) ) (vl-cmdf "explode" (vlax-vla-object->ename cobj) "") (setq el(entget (setq ent (entlast))) ipt(cdr (assoc 10 el)) cobj (vlax-ename->vla-object ent)) (vla-delete cobj) ) )) and this is full code i cant find the forum topic from here (defun rh:gbbw (obj / ll ur lst wt) (if (and obj (= (type obj) 'ENAME)) (setq obj (vlax-ename->vla-object obj))) (vlax-invoke-method obj 'getboundingbox 'll 'ur) (setq lst (mapcar 'vlax-safearray->list (list ll ur)) wt (mapcar '(lambda (x y) (- x y)) (cadr lst) (car lst))) wt );end_defun (defun rh:z22pi (ar) (cond ( (equal ar (* pi 2.0) 1.0e-10) 0.0) ( (< -1.0e-16 ar (* pi 2.0)) ar) (t (rh:z22pi (rem (+ ar (* pi 2)) (* pi 2)))))) (vl-load-com) (defun c:let ( / sel ent el w obj nobj tang ipt lel lent lst lang a b ept) (while (setq sel (entsel "\nSelect Leader Text : ")) (setq el (entget (setq ent (car sel))) w nil nobj nil) (cond ( (= (cdr (assoc 0 el)) "TEXT") (setq obj (vlax-ename->vla-object ent) tang (rh:z22pi (cdr (assoc 50 el))) ipt (cdr (assoc 10 el))) (if (not (zerop tang)) (vlax-put obj 'rotation 0)) (setq w (rh:gbbw obj)) (if (not (zerop tang)) (vlax-put obj 'rotation tang)) ) ( (= (cdr (assoc 0 el)) "MTEXT") (setq obj (vlax-ename->vla-object ent) tang (rh:z22pi (cdr (assoc 50 el))) nobj (vla-copy obj) );end_setq (vl-cmdf "explode" (vlax-vla-object->ename nobj) "") (setq el (entget (setq ent (entlast))) ipt (cdr (assoc 10 el)) nobj (vlax-ename->vla-object ent)) (if (not (zerop tang)) (vlax-put nobj 'rotation 0)) (setq w (rh:gbbw nobj)) (vla-delete nobj) ) );end_cond (cond (w (setq w (car w) lel (entget (setq lent (car (entsel "\nSelect Leader : ")))) );end_setq (cond ( (= (cdr (assoc 0 lel)) "LEADER") (setq obj (vlax-ename->vla-object lent) lst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) lel)) lang (rh:z22pi (angle (setq a (nth (- (length lst) 2) lst)) (setq b (last lst)))) );end_setq (if (equal lang tang 1.0e-4) (setq ept (polar ipt tang w)) (setq ept ipt)) (setq ept (inters a b ept (polar ept (+ tang (* pi 0.5)) 5.0) nil) lst (reverse (cons ept (cdr (reverse lst)))) ) (vlax-put obj 'coordinates (apply 'append lst)) ) );end_cond ) );end_cond );end_while (princ) );end_defun Quote
pkenewell Posted December 30, 2020 Posted December 30, 2020 This should do what you want. Comments added to explain. Note how to loop using (entnext) to get new objects and add to a selection set. (defun rh:gbbw (obj / ll ur lst wt) (if (and obj (= (type obj) 'ENAME)) (setq obj (vlax-ename->vla-object obj))) (vlax-invoke-method obj 'getboundingbox 'll 'ur) (setq lst (mapcar 'vlax-safearray->list (list ll ur)) wt (mapcar '(lambda (x y) (- x y)) (cadr lst) (car lst))) wt );end_defun (defun rh:z22pi (ar) (cond ( (equal ar (* pi 2.0) 1.0e-10) 0.0) ( (< -1.0e-16 ar (* pi 2.0)) ar) (t (rh:z22pi (rem (+ ar (* pi 2)) (* pi 2)))))) (vl-load-com) (defun c:let ( / sel ent el w obj nobj tang ipt lel lent lst lang a b ept ss en) (vl-load-com) (while (setq sel (entsel "\nSelect Leader Text : ")) (setq el (entget (setq ent (car sel))) w nil nobj nil) (cond ( (= (cdr (assoc 0 el)) "TEXT") (setq obj (vlax-ename->vla-object ent) tang (rh:z22pi (cdr (assoc 50 el))) ipt (cdr (assoc 10 el))) (if (not (zerop tang)) (vlax-put obj 'rotation 0)) (setq w (rh:gbbw obj)) (if (not (zerop tang)) (vlax-put obj 'rotation tang)) ) ( (= (cdr (assoc 0 el)) "MTEXT") (setq obj (vlax-ename->vla-object ent) tang (rh:z22pi (cdr (assoc 50 el))) nobj (vla-copy obj) ss (ssadd) ;; Make a new seletion set. );end_setq ;Mark the last entity before exploding. (setq en (entlast)) ;; Corrected explode command to remove extra "". (vl-cmdf "._explode" (vlax-vla-object->ename nobj)) (setq el (entget (setq ent (entlast))) ipt (cdr (assoc 10 el)) nobj (vlax-ename->vla-object ent)) (if (not (zerop tang)) (vlax-put nobj 'rotation 0)) (setq w (rh:gbbw nobj)) ;; Loop to get new items added after explode and add to selection set. (while (setq en (entnext en)) (if (not (wcmatch (cdr (assoc 0 (entget en))) "ATTRIB,VERTEX,SEQEND"))(ssadd en ss)) ) ;; Erase the selection set. (vl-cmdf "._erase" ss) ) );end_cond (cond (w (setq w (car w) lel (entget (setq lent (car (entsel "\nSelect Leader : ")))) );end_setq (cond ( (= (cdr (assoc 0 lel)) "LEADER") (setq obj (vlax-ename->vla-object lent) lst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) lel)) lang (rh:z22pi (angle (setq a (nth (- (length lst) 2) lst)) (setq b (last lst)))) );end_setq (if (equal lang tang 1.0e-4) (setq ept (polar ipt tang w)) (setq ept ipt)) (setq ept (inters a b ept (polar ept (+ tang (* pi 0.5)) 5.0) nil) lst (reverse (cons ept (cdr (reverse lst)))) ) (vlax-put obj 'coordinates (apply 'append lst)) ) );end_cond ) );end_cond );end_while (princ) );end_defun Quote
Ajmal Posted July 6, 2021 Author Posted July 6, 2021 dear pkenewell firstly sorry for late reply, thanks for your help this is working the problem while working its coming deleting logo because of " (vl-cmdf "._erase") " and its irritating, then I try to change this (vl-cmdf "._erase") but i cant do why I cant do instead of this (vl-cmdf "._erase" ss) to (repeat (setq ssi (sslength ss)) (or (entget (setq ssent (ssname ss (setq ssi (1- ssi)))))) (vla-delete (vlax-ename->vla-object ssent)) ) (while (setq sel (entsel "\nSelect Leader Text : ")) (setq el (entget (setq ent (car sel))) w nil nobj nil) (cond ( (= (cdr (assoc 0 el)) "TEXT") (setq obj (vlax-ename->vla-object ent) tang (rh:z22pi (cdr (assoc 50 el))) ipt (cdr (assoc 10 el))) (if (not (zerop tang)) (vlax-put obj 'rotation 0)) (setq w (rh:gbbw obj)) (if (not (zerop tang)) (vlax-put obj 'rotation tang)) ) ( (= (cdr (assoc 0 el)) "MTEXT") (setq obj (vlax-ename->vla-object ent) tang (rh:z22pi (cdr (assoc 50 el))) nobj (vla-copy obj) ss (ssadd) );end_setq (setq en (entlast)) (vl-cmdf "._explode" (vlax-vla-object->ename nobj)) (setq el (entget (setq ent (entlast))) ipt (cdr (assoc 10 el)) nobj (vlax-ename->vla-object ent)) (if (not (zerop tang)) (vlax-put nobj 'rotation 0)) (setq w (rh:gbbw nobj)) (while (setq en (entnext en)) (if (not (wcmatch (cdr (assoc 0 (entget en))) "ATTRIB,VERTEX,SEQEND"))(ssadd en ss)) ) (repeat (setq ssi (sslength ss)) (or (entget (setq ssent (ssname ss (setq ssi (1- ssi)))))) (vla-delete (vlax-ename->vla-object ssent)) ) ) ) ) Quote
marko_ribar Posted July 6, 2021 Posted July 6, 2021 (edited) Your part should be : (repeat (setq ssi (sslength ss)) (or (not (entget (setq ssent (ssname ss (setq ssi (1- ssi))))))) (vla-delete (vlax-ename->vla-object ssent)) ) Edited July 6, 2021 by marko_ribar 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.