Jump to content

Recommended Posts

Posted (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 by Ajmal
Posted

need a little more detail of what you are trying to do.

Posted (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 by pkenewell
Posted

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

 

Posted

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

 

  • 6 months later...
Posted

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))
		  )
	      )
	   
          )
    )

 

Posted (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 by marko_ribar
Posted

now its okkey

thanks marko & pkenewell

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...