(prompt "           ")(terpri)
(prompt "[------·Î¿ìÄÚ¸®¾Æ ¼Ó¼ºÆíÁý±âÅø ·Îµù ¿Ï·á--------]")(terpri)
(prompt "[-------------  Type MSK --------------]") (terpri)

(defun c:msk (/)
  (command "opendcl")
  (dcl_project_load "attchanger" t)
   
  (dcl_Form_Show attchanger_Mdwg )
  (princ)
  );mainÇÔ¼ö
  

  
  (defun c:attchanger_Mdwg_OnInitialize (/)

(dcl_Control_SetEventInvoke attchanger_Mdwg_textbutton2 1)

(dcl_Control_SetEventInvoke attchanger_Mdwg_dwglist 1);ÀÌ»óÅÂ¿©¾ß¸¸ ¸í·É½ÇÇàµÊ..
(dcl_Control_SetEventInvoke attchanger_Mdwg_ListBox1 1);ÀÌ»óÅÂ¿©¾ß¸¸ ¸í·É½ÇÇàµÊ..
(dcl_Control_SetEventInvoke attchanger_Mdwg_TextButton1 1);ÀÌ»óÅÂ¿©¾ß¸¸ ¸í·É½ÇÇàµÊ..
(dcl_Control_SetEventInvoke attchanger_Mdwg_seetouser 1);ÀÌ»óÅÂ¿©¾ß¸¸ ¸í·É½ÇÇàµÊ..
(dcl_Control_SetEventInvoke attchanger_Mdwg_onefolder 1);ÀÌ»óÅÂ¿©¾ß¸¸ ¸í·É½ÇÇàµÊ..
(dcl_Control_SetEventInvoke attchanger_Mdwg_clear 1);ÀÌ»óÅÂ¿©¾ß¸¸ ¸í·É½ÇÇàµÊ..
(dcl_Control_SetEventInvoke attchanger_Mdwg_singleUpdate 1);´ÜÀÏ°´Ã¼¼Ó¼º°ª¾÷µ«
(dcl_Control_SetEventInvoke attchanger_Mdwg_Multiple  1);º¹¼ö°´Ã¼¼Ó¼º°ª¾÷µ«
(dcl_Control_SetEventInvoke attchanger_Mdwg_oldtag 1)
(dcl_Control_SetEventInvoke attchanger_Mdwg_oldatt 1)
(dcl_Control_SetEventInvoke attchanger_Mdwg_newatt 1)
(dcl_Control_SetEventInvoke attchanger_Mdwg_Grid1 1);±×¸®µå·Î ¼Ó¼ºÅ×ÀÌºí°ª´øÁö±â..
(dcl_Control_SetEventInvoke attchanger_Mdwg_OneShot 1)

)

(defun c:attchanger_Mdwg_textbutton2_OnClicked (/ subfolderlist path1 dwglist filecnt filenamelist flng ttstring)

(setq path1 (acet-ui-pickdir))
     (gc)
     (setq subfolderlist (getsubfolders path1));call function getsubfolders 
	   (setq dwglist (getdwglist subfolderlist));call function dwglist from each subfolders.
	   (setq filecnt 0);¹Ýº¹¹® Ã³À½ ÁöÁ¤.. 
           (setq filenamelist 
             (mapcar '(lambda (y)
                        (vl-string-subst "" ".dwg" y))
			                             (filename subfolderlist))
);end filenamelist 

(setq flng (length dwglist))
(setq flng (rtos flng 2 0 ))

(setq ttstring (strcat "Total  " flng " dwg files Seleted ."))
(dcl_ListBox_Clear attchanger_Mdwg_dwglist)
(dcl_ListBox_AddList attchanger_Mdwg_dwglist dwglist)
(dcl_Control_SetText attchanger_Mdwg_seetouser ttstring)

);end defun 

;´ÜÀÏÆú´õ ·ÎµåÇÔ¼ö..
(defun c:attchanger_Mdwg_onefolder_OnClicked (/ onefolder )
(setq onefolder (dcl_Form_Show attchanger_opendwg "C:\\" "select dwg" ))
(setq onesee (length onefolder))
(setq onesee (rtos onesee 2 0))
(setq onestring (strcat "Total  " onesee " dwg files Seleted ."))
(dcl_ListBox_Clear attchanger_Mdwg_dwglist);µµ¸é¸®½ºÆ®¸ñ·ÏÀ» Áö¿ì°í..
(dcl_ListBox_AddList attchanger_Mdwg_dwglist onefolder);
(dcl_Control_SetText attchanger_Mdwg_seetouser onestring);»ç¿ëÀÚ¿¡°Ô ¼±ÅÃµÈ ÆÄÀÏ È­¸é Ãâ·Â..
)
;;;¸ñ·ÏÁö¿ì±â..
(defun c:attchanger_Mdwg_clear_OnClicked ( / )
(setq cleartext "Completed Clear all Dwgs.")
(dcl_Control_SetText attchanger_Mdwg_seetouser cleartext);»ç¿ëÀÚ¿¡°Ô ¼±ÅÃµÈ ÆÄÀÏ È­¸é Ãâ·Â..
(dcl_ListBox_Clear attchanger_Mdwg_dwglist)
(dcl_ListBox_Clear attchanger_Mdwg_ListBox1)
 (dcl_Grid_Clear attchanger_Mdwg_Grid1);±×¸®µå¸®½ºÆ®»èÁ¦ÈÄ »õ·Î¿î°ªÀÔ·Â
(dcl_Control_SetText attchanger_Mdwg_oldtag "Cleared")
(dcl_Control_SetText attchanger_Mdwg_oldatt "Cleared")
(dcl_Control_SetText attchanger_Mdwg_newatt "Cleared")
)
;;;;;dwglist ¸®½ºÆ®¹Ú½º°¡ ¼±ÅÃ°ªÀÌ ¹Ù²î¸é ÀÌº¥Æ®¹ß»ý .
 (defun c:attchanger_Mdwg_dwglist_OnSelChanged (nselect seltext / lsttag lsttxt alllist tagcnt gridcnt )
 
(setq single (dcl_ListBox_GetItemText attchanger_Mdwg_dwglist (dcl_ListBox_GetCurSel attchanger_Mdwg_dwglist)))

 (setq DBXstr (if (< (atof (getvar "ACADVER")) 16.0) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa (atoi (getvar "AcadVer")))))
	DBXDoc (vla-getinterfaceobject (vlax-get-acad-object) DBXstr)
  );end define dbxstr and dbxdoc
     	 
	     (setq dwg single)
          (vla-open DBXDoc dwg ) ;vla°´Ã¼ ºÒ·¯¿À±â
		   (vlax-for upc_blkobj
			 (vla-get-modelspace DBXDoc) ;seperate Modelspace and paperspace 
                (if (and (= (vla-get-objectname upc_blkobj) "AcDbBlockReference") (= (vla-get-hasattributes upc_blkobj) :vlax-true))
		        (progn
                            (setq lst
			  (mapcar  '(lambda (Att)
		                                   (cons (vla-get-tagstring att) (vla-get-TextString Att) ));end lambda
                                                            (vlax-invoke upc_blkobj 'GetAttributes)
                                      );end mapcar
				   	  );end setq
				 
			   (setq lsttag (mapcar '(lambda (txt) (car txt)) lst) );;;att¹®ÀÚ°ª¸®½ºÆ® ÀúÀåº¯¼ö¿¡¼­ ¼Ó¼º¹®ÀÚ°ª»Ì¾Æ¿À±â.
			     (setq lsttxt (mapcar '(lambda (txt) (cdr txt)) lst) ) 
			
               		  
		
			  (dcl_ListBox_Clear attchanger_Mdwg_ListBox1);¸®½ºÆ®¹Ú½º°ª »èÁ¦.ÈÄ ¸®½ºÆ® ³Ñ±è..
		      (dcl_ListBox_AddList attchanger_Mdwg_ListBox1 lsttag);¼Ó¼ºÅÂ±×¸®½ºÆ® ¸®½ºÆ®¹Ú½º1·Î³Ñ±è..
			  (dcl_Grid_Clear attchanger_Mdwg_Grid1);±×¸®µå¸®½ºÆ®»èÁ¦ÈÄ »õ·Î¿î°ªÀÔ·Â
			  (setq lsttag (reverse lsttag)
			        lsttxt (reverse lsttxt)
					)
			  (setq tagcnt 0)
			  (setq grid (list (list (nth 0 lsttag) (nth 0 lsttxt))))
			  (setq tagcnt (+ 1 tagcnt))
			  (setq gridcnt (length lsttag))
			  (repeat (- gridcnt 1)
			  (setq grid (cons (list (nth tagcnt lsttag) (nth tagcnt lsttxt)) grid)) ;¿¬¼ÓÀûÀ¸·Î ±×¸®µå°ª ¸®½ºÆ®·Î ¸¸µé±â
			  (setq tagcnt (+ 1 tagcnt))
			   );repeat ¿Ï·á
			 
			 (dcl_Grid_FillList attchanger_Mdwg_Grid1 grid); ±×¸®µå¿¡°ª³Ö±â.
			 
			 
			 
			  
			  );end progn
		  );end if

			 );vlax-for ¸ðÇüÅÇ Á¾·á
			 
			 (vlax-for upc_blkobj
			 (vla-get-paperspace DBXDoc) ;seperate Modelspace and paperspace 
                (if (and (= (vla-get-objectname upc_blkobj) "AcDbBlockReference") (= (vla-get-hasattributes upc_blkobj) :vlax-true))
		        (progn
                            (setq lst
			  (mapcar  '(lambda (Att)
		                                   (cons (vla-get-tagstring att) (vla-get-TextString Att) ));end lambda
                                                            (vlax-invoke upc_blkobj 'GetAttributes)
                                      );end mapcar
				   	  );end setq
				 
			   (setq lsttag (mapcar '(lambda (txt) (car txt)) lst) );;;att¹®ÀÚ°ª¸®½ºÆ® ÀúÀåº¯¼ö¿¡¼­ ¼Ó¼º¹®ÀÚ°ª»Ì¾Æ¿À±â.
			     
               		  
			  
			  (dcl_ListBox_Clear attchanger_Mdwg_ListBox1);¸®½ºÆ®¹Ú½º°ª »èÁ¦.ÈÄ ¸®½ºÆ® ³Ñ±è..
		      (dcl_ListBox_AddList attchanger_Mdwg_ListBox1 lsttag);¼Ó¼ºÅÂ±×¸®½ºÆ® ¸®½ºÆ®¹Ú½º1·Î³Ñ±è..
			 
			  
			  );end progn
		  );end if

			 );vlax-for ¹èÄ¡ÅÇ Á¾·á
			 
			 
	 
		 
	 (vlax-release-object dbxdoc);;µµ¸é´Ý±â...	
	
  );end defunc 
  
  
  
  ;ÅÂ±×¸®½ºÆ®¿¡¼­ ¼Ó¼º°ª °¡Á®¿À±â...

(defun c:attchanger_Mdwg_ListBox1_OnSelChanged (nselect seltext / oldtag)

  (setq lsttxt (mapcar '(lambda (txt) (cdr txt)) lst) );;;att¹®ÀÚ°ª¸®½ºÆ® ÀúÀåº¯¼ö¿¡¼­ ¼Ó¼º¹®ÀÚ°ª»Ì¾Æ¿À±â.   
    
(setq oldtag  (dcl_ListBox_GetItemText attchanger_Mdwg_ListBox1  (dcl_ListBox_GetCurSel attchanger_Mdwg_ListBox1)))
(dcl_Control_SetText attchanger_Mdwg_oldtag oldtag)  ;±âÁ¸ÅÂ±×°ª¼³Á¤..
		      (setq lsttxtcnt (dcl_ListBox_GetCurSel attchanger_Mdwg_ListBox1));¸®½ºÆ®¹Ú½º¿¡¼­ ÅØ½ºÆ®¹Ú½º·Î³Ñ±æ½Ã.°ª..
              (setq oldatt (nth lsttxtcnt lsttxt))			  
			   (dcl_Control_SetText attchanger_Mdwg_oldatt oldatt); ±âÁ¸¼Ó¼º°ª ÀúÀå.
                (dcl_Control_SetText attchanger_Mdwg_newatt "")						 
               									 
	     	 					 );end  defunc
   
(defun c:attchanger_Mdwg_OneShot_OnClicked (/)

(updateAll )

)


   
  ;;;;;;;;;;;;;´ÜÀÏ¼Ó¼º°´Ã¼ ¾÷µ¥ÀÌÆ®..ÇÔ¼ö..
  (defun c:attchanger_Mdwg_singleUpdate_OnClicked (/ dwgsingle)
  (setq dwgsingle (dcl_ListBox_GetSelectedItems attchanger_Mdwg_dwglist));¼±ÅÃµÈ µµ¸é°æ·ÎÀúÀå..
  (DBXSingle dwgsingle);´ÜÀÏ °´Ã¼ µ¹¸®±â ½ÇÇà..
  
)



;º¹¼ö°´Ã¼ ½ÇÇàÇÏ±â..
(defun c:attchanger_Mdwg_Multiple_OnClicked (/ dwgcnt Mlist)
(setq dwgcnt (dcl_ListBox_GetCount attchanger_Mdwg_dwglist))
(setq Mlist (dcl_Control_GetList attchanger_Mdwg_dwglist))
(DBXMultiple Mlist)

)


  (defun DBXSingle (DbxSingle / )
  
  (setq DBXstr (if (< (atof (getvar "ACADVER")) 16.0) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa (atoi (getvar "AcadVer")))))
	DBXDoc (vla-getinterfaceobject (vlax-get-acad-object) DBXstr)
  )
  
    (setq dwgname DbxSingle);dwgÀÌ¸§À» °æ·Î·Î ¼³Á¤
    (vla-open dbxdoc dwgname) ;dbx·Î µµ¸é ¿­±â ½ÇÇà
    (vlax-for upc_blkobj (vla-get-modelspace DBXDoc)
      (if (and (= (vla-get-objectname upc_blkobj) "AcDbBlockReference") (= (vla-get-hasattributes upc_blkobj) :vlax-true))
	(progn
	  (setq attlist (vlax-invoke upc_blkobj 'GetAttributes))
	  (foreach upc_att attlist
	 
	    (if (= (vla-get-tagstring upc_att) (dcl_Control_GetText attchanger_Mdwg_oldtag));¼Ó¼ºÅÂ±×°ª ÀÔ·ÂÈÄ ¼Ó¼º¸®½ºÆ®¿¡¼­ °°Àº°ªÀÌÀÖÀ¸¸é ½ÇÇà
	      ;(vlax-put-property upc_att 'TextString (cdr (assoc "DI_DRWNO" td_dwgcode)))
    	          (progn
     	     (vla-put-textString upc_att (dcl_Control_GetText attchanger_Mdwg_newatt) )
									
                (moveatt upc_att)
				);end 1 progn
				); end 1 if
				);end foreach 1
			);Å« prognÁ¾·á..
     );end if  Å« if¹® Á¾·á
    );end vlax-for ¸ðÇüÅÇÁ¾·á
	
	(vlax-for upc_blkobj (vla-get-paperspace DBXDoc)
      (if (and (= (vla-get-objectname upc_blkobj) "AcDbBlockReference") (= (vla-get-hasattributes upc_blkobj) :vlax-true))
	(progn
	  (setq attlist (vlax-invoke upc_blkobj 'GetAttributes))
	  (foreach upc_att attlist
	 
	    (if (= (vla-get-tagstring upc_att) (dcl_Control_GetText attchanger_Mdwg_oldtag));¼Ó¼ºÅÂ±×°ª ÀÔ·ÂÈÄ ¼Ó¼º¸®½ºÆ®¿¡¼­ °°Àº°ªÀÌÀÖÀ¸¸é ½ÇÇà
	      ;(vlax-put-property upc_att 'TextString (cdr (assoc "DI_DRWNO" td_dwgcode)))
    	          (progn
     	     (vla-put-textString upc_att (dcl_Control_GetText attchanger_Mdwg_newatt) )
									
                (moveatt upc_att)
				);end 1 progn
				); end 1 if
				);end foreach 1
			);Å« prognÁ¾·á..
     );end if  Å« if¹® Á¾·á
    );end vlax-for ¹èÄ¡ÅÇÁ¾·á
	
	
    ;(setq dwgname1 (strcat (substr dwgname 1 (- (strlen dwgname) 4)) "-1.dwg"))
    (vla-saveas dbxdoc dwgname)

  (vlax-release-object dbxdoc)
  (princ)
);end defun


 
 ;;;;;;;;;;;;;;;;;;;º¹¼ö·Î ÆÄÀÏ°ª µ¹·Á¹ÞÀ»¶§.......¾²´ÂÇÔ¼ö.....

  
  (defun DBXMultiple (DbxMultiple / )
  
  (setq DBXstr (if (< (atof (getvar "ACADVER")) 16.0) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa (atoi (getvar "AcadVer")))))
	DBXDoc (vla-getinterfaceobject (vlax-get-acad-object) DBXstr)
  )
    
  (foreach dwg DbxMultiple  ;Å« foreach¹® ..
	   
    (setq dwgname dwg);dwgÀÌ¸§À» °æ·Î·Î ¼³Á¤
    (vla-open dbxdoc dwgname) ;dbx·Î µµ¸é ¿­±â ½ÇÇà
    (vlax-for upc_blkobj (vla-get-modelspace DBXDoc)
      (if (and (= (vla-get-objectname upc_blkobj) "AcDbBlockReference") (= (vla-get-hasattributes upc_blkobj) :vlax-true))
	(progn
	  (setq attlist (vlax-invoke upc_blkobj 'GetAttributes))
	  (foreach upc_att attlist
	 
	    (if (= (vla-get-tagstring upc_att) (dcl_Control_GetText attchanger_Mdwg_oldtag));¼Ó¼ºÅÂ±×°ª ÀÔ·ÂÈÄ ¼Ó¼º¸®½ºÆ®¿¡¼­ °°Àº°ªÀÌÀÖÀ¸¸é ½ÇÇà
	     
    	          (progn
     	     (vla-put-textString upc_att (dcl_Control_GetText attchanger_Mdwg_newatt) )
									
                (moveatt upc_att)
				);end 1 progn
				); end 1 if
				);end foreach 1
			);Å« prognÁ¾·á..
     );end if  Å« if¹® Á¾·á
	 
    );end vlax-for ¸ðÇüÅÇÁ¾·á
	
	    (vlax-for upc_blkobj (vla-get-paperspace DBXDoc)
      (if (and (= (vla-get-objectname upc_blkobj) "AcDbBlockReference") (= (vla-get-hasattributes upc_blkobj) :vlax-true))
	(progn
	  (setq attlist (vlax-invoke upc_blkobj 'GetAttributes))
	  (foreach upc_att attlist
	 
	    (if (= (vla-get-tagstring upc_att) (dcl_Control_GetText attchanger_Mdwg_oldtag));¼Ó¼ºÅÂ±×°ª ÀÔ·ÂÈÄ ¼Ó¼º¸®½ºÆ®¿¡¼­ °°Àº°ªÀÌÀÖÀ¸¸é ½ÇÇà
	     
    	          (progn
     	     (vla-put-textString upc_att (dcl_Control_GetText attchanger_Mdwg_newatt) )
									
                (moveatt upc_att)
				);end 1 progn
				); end 1 if
				);end foreach 1
			);Å« prognÁ¾·á..
     );end if  Å« if¹® Á¾·á
	 
    );end vlax-for ¹èÄ¡ÅÇÁ¾·á
	
	
	
	(vla-saveas dbxdoc dwgname)
	);end big foreach
    
    

  (vlax-release-object dbxdoc)
  (princ)
);end defun



;get dwglistÆÄÀÏ °¡Á®¿À±â
(defun getdwglist (folderlist)
(apply 'append
(mapcar '(lambda (f)
(mapcar '(lambda (name)
(strcat f "\\" name)
)
(vl-directory-files f "*.dwg")
)
)
folderlist)
)
)

;ÆÄÀÏÀÌ¸§ °¡Á®¿À±â...		 
(defun filename (folderlist)
(apply 'append
(mapcar '(lambda (g)
(mapcar '(lambda (name)
(strcat name)
)
(vl-directory-files g "*.dwg")
)
)
folderlist)
)
)		 


;getsubfolder list °¡Á®¿À±â..
(defun getsubfolders (folder / tree)
(defun vl-dir-tree (p / dirs)
(setq dirs (vl-remove-if '(lambda (x)
(or (eq "." x)
(eq ".." x))
)
(vl-directory-files p nil -1))
)
(foreach f dirs
(vl-dir-tree (strcat p "\\" f))
(setq tree (cons (strcat p "\\" f) tree))
)
)
(setq tree (list folder))
(vl-dir-tree folder)
)


;ÅÂ±×¹®ÀÚ°ª À§Ä¡ º¯°æ¼öÁ¤..
(defun moveatt ( att / cenpt inspt minpt maxpt twidth newpt )
  (if (/= (vla-get-textstring att) "")
    (progn
      (setq cenpt (vla-get-textalignmentpoint att))
      (setq inspt (vla-get-insertionpoint att))
      (setq cenpt (vlax-safearray->list (vlax-variant-value cenpt)))
      (setq inspt (vlax-safearray->list (vlax-variant-value inspt)))
      (vla-getboundingbox att 'minp 'maxp)
      (setq minpt (vlax-safearray->list minp))
      (setq maxpt (vlax-safearray->list maxp))
      (setq twidth (abs (- (car maxpt) (car minpt))))
      (setq newpt (list (- (car cenpt) (/ twidth 2)) (cadr inspt) (cadr inspt)))
      (vla-put-insertionpoint att (vlax-3d-point newpt))
   )
  )
)











  









