Need a modification in a lisp to explode all MTEXTS in all nested blocks

Need a modification in a lisp to explode all MTEXTS in all nested blocks

Anonymous
Not applicable
796 Views
0 Replies
Message 1 of 1

Need a modification in a lisp to explode all MTEXTS in all nested blocks

Anonymous
Not applicable

Dear All,

I got a lisp code from this forum, that can explode all mtexts within a block. But it can't explode all mtexts in all nested blocks in a master block.

Please have a look on attached dwg for your understanding. Please modify the below code as per my requirements.

 

(defun c:EXBM
(/
col_ActiveSpace
col_Block
col_Blocks

ename_entlast
ename_entnext

flag_CMDEXPLODE

INSERT_dxf
INSERT_ename
INSERT_Name

list_INSERTNames

Objects1_list
Objects1_sa
Objects2_list
Objects2_var
Objects3_list
Objects3_sa
Objects3_var
obj_AD
obj_INSERT
obj_MTEXT
obj_TEXT

ssIC
ssTC
ss_INSERT
ss_TEXT

TEXT_ename
)
(setq ss_INSERT (ssget '((0 . "INSERT"))))


(if ss_INSERT
(progn
(setq obj_AD (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))

(if (= (getvar 'CVPORT) 1)
(setq col_ActiveSpace (vlax-get-property obj_AD 'PaperSpace))
(setq col_ActiveSpace (vlax-get-property obj_AD 'ModelSpace))
);if


(setq col_Blocks (vlax-get-property obj_AD 'Blocks)
list_INSERTNames nil
ssIC -1
);setq


(repeat (sslength ss_INSERT)
(setq INSERT_ename (ssname ss_INSERT (setq ssIC (1+ ssIC)))
INSERT_dxf (entget INSERT_ename)
obj_INSERT (vlax-ename->vla-object INSERT_ename)
INSERT_Name (vlax-get-property obj_INSERT 'Name)
);setq


(if (not (member INSERT_Name list_INSERTNames))
(progn
(setq list_INSERTNames (append list_INSERTNames (list INSERT_Name))
col_Block (vlax-invoke-method col_Blocks 'Item INSERT_Name)
);setq

(vlax-for vf::object col_Block
(if (= (strcase (vlax-get-property vf::object 'ObjectName)) (strcase "AcDbMText"))
(progn
(setq Objects1_list (list vf::object)
Objects1_sa (vlax-make-safearray vlax-vbObject '(0 . 0))
);setq

(vlax-safearray-fill Objects1_sa Objects1_list)

(setq Objects2_var (vlax-invoke-method obj_AD 'CopyObjects Objects1_sa col_ActiveSpace nil)
Objects2_list (vlax-safearray->list (vlax-variant-value Objects2_var))
obj_MTEXT (car Objects2_list)
);setq

(if (not ACET-EXPLODE)
(setq flag_CMDEXPLODE T)
(setq flag_CMDEXPLODE nil)
);if


(cond
( (not flag_CMDEXPLODE)
(setq ss_TEXT (ACET-EXPLODE (vlax-vla-object->ename obj_MTEXT)))
)

(flag_CMDEXPLODE
(setq ename_entlast (entlast)
ss_TEXT (ssadd)
);setq

(vl-cmdf "_.EXPLODE" (vlax-vla-object->ename obj_MTEXT))

(setq ename_entnext ename_entlast)

(while (setq ename_entnext (entnext ename_entnext))
(ssadd ename_entnext ss_TEXT)
);while
)
);cond


(vlax-release-object obj_MTEXT)


(setq Objects3_list nil
ssTC -1
);setq

(repeat (sslength ss_TEXT)
(setq TEXT_ename (ssname ss_TEXT (setq ssTC (1+ ssTC)))
obj_TEXT (vlax-ename->vla-object TEXT_ename)
Objects3_list (append Objects3_list (list obj_TEXT))
);setq
);repeat

(setq Objects3_sa (vlax-make-safearray vlax-vbObject (cons 0 (1- (length Objects3_list)))))

(vlax-safearray-fill Objects3_sa Objects3_list)

(setq Objects3_var (vlax-invoke-method obj_AD 'CopyObjects Objects3_sa col_Block nil))

(foreach obj_TEXT Objects3_list
(vlax-invoke-method obj_TEXT 'Delete)
(vlax-release-object obj_TEXT)
);foreach

(vlax-invoke-method vf::object 'Delete)
);progn
);if
);vf::object


(vlax-invoke-method obj_INSERT 'Update)

(vlax-release-object col_Block)
);progn
);if

(vlax-release-object obj_INSERT)
);repeat


(vlax-release-object col_Blocks)
(vlax-release-object col_ActiveSpace)
(vlax-release-object obj_AD)
);progn
);if



(princ)
);c:EXBM

 

0 Likes
797 Views
0 Replies
Replies (0)