Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
invention

Find và Replace trong nhiều bản vẽ

Các bài được khuyến nghị

Quản trị ơi,

sao forum ko có .Net cho autocad. Hiện giờ số lượng người dùng C# nói riêng và VS nói chung rất nhiều, và sử dụng cho cad cũng rất mạnh. Sao ko có đề tài nào về nó cả?.

Hiện giờ em có gần cả trăm bản vẽ, mà mỗi bản vẽ em chỉ thay đổi 1 cụm từ liền nhau. như vậy nếu làm bằng tay em sẽ mở autocad cả trăm lần. Có cách nào thay thế cùng 1 lúc ko? hiện giờ em biết viết chút chút bên C#. mong ai đó biết được thì giúp em? thanks alot

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Quản trị ơi,

sao forum ko có .Net cho autocad. Hiện giờ số lượng người dùng C# nói riêng và VS nói chung rất nhiều, và sử dụng cho cad cũng rất mạnh. Sao ko có đề tài nào về nó cả?.

Hiện giờ em có gần cả trăm bản vẽ, mà mỗi bản vẽ em chỉ thay đổi 1 cụm từ liền nhau. như vậy nếu làm bằng tay em sẽ mở autocad cả trăm lần. Có cách nào thay thế cùng 1 lúc ko? hiện giờ em biết viết chút chút bên C#. mong ai đó biết được thì giúp em? thanks alot

Bởi vì chưa ai trên diễn đàn dùng .net hay C# cho AutoCAD cả.

 

Bạn hãy đi tiên phong để mọi người cùng nghiên cứu theo.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bởi vì chưa ai trên diễn đàn dùng .net hay C# cho AutoCAD cả.

 

Bạn hãy đi tiên phong để mọi người cùng nghiên cứu theo.

 

Cách nói chuyện của bac Hoành luôn khiên rất nhiều người cần học hỏi (nói điều này kô biết có thừa kô nữa) . Ở ngoài đời có lẽ bác là người rất tuyệt vời với bạn bè xung quang . Kính bác 1 ly vậy

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào các bạn, hiện nay mình đã viết được 1 doạn code cho việc Find và replace cho nhiều bản vẽ bằng C# mà ko cần mở bản v, mong các bạn xem và góp ý dùm. he heh e.Ngoài ra em còn viet 1 doan code để in hoàn loạt bản vẽ và cũng ko cần open bản vẽ.

file test o day.

-->http://www.cadviet.com/upfiles/cad_test.zip

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào các bạn, hiện nay mình đã viết được 1 doạn code cho việc Find và replace cho nhiều bản vẽ bằng C# mà ko cần mở bản v, mong các bạn xem và góp ý dùm. he heh e.Ngoài ra em còn viet 1 doan code để in hoàn loạt bản vẽ và cũng ko cần open bản vẽ.

file test o day.

-->http://www.cadviet.com/upfiles/cad_test.zip

 

Password là gì hả bác. Sao ko cho pass luon vậy

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào các bạn, hiện nay mình đã viết được 1 doạn code cho việc Find và replace cho nhiều bản vẽ bằng C# mà ko cần mở bản v, mong các bạn xem và góp ý dùm. he heh e.Ngoài ra em còn viet 1 doan code để in hoàn loạt bản vẽ và cũng ko cần open bản vẽ.

file test o day.

-->http://www.cadviet.com/upfiles/cad_test.zip

mình ko biết về lập trình nhưng vừa test qua thấy cái này hay đấy. có mấy nhận xét như sau.

- mới chỉ thực hiện được cho text và mtext, nếu ký tự trong blog thì ko làm đc

- nói là ko cần mở bản vẽ nhưng thực tế bản vẽ vẫn phải mở lên rồi chương trình mới tiến hành thay thế.

- thử với bản vẽ lớn thì.... treo hết cả hệ thống. mình đã phải ngồi đợi đến gần chục phút sau đó phải can thiệp bằng alt+ctrl+del.

- vẫn còn một số lỗi như yêu cầu save bản vẽ gì đấy nhưng mình nghĩ cái đấy ko quan trọng lắm.

mong bạn và các cao thủ trên diễn đàn nghiên cứu để có thể có nhiều ứng dụng hơn.

thank alot !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Quản trị ơi,

sao forum ko có .Net cho autocad. Hiện giờ số lượng người dùng C# nói riêng và VS nói chung rất nhiều, và sử dụng cho cad cũng rất mạnh. Sao ko có đề tài nào về nó cả?.

Hiện giờ em có gần cả trăm bản vẽ, mà mỗi bản vẽ em chỉ thay đổi 1 cụm từ liền nhau. như vậy nếu làm bằng tay em sẽ mở autocad cả trăm lần. Có cách nào thay thế cùng 1 lúc ko? hiện giờ em biết viết chút chút bên C#. mong ai đó biết được thì giúp em? thanks alot

 

Find và replace thực sự không đơn giản nếu dùng tiếng Việt.

 

VD: trong một bản vẽ vừa dùng font VNI, vừa dùng font ABC, bạn có thể thay thế từ "Nếu" nằm trong hai bộ mã đó không, hay cho bất kỳ bảng mã nào.

Việc xác định bộ mã của 1 font bằng lập trình cũng không có đơn giản.

 

Vậy khi gõ vào mục Tìm: "Nếu"

thì nó sẽ thay thế tấtcả các mục từ "Nếu" dc viết bởi bất kỳ bảng mã nào.

 

VBA hay .NET cũng vậy, .NET thì linh hoạt hơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình mới viết tools này dùng để Replace Text và Mtext trong nhiều bản vẽ, nhờ các bạn test giùm nhé :D

 

http://www.cadviet.com/upfiles/2/replace.rar

 

Giải nén file trên, khởi động CAD và load cả 2 file con replace.dvbreplace.lsp.

Gõ lệnh TXR để thực hiện.

Chương trình lần đầu public chắc sẽ mắc một số lỗi, các bạn cứ góp ý vào hòm mail qdzung@gmail.com cho mình.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Khi chọn 1 dwg thì nó lại load toàn bộ các file trong thư mục và chẳng thèm hỏi ý kiến gì, như thế thì nguy to.

Theo tôi thì nên làm trực tiếp trên từng bản vẽ hiện hành, sau khi thực hiện xong cần cho người dùng kiểm tra lại có ưng ý hay không rồi mới save và thoát. Vừa chuyên nghiệp vừa đảm bảo sự chắc chắn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Khi chọn 1 dwg thì nó lại load toàn bộ các file trong thư mục và chẳng thèm hỏi ý kiến gì, như thế thì nguy to.

Theo tôi thì nên làm trực tiếp trên từng bản vẽ hiện hành, sau khi thực hiện xong cần cho người dùng kiểm tra lại có ưng ý hay không rồi mới save và thoát. Vừa chuyên nghiệp vừa đảm bảo sự chắc chắn.

thực ra nếu trên từng bản vẽ đã có lệnh Find của CAD rùi, vì mục đích dùng là "hàng loạt" nên mình mới viết tool này, giả sử bạn thiết kế xong hết, nhưng chủ đầu tư đòi đổi tên bản vẽ, thực hiện trên cả trăm bản thì cũng mất thời gian lắm :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

hôm trước lang thang trên mạng, tìm được cái Lisp của Lee McDonnell, thấy hay quá, tuy nhiên, do bản vẽ nơi mình làm việc, dung toàn tiếng anh nên chưa gặp vấn đề gì. còn với các bản vẽ có tiếng việt, các bạn thử test xem nhé. Lisp có rất nhiều tùy chọn.

 

;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;
;;;ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,¤º°`°º¤;;;
;;																			 ;;
;;																			 ;;
;;					   --=={  Batch Find & Replace  }==--					;;
;;																			 ;;
;;  Will Find and Replace strings entered by the user within Text, MText, Block;;
;;  Attributes, MLeader Text, Table Text and Dimensions within the current	 ;;
;;  drawing and/or a directory (and subdirectories) of drawings.			;;
;;																			 ;;
;;  The user can choose which objects to search, whether the find string is	;;
;;  case sensitive, and whether to search for whole words only, i.e. strings;;
;;  that match the Find String exactly in length.							  ;;
;;																			 ;;
;;  Example:   Find  ~  AutoCAD  =>  Replace With  ~  CAD					  ;;
;;																			 ;;
;;  With 'Match Case' ON:   AutoCAD  =>  CAD								;;
;;																			 ;;
;;  With 'Match Case' OFF:  AutoCAD  =>  CAD								;;
;;						  AUTOCAD  =>  CAD								;;
;;						  AuToCaD  =>  CAD								;;
;;																			 ;;
;;																			 ;;
;;  The user can also choose to 'Ignore Locked Layers', with this option set,  ;;
;;  all objects on Locked Layers are not searched for the Find String, else all;;
;;  objects are searched.													  ;;
;;																			 ;;
;;																			 ;;
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
;;																			 ;;
;;  FUNCTION SYNTAX:  BFind													;;
;;																			 ;;
;;  Notes:-																	;;
;;  ---------																  ;;
;;  As usual the known bug with ObjectDBX arises when it comes to attribute	;;
;;  alignment after modification. A sub-function has been included to try to;;
;;  allow for the shift in position, however it is not 100% foolproof, and a;;
;;  slight shift in position may be noticed. The attribute is realigned when the;;
;;  block is moved manually.												;;
;;																			 ;;
;;  As expected, when using the Batch Find and Replace, drawing thumbnails are ;;
;;  lost upon saving with ObjectDBX. These return when the drawing is saved	;;
;;  manually.																  ;;
;;																			 ;;
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
;;																			 ;;
;;  AUTHOR:																	;;
;;																			 ;;
;;  Copyright © Lee McDonnell, March 2010. All Rights Reserved.				;;
;;																			 ;;
;;	  { Contact: Lee Mac @ TheSwamp.org, CADTutor.net }					  ;;
;;																			 ;;
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
;;																			 ;;
;;  VERSION:																;;
;;																			 ;;
;;  ø 1.0   ~¤~	24th March 2010   ~¤~									;;
;;																			 ;;
;;  º First Release															;;
;;..............................................................................

.;;
;;  ø 1.1   ~¤~	26th March 2010   ~¤~									;;
;;																			 ;;
;;  º Added Options Button.													;;
;;  º Updated String Replacement functions to allow for case sensitivity	;;
;;	options.																 ;;
;;  º Upgraded StringRep function to allow replacement string to contain find  ;;
;;	string.																  ;;
;;  º Fixed bug causing an unsaved drawing to be saved.						;;
;;..............................................................................

.;;
;;  ø 1.2   ~¤~	29th March 2010   ~¤~									;;
;;																			 ;;
;;  º Added ability to perform multiple replacements.						  ;;
;;..............................................................................

.;;
;;  ø 1.3   ~¤~	31st March 2010   ~¤~									;;
;;																			 ;;
;;  º Added ability to edit find and replace entry by double-clicking.		 ;;
;;  º Added 'Table Text' object to Options Dialog.							 ;;
;;  º Added 'Find Whole Words Only' option to Options Dialog.				  ;;
;;  º Redesigned Options Dialog to accommodate new toggles, added mnemonics.;;
;;..............................................................................

.;;
;;																			 ;;
;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=;;
;;																			 ;;
;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;
;;;ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,¤º°`°º¤;;;

(defun c:BFind

;............................................................................
...;

 (   /

;;		 --=={ Local Functions }==--		;

  *error*
  CALCINSPT
  DIR_MODE DIR_TEXT DCL_WRITE DIRDIALOG
  ENTRY_EDIT
  GET_SUBS
  L->PTR LOGO
  OBJECTDBXDOCUMENT OBJRELEASE OPTIONS_DIALOG
  POPULATE_LISTBOX POPUP PTR->L
  READ_CONFIG REMOVE_ITEMS
  SORTBYFIRST STRINGREP SUBST_AT_N
  WRITE_CONFIG

;;		 --=={ Local Variables }==--		;

  *ACAD *ADOC
  *BFIND_CUR* *BFIND_LST* *BFIND_OPT* *BFIND_PAT* *BFIND_SUB*
  ATT
  CASEFLAG CFGFNAME COL
  DBX DCEDITITLE DCFLAG DCFNAME DCOPTTITLE DCTAG DCTITLE DOCLST DOUBLECLICKTIME DWLST
  EXPRESS
  FILE FILEPATH FLAG FOLDER FS FSTR
  I ITEMS
  LOCKED LOCKEDLAYERS LOCKFLAG
  MODE
  NSTR
  ODOC OFILE ONAME OV
  PROGBAR
  ROW RS RSTR
  SHELL
  TMP
  UFLAG
  VAL VERSIONNUMBER VL
  WHOLE WSHSHELL

;;		 --=={ Global Variables }==--	;

; --None--

 )

 (vl-load-com)


;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;

;;						   --=={  Preliminaries  }==--					;;

;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;


 (setq VersionNumber "1.3")

 (setq dcfname	(strcat "LMAC_BFind_V" VersionNumber ".dcl")

	cfgfname   (strcat "LMAC_BFind_V" VersionNumber ".cfg")

	dctitle	(strcat "Batch Find & Replace V" VersionNumber)

	dcopttitle "Options"

	dcedititle "Edit Entry")

 (setq DoubleClickTime 0.0000011667);; Increase to allow for slower double-click

 (setq *acad (vlax-get-acad-object)
	*adoc (vla-get-ActiveDocument *acad))

 (setq Express
(and (vl-position "acetutil.arx" (arx))
	 (not
	   (vl-catch-all-error-p
		 (vl-catch-all-apply
		   (function (lambda nil (acet-sys-shift-down))))))))


;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;

;;						   --=={  Local Functions  }==--					 ;;

;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;


;;  --=={  Error Handler  }==--

 (defun *error* (msg)

(and ofile  (close ofile))
(and dcTag  (unload_dialog dcTag))
(and Express ProgBar (acet-ui-progress))
(and uFlag  (vla-EndUndomark *adoc))
(and ov	 (mapcar (function setvar) vl ov))

(ObjRelease (list *acad *adoc Shell WSHShell dbx oDoc))

(mapcar
  (function (lambda (symbol) (set symbol nil)))

  '(*acad *adoc *BFind_fnd* *BFind_rep* *BFind_pat* *BFind_cur* *BFind_sub* *BFind_opt*))

(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
	(princ (strcat "\n** Error: " msg " **")))

(princ))

;............................................................................

.....;

 (defun write_config (fname lst / wPath ofile)

(if (setq wPath (findfile "ACAD.PAT"))
  (progn
	(setq wPath (vl-filename-directory wPath))

	(or (eq "\\" (substr wPath (strlen wPath)))
		(setq wPath (strcat wPath "\\")))

	(setq ofile (open (strcat wPath fname) "w"))

	(foreach x lst
	  (write-line (vl-prin1-to-string x) ofile))

	(setq ofile (close ofile))

  t)))

;............................................................................

.....;

 (defun read_config  (fname lst / ofile)

(if (and (setq fname (findfile fname))
		 (setq ofile (open fname "r")))
  (progn

	(foreach x lst (set x (read (read-line ofile))))
	(setq ofile (close ofile))

  t)))

;............................................................................

.....;

 (defun ObjRelease (lst)
(mapcar
  (function
	(lambda (x)
	  (if (and (eq (type x) 'VLA-OBJECT)
			   (not (vlax-object-released-p x)))
		(vl-catch-all-apply
		  (function vlax-release-object) (list x))))) lst))

;............................................................................

.....;

 (defun DirDialog (msg dir flag / Shell Fold Path)

(setq *acad (cond (*acad) ((vlax-get-acad-object))))

(setq Shell (vla-getInterfaceObject *acad "Shell.Application")
	  Fold  (vlax-invoke-method Shell 'BrowseForFolder
			  (vla-get-HWND *acad) msg flag dir))
(vlax-release-object Shell)

(if Fold
  (progn
	(setq Path (vlax-get-property
				 (vlax-get-property Fold 'Self) 'Path))
	(vlax-release-object Fold)

	(and (= "\\" (substr Path (strlen Path)))
		 (setq Path (substr Path 1 (1- (strlen Path)))))))

Path)

;............................................................................

.....;

 (defun Get_Subs (folder / file);; CAB
(mapcar
  (function
	(lambda (x) (setq file (strcat folder "\\" x))
				(cons file (apply (function append) (get_subs file)))))
	(cddr (vl-directory-files folder nil -1))))

;............................................................................

.....;

 (defun ObjectDBXDocument (/ acVer)

(setq *acad (cond (*acad) ((vlax-get-acad-object))))

(vla-GetInterfaceObject *acad
  (if (< (setq acVer (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument"
	(strcat "ObjectDBX.AxDbDocument." (itoa acVer)))))

;............................................................................

.....;

 (defun Popup (title flags msg / WSHShell result)

(setq WSHShell (vlax-create-object "WScript.Shell"))
(setq result   (vlax-invoke WSHShell 'Popup msg 0 title flags))
(vlax-release-object WSHShell)

result)

;............................................................................

.....;

 (defun DCL_Write (fname / wPath ofile)

(if (not (findfile fname))

  (if (setq wPath (findfile "ACAD.PAT"))
	(progn
	  (setq wPath (vl-filename-directory wPath))

	  (or (eq "\\" (substr wPath (strlen wPath)))
		  (setq wPath (strcat wPath "\\")))

	  (setq ofile (open (strcat wPath fname) "w"))

	  (foreach str

		'("//;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;//"
		  "//;ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,¤º°`°º¤;//"
		  "//																			   //"
		  "//																			   //"
		  "//					   --=={  Batch Find & Replace  }==--					  //"
		  "//																			   //"
		  "//  BFind.dcl to be used in conjunction with BFind.lsp.						  //"
		  "//																			   //"
		  "//  Copyright © Lee McDonnell, March 2010. All Rights Reserved.				  //"
		  "//																			   //"
		  "//																			   //"
		  "//;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;//"
		  "//;ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,¤º°`°º¤;//"
		  ""
		  "//  --=={ Sub-Assembly Definitions }==--"
		  ""
		  "boxcol : boxed_column {  width =  60; fixed_width  = true; alignment = centered; }"
		  "edit60 :	 edit_box {  width =  60;  fixed_width = true; alignment = left;	 }"
		  "space1 :	   spacer { height = 0.1; fixed_height = true;					   }"
		  "butt10 :	   button {  width =  10; fixed_width  = true; alignment = centered; }"
		  "butt12 :	   button {  width =  12; fixed_width  = true; alignment = centered; }"
		  "butt20 :	   button {  width =  20; fixed_width  = true; alignment = centered; }"
		  ""
		  "//;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;//"
		  ""
		  "						//  --=={ Main Dialog Definition }==--  //"
		  ""
		  "//;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;//"
		  ""
		  "bfind : dialog { key = \"dcl_title\";"
		  "  spacer;"
		  "  : text { label = \"Copyright (c) 2010 Lee McDonnell\"; alignment = right; }"
		  ""
		  "  : column {"
		  "  "
		  "	: text   { key = \"fw\"; label = \"Find &What:\"; }"
		  "	: edit60 { key = \"fstr\"; mnemonic = \"W\"; }"
		  "	"
		  "	spacer;"
		  "	"
		  "	: text   { key = \"rw\"; label = \"&Replace With:\"; }"
		  "	: edit60 { key = \"rstr\"; mnemonic = \"R\"; }"
		  "	"
		  "	spacer;"
		  "  }"
		  "  "
		  "  spacer;"
		  ""
		  "  : row {"
		  ""
		  "	spacer;"
		  "	: butt20 { key = \"add\"; label = \"Add\"; }"
		  "	: butt10 { key = \"clr\"; label = \"Clear\"; }"
		  "	: butt20 { key = \"rem\"; label = \"Remove\"; }"
		  "	spacer;"
		  ""
		  "  }"
		  ""
		  "  spacer;"
		  ""
		  "  : list_box { key = \"rep_list\"; multiple_select = true;"
		  "			   fixed_width = false; alignment = centered; tabs = \"30\"; }"
		  ""
		  "  : text   { label = \"Double-Click to Edit Entry   \"; alignment = right; }"
		  ""
		  "  : boxcol { label = \"Drawing Directory\";"
		  ""
		  "	: row {"
		  ""
		  "	  : column {"
		  ""
		  "		space1;"
		  "		: text   { key = \"dir_text\"; alignment = left; }"
		  "		space1;"
		  ""
		  "	  }"
		  ""
		  "	  : butt10 { label = \"Directory...\"; key = \"dir\"; }"
		  ""
		  "	}"
		  ""
		  "	: row {"
		  ""
		  "	  : toggle { key = \"sub_dir\"; label = \"Include Sub-Directories\"; }"
		  "	  : toggle { key = \"cur_dwg\"; label = \"Current Drawing Only\" ; }"
		  "	  "
		  "	}"
		  ""
		  "	spacer;"
		  "  }"
		  ""
		  "  spacer;"
		  ""
		  "  : row {"
		  ""
		  "	: butt12 { key = \"option\"; label = \"Options\"; }"
		  ""
		  "	: butt12 { key = \"accept\"; label = \"OK\"; is_default = true; }"
		  ""
		  "	: butt12 { key = \"cancel\"; label = \"Cancel\"; is_cancel = true; }"
		  "	"
		  "	: image  { key = \"logo\"; alignment = centered;"
		  "			   width = 16.06; fixed_width  = true;"
		  "			   height = 2.06; fixed_height = true; color = -15; }"
		  "  }"
		  "  "
		  "}"
		  ""
		  ""
		  "//;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;//"
		  ""
		  "					//  --=={ Options Dialog Definition }==--  //"
		  ""
		  "//;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;//"
		  ""
		  "bfind_opt : dialog { key = \"dcl_title_opt\";"
		  "  spacer;"
		  ""
		  "  : row {"
		  ""
		  "	spacer;"
		  ""
		  "	: column {"
		  ""
		  "	  : row {"
		  "	"
		  "		: toggle { key = \"case\"; label = \" Match &Case\"		  ; mnemonic = \"C\"; }"
		  "		: toggle { key = \"whol\"; label = \" Find &Whole Words Only\"; mnemonic = \"W\"; }"
		  ""
		  "	  }"
		  "	"
		  "	  : toggle { key = \"lock\"; label = \" &Ignore Objects on Locked Layers\"; mnemonic = \"I\"; }"
		  ""
		  "	}"
		  ""
		  "  }	"
		  "  "
		  "  spacer;"
		  ""
		  "  : boxed_column { label = \"Objects to Search\";"
		  ""
		  "	: row {"
		  ""
		  "	  : column {"
		  ""
		  "		: toggle { key = \"dtxt\"; label = \" &Single-line Text\"; mnemonic = \"S\"; }"
		  "		: toggle { key = \"mtxt\"; label = \" &Multiline Text\" ; mnemonic = \"M\"; }"
		  "		: toggle { key = \"att\"; label = \" &Block Attributes\"; mnemonic = \"B\"; }"
		  ""
		  "	  }"
		  ""
		  "	  : column {"
		  "	  "
		  "		: toggle { key = \"dim\"; label = \" &Dimension Text\" ; mnemonic = \"D\"; }"
		  "		: toggle { key = \"mld\"; label = \" M&ultileader Text\"; mnemonic = \"u\"; }"
		  "		: toggle { key = \"tab\"; label = \" &Table Text\"	 ; mnemonic = \"T\"; }"
		  ""
		  "	  }"
		  "	  "
		  "	}"
		  ""
		  "	spacer;"
		  ""
		  "  }  "
		  "  spacer;"
		  ""
		  "  ok_cancel;"
		  "}"
		  ""
		  ""
		  "//;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;//"
		  ""
		  "				 //  --=={ Entry Editing Dialog Definition }==--  //"
		  ""
		  "//;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;//"
		  ""
		  "bfind_edit : dialog { key = \"dcl_title_edi\";"
		  "  spacer;"
		  ""
		  "  : column {"
		  "  "
		  "	: text   { key = \"fw\"; label = \"Find &What:\"; }"
		  "	: edit60 { key = \"fstr\"; mnemonic = \"W\"; }"
		  "	"
		  "	spacer;"
		  "	"
		  "	: text   { key = \"rw\"; label = \"&Replace With:\"; }"
		  "	: edit60 { key = \"rstr\"; mnemonic = \"R\"; }"
		  "	"
		  "	spacer;"
		  "  }"
		  ""
		  "  spacer;"
		  ""
		  "  ok_cancel;"
		  "}"
		  ""
		  ""
		  "//;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;//"
		  "//																			   //"
		  "//						   End of Dialog Definition							//"
		  "//																			   //"
		  "//;ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,¤º°`°º¤;//"
		 )

	   (write-line str ofile))

	(setq ofile (close ofile))

	t); File written successfully

nil); Filepath not Found

 t)); DCL file already exists

;............................................................................

.....;

 (defun logo (key)

(start_image key)
(mapcar 'vector_image
		'(22 21 1 0 0 0 0 7 0 0 0 0 1 6 6 6 6 7 43 36 27 36 30 21 21 21 22 22 22
		  22 21 21 21 28 28 28 27 27 30 29 29 30 52 43 43 43 44 44 46 46 45 45 45
		  45 52 52 52 51 51 51 51 51 52 62 65 66 68 68 68 68 67 67 75 75 75 74 74
		  73 66 58 58 59 59 59 59 52 57 57 56 56 56 56 57 58 65 65 65 65 66 95 94
		  94 92 91 91 91 90 89 89 88 87 86 85 74 74 75 75 76 77 78 79 80 81 82 83
		  84 85 86 87 88 88 89 90 91 92 93 94 95 74 73 73 72 72 71 71 71 71 71 71
		  71 72 72 72 73 84 83 82 81 80 79 79 78 77 77 76 76 76 76 76 77 77 78 79
		  79 80 81 82 83 94 94 95 83 83 82 81 80 79 78 77 76 75 74 84 85 86 87 88
		  89 89 90 91 91 91 91 92 95 94 93 92 91 90 89 89 88 87 86 85 84)

		'(20 20 23 23 23 24 24 0 0 0 0 1 1 20 1 1 1 0 2 24 7 15 0 0 0 0 1 1 23 23
		  23 24 24 24 24 24 23 23 2 1 1 0 0 0 0 0 1 1 7 23 23 23 24 24 24 24 24 23
		  23 1 1 1 0 10 16 19 21 22 23 24 24 24 24 24 24 23 23 22 4 4 5 5 6 6 7 24
		  24 24 24 23 23 22 19 16 7 7 6 5 5 22 22 22 17 17 18 18 19 20 20 20 21 21
		  21 21 22 23 23 23 24 24 24 25 25 25 25 25 25 25 25 24 24 24 23 23 22 22
		  22 22 7 8 8 9 10 11 12 13 14 15 16 17 18 19 19 20 21 21 21 21 20 20 19 19
		  18 17 16 15 14 13 12 12 11 10 9 9 8 8 8 7 7 7 7 4 4 4 4 4 4 4 5 5 6 6 7 7
		  8 8 8 9 9 9 10 11 11 11 11 7 7 7 6 6 5 5 4 4 4 4 4 4)

		'(21 6 0 0 0 0 21 0 0 0 0 1 1 6 6 6 7 7 36 46 36 30 21 21 21 22 22 22 22 21
		  21 21 28 28 28 27 27 27 29 29 30 30 43 43 43 44 44 43 46 45 45 45 45 52 52
		  52 51 51 51 51 51 52 52 65 58 68 68 68 68 67 67 75 75 75 74 74 73 65 58 58
		  59 59 59 59 51 57 57 56 56 56 56 57 66 62 65 65 65 66 66 94 94 95 91 91 91
		  90 89 89 88 87 86 85 84 74 75 75 76 77 78 79 80 81 82 83 84 85 86 87 88 88
		  89 90 91 92 93 94 95 92 73 73 72 72 71 71 71 71 71 71 71 72 72 72 73 74 83
		  82 81 80 79 79 78 77 77 76 76 76 76 76 77 77 78 79 79 80 81 82 83 84 94 95
		  94 83 82 81 80 79 78 77 76 75 74 74 85 86 87 88 89 89 90 91 91 91 91 92 95
		  94 93 92 91 90 89 89 88 87 86 85 84 83)

		'(20 20 23 23 24 24 24 0 0 0 1 1 23 1 1 1 0 0 15 7 24 2 0 0 0 1 1 23 23 23 24
		  24 24 24 24 23 23 7 1 1 0 0 0 0 0 1 1 2 23 23 23 24 24 24 24 24 23 23 1 1 1
		  0 0 16 16 21 22 23 24 24 24 24 24 24 23 23 22 7 4 5 5 6 6 7 22 24 24 24 23
		  23 22 19 19 10 7 6 5 5 4 22 22 22 17 18 18 19 20 20 20 21 21 21 21 22 23 23
		  23 24 24 24 25 25 25 25 25 25 25 25 24 24 24 23 23 22 22 22 22 17 8 8 9 10 11
		  12 13 14 15 16 17 18 19 19 20 21 21 21 21 20 20 19 19 18 17 16 15 14 13 12 12
		  11 10 9 9 8 8 8 7 7 7 7 7 4 4 4 4 4 4 5 5 6 6 7 7 8 8 8 9 9 9 10 11 11 11 11
		  7 7 7 6 6 5 5 4 4 4 4 4 4 4)

		'(178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178 178
		  178 178 178 178 178 178 178 178 178))

 (end_image))

;............................................................................

.....;

 (defun Dir_Text (key str)
(set_tile key
  (if str
	(if (< 45 (strlen str))
	  (strcat (substr str 1 42) "...") str) "")))

;............................................................................

.....;

 (defun Dir_Mode (val)
(mapcar
  (function
	(lambda (x)
	  (mode_tile x (atoi val)))) '("sub_dir" "dir" "dir_text")))

;............................................................................

.....;

 (defun SortByFirst (lst)
(if lst
  (vl-sort lst
	(function
	  (lambda (a b) (< (car a) (car b)))))))

;............................................................................

.....;

 (defun Remove_Items (items lst / i)
(setq i -1)
(vl-remove-if
  (function
	(lambda (x) (vl-position (setq i (1+ i)) items))) lst))

;............................................................................

.....;

 (defun StringRep  (lst str case whole / i nl ol old new x)

(foreach x lst
  (setq old (car x) new (cdr x))

  (setq i 0 nl (strlen new)
			ol (strlen old) old (if case (strcase old) old))

  (cond (whole

		   (if (eq old (if case (strcase str) str))
			 (setq str new)))

		(t

		   (while (and (< i (strlen str))
					   (setq i (vl-string-search old (if case (strcase str) str) i)))

			 (setq str (strcat (substr str 1 i) new (substr str (+ i 1 ol))) i (+ i nl))))))

str)

;............................................................................

.....;

 (defun Populate_ListBox (key lst)
(start_list key)

(mapcar (function add_list)
		(mapcar
		  (function
			(lambda (x)
			  (strcat (if (< 29 (strlen (car x)))
						(strcat (substr (car x) 1 26) "...")

						(car x)) "\t" (cdr x))))
		  lst))

(end_list)

lst)

;............................................................................

.....;

 (defun CalcInsPt (obj str / eLst Alig)
;; Modification of VovKa's Routine

 (setq eLst (entget (vlax-vla-object->ename obj))
	Alig (cdr (assoc 72 eLst)))

 (polar (vlax-get obj 'InsertionPoint)
	 (vla-get-Rotation obj)

	 (* (apply (function +)
			   (mapcar
				 (function
				   (lambda (e1 e2) (- (car e1) (car e2))))

				 (textbox eLst)
				 (textbox (subst (cons 1 str) (assoc 1 eLst) eLst))))

		(cond (  (or (= Alig 1) (= Alig 4)) 0.5)

			  (  (= Alig 2) 1.0)

			  (t 0.0)))))

;............................................................................

.....;

 (defun Options_Dialog (tag mode / i tmp)

(cond (  (not (new_dialog "bfind_opt" tag))

		 (Popup "Warning" 16 "Batch Find Options Dialog could not be Loaded")
		 (princ "\n** DCL could not be Loaded **"))

	  (t (set_tile "dcl_title_opt" dcopttitle)

		 (  (lambda (mode / i)
			  (setq i 1)

			  (mapcar
				(function
				  (lambda (tile)
					(set_tile tile
							  (if (= i (logand i mode)) "1" "0"))

					(setq i (lsh i 1))))

				'("case" "lock" "whol" "dtxt" "mtxt" "att" "dim" "mld" "tab")))

		   (setq tmp mode))

		 (setq i 1)

		 (mapcar
		   (function
			 (lambda (tile)
			   (action_tile tile
				 (strcat "(setq tmp ((if (eq \"1\" $value) + -) tmp " (itoa i) "))"))

			   (setq i (lsh i 1))))

		   '("case" "lock" "whol" "dtxt" "mtxt" "att" "dim" "mld" "tab"))

		 (action_tile "accept" "(setq mode tmp) (done_dialog)")

		 (action_tile "cancel" "(done_dialog)")

		 (start_dialog)))

mode)

;............................................................................

.....;

 (defun Entry_Edit (tag entry / fs rs)

(cond (  (not (new_dialog "bfind_edit" tag))

		 (Popup "Warning" 16 "Batch Find Edit Dialog could not be Loaded")
		 (princ "\n** DCL could not be Loaded **"))

	  (t (set_tile "dcl_title_edi" dcedititle)

		 (mapcar (function set) '(fs rs)
				 (mapcar (function set_tile) '("fstr" "rstr")
						 (list (car entry) (cdr entry))))

		 (mode_tile "fstr" 3)

		 (action_tile "fstr" "(setq fs $value)")

		 (action_tile "rstr" "(setq rs $value)")

		 (action_tile "accept"
		   (vl-prin1-to-string
			 (quote
			   (progn
				 (cond (  (or (not fs) (eq "" fs))

						  (popup "Information" 64 "Please Enter a String to Find"))

					   (  (setq entry (cons fs rs))

						  (done_dialog)))))))

		 (action_tile "cancel" "(done_dialog)")

		 (start_dialog)))
entry)

;............................................................................

.....;

 (defun Ptr->L (ptr)
(read (strcat "(" ptr ")")))

;............................................................................

.....;

 (defun L->Ptr (lst)
(vl-string-trim "()"
  (vl-princ-to-string lst)))

;............................................................................

.....;

 (defun Subst_at_n (item lst n)
(if lst
  (cons (if (zerop n) item (car lst))
		(Subst_at_n item (cdr lst) (1- n)))
  (car lst)))

;............................................................................

.....;


;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;

;;						   --=={  Main Function  }==--					;;

;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;


;; Option Bit-Codes

;  Match Case			=   1
;  Ignore Locked Layers  =   2
;  Whole Words Only	  =   4
;  Single-line Text	  =   8
;  Multiline Text		=  16
;  Block Attributes	  =  32
;  Dimension Text		=  64
;  Multileader Text	  = 128
;  Table Text			= 256

 (setq vl '("DIMZIN") ov (mapcar (function getvar) vl))
 (mapcar (function setvar) vl '(0))

;;  ¤º°`°º¤ø,¸¸,ø¤º°`°º¤  --=={  Setup Defaults  }==--  ¤º°`°º¤ø,¸¸,ø¤º°`°º¤

 (or (findfile cfgfname)
  (write_config cfgfname (list 'nil (getvar 'DWGPREFIX) "0" "1" (+ 1 8 16 32 64 128 256))))

 (read_config cfgfname '(*BFind_lst* *BFind_pat* *BFind_cur* *BFind_sub* *BFind_opt*))

 (or *BFind_pat*  (setq *BFind_pat* (getvar 'DWGPREFIX)))
 (or *BFind_cur*  (setq *BFind_cur* "0"))
 (or *BFind_sub*  (setq *BFind_sub* "1"))
 (or *BFind_opt*  (setq *BFind_opt* (+ 1 8 16 32 64 128 256)))

;;  ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤


 (cond (  (not (DCL_Write dcfname))

	   (Popup "Warning" 16 "Dialog Definition File could not be Written")
	   (princ "\n** DCL File Could not be Written **"))

	(  (<= (setq dcTag (load_dialog dcfname)) 0)

	   (Popup "Warning" 16 "Dialog Definition File could not be Found")
	   (princ "\n** DCL File could not be Found **"))

	(  (not (new_dialog "bfind" dcTag))

	   (Popup "Warning" 16 "Batch Find Dialog could not be Loaded")
	   (princ "\n** DCL could not be Loaded **"))

	(t

;............................................................................

.....;

	   (Dir_Text  "dir_text"   *BFind_pat*)
	   (set_tile  "sub_dir"	*BFind_sub*)
	   (set_tile  "dcl_title"	  dcTitle)

	   (Logo "logo")

	   (Dir_Mode (set_tile "cur_dwg" *BFind_cur*))

	   (Populate_Listbox "rep_list"  *BFind_lst*)

	   (action_tile "cur_dwg"  "(Dir_Mode (setq *BFind_cur* $value))")

	   (action_tile "fstr"	 "(setq fstr $value)")

	   (action_tile "rstr"	 "(setq rstr $value)")

	   (action_tile "option"   "(setq *BFind_opt* (Options_Dialog dcTag *BFind_opt*))")   

	   (action_tile "add"
		 (vl-prin1-to-string
		   (quote
			 (progn
			   (cond (  (or (not fstr) (eq "" fstr))

						(popup "Information" 64 "Please Enter a String to Find"))

					 (  (or rstr (setq rstr ""))
						(mapcar (function set_tile) '("fstr" "rstr") '("" ""))

						(setq *BFind_lst*
						  (Populate_Listbox "rep_list"
							(SortByFirst
							  (cons
								(cons fstr rstr) *BFind_lst*))))

						(setq fstr nil rstr nil)))))))		 

	   (action_tile "rem"
		 (vl-prin1-to-string
		   (quote
			 (progn
			   (if *BFind_lst*
				 (if (and ptr (listp (setq items (Ptr->L ptr))))

				   (setq *BFind_lst*
					 (Populate_Listbox "rep_list" 
					   (SortByFirst
						 (Remove_Items items *BFind_lst*))) ptr nil)

				   (popup "Information" 48 "Please Select an Entry from the List to Remove"))

				 (popup "Information" 64 "No Entries Found to Remove"))))))

	   (action_tile "rep_list"
		 (vl-prin1-to-string
		   (quote
			 (progn
			   (setq st (getvar "DATE") ptr $value)

			   (if (and (eq dclkptr $value)
						(< (abs (read (rtos (- en st) 2 10))) DoubleClickTime))
				 (progn

				   (setq n (nth (atoi ptr) *BFind_lst*))

				   (Populate_Listbox "rep_list"
					 (setq *BFind_lst* (SortByFirst
										 (Subst_at_n
										   (Entry_Edit dcTag n) *BFind_lst* (atoi ptr)))))

				   (setq dclkptr nil))

				 (setq en (getvar "DATE") dclkptr $value))))))

	   (action_tile "clr"
		 (vl-prin1-to-string
		   (quote
			 (progn
			   (Populate_Listbox "rep_list" (setq *BFind_lst* nil))))))		 

	   (action_tile "dir"
		 (vl-prin1-to-string
		   (quote
			 (progn
			   (if (setq tmp (DirDialog "Select Directory of Drawings to Process..." nil 0))

				 (Dir_Text "dir_text" (setq *BFind_pat* tmp)))))))		 

	   (action_tile "sub_dir"	"(setq *BFind_sub* $value)")

	   (action_tile "accept"
		 (vl-prin1-to-string
		   (quote
			 (progn
			   (cond (  (not *BFind_lst*)

						(popup "Information" 48 "Please Add an Entry to the List"))

					 (t (done_dialog 1)))))))

	   (action_tile "cancel"	 "(done_dialog 0)")

	   (setq dcFlag (start_dialog))

	   (setq dcTag  (unload_dialog dcTag))

;............................................................................

.....;

	   (if (= 1 dcFlag)
		 (progn
		   (setq uFlag	(not (vla-StartUndomark *adoc))

				 CaseFlag (zerop (logand 1 *BFind_opt*))

				 LockFlag (= 2 (logand 2 *BFind_opt*))

				 Whole	(= 4 (logand 4 *BFind_opt*)))

		   (vlax-for doc (vla-get-Documents *acad)
			 (setq DocLst
			   (cons
				 (cons
				   (strcase
					 (vla-get-fullname doc)) doc) DocLst)))

		   (setq dbx (ObjectDBXDocument))

		   (setq dwLst (cond (  (eq "1" *BFind_cur*)

								(list
								  (cond (  (eq "" (vla-get-FullName *adoc))

										   (strcat (vla-get-Path *adoc) (vla-get-Name *adoc)))

										(t (vla-get-FullName *adoc)))))

							 (t (apply (function append)

									   (vl-remove 'nil
										 (mapcar
										   (function
											 (lambda (Filepath)

											   (mapcar
												 (function
												   (lambda (Filename)
													 (strcat Filepath "\\" Filename)))

												 (vl-directory-files Filepath "*.dwg" 1))))

										   (append (list *BFind_pat*)
												   (apply (function append)
														  (if (= "1" *BFind_sub*)
															(Get_Subs *BFind_pat*))))))))))

		   (if Express (setq ProgBar (acet-ui-progress "Performing Replacement..." (length dwLst))))

		   (foreach dwg dwLst

			 (if Express (acet-ui-progress -1))

			 (cond (  (setq flag (eq "1" *BFind_cur*))

					  (setq oDoc *adoc))

				   (  (setq flag (and (setq oDoc (cdr (assoc (strcase dwg) DocLst))))))

				   (t (setq flag (not (vl-catch-all-error-p
										(vl-catch-all-apply
										  (function vla-open) (list dbx dwg)))))
					  (setq oDoc dbx)))

			 (if flag
			   (progn
				 (setq Locked nil LockedLayers nil)					 

				 (vlax-for lay (vla-get-Layers oDoc)
				   (if (eq :vlax-true (vla-get-Lock lay))
					 (progn
					   (vla-put-lock lay :vlax-false)
					   (setq Locked	   (cons lay Locked)
							 LockedLayers (cons (strcase (vla-get-name lay)) LockedLayers)))))					 

				 (vlax-for lay (vla-get-Layouts oDoc)

				   (vlax-for obj (vla-get-Block lay)

					 (setq oName (vla-get-Objectname obj))

					 (cond (  (not (and LockFlag
										(vl-position
										  (strcase (vla-get-layer obj)) LockedLayers)))

							  (cond (  (and (eq "AcDbBlockReference" oName)
											(eq :vlax-true (vla-get-HasAttributes obj))
											(= 32 (logand 32 *BFind_opt*)))

									   (foreach att (vlax-invoke obj 'GetAttributes)

										 (if (vl-some
											   (function
												 (lambda (str)
												   (vl-string-search str
													 (if CaseFlag (strcase (vla-get-TextString att))
													   (vla-get-TextString att)))))

											   (mapcar (function car) *BFind_lst*))
										   (progn

											 (vla-put-InsertionPoint att
											   (vlax-3D-point
												 (CalcInsPt att (setq nStr (StringRep *BFind_lst*
																			 (vla-get-TextString att) CaseFlag Whole)))))

											 (vla-put-TextString att nStr)))))

									(  (and (wcmatch (strcase oName) "*DIMENSION*")
											(= 64 (logand 64 *BFind_opt*)))

									   (if (not (eq "" (vla-get-TextOverride obj)))
										 (vla-put-TextOverride obj (StringRep *BFind_lst*
																	 (vla-get-TextOverride obj) CaseFlag Whole))))

									(  (or (and (eq "AcDbMText" oName)
												(= 16 (logand 16 *BFind_opt*)))

										   (and (eq "AcDbText" oName)
												(= 8 (logand 8 *BFind_opt*)))

										   (and (eq "AcDbMLeader" oName)
												(= 128 (logand 128 *BFind_opt*))))

									   (vla-put-TextString obj (StringRep *BFind_lst*
																 (vla-get-TextString obj) CaseFlag Whole)))

									(  (and (eq "AcDbTable" oName)
											(= 256 (logand 256 *BFind_opt*)))

									   (setq row (vla-get-Rows obj))
									   (while (not (minusp (setq row (1- row))))

										 (setq col (vla-get-Columns obj))
										 (while (not (minusp (setq col (1- col))))

										   (vla-SetText obj row col (StringRep *BFind_lst*
																	  (vla-GetText obj row col) CaseFlag Whole))))))))))

				 (mapcar
				   (function
					 (lambda (x) (vla-put-lock x :vlax-true))) Locked)

				 (if (vlax-property-available-p oDoc 'FullName)

				   (if (not (eq "" (vla-get-FullName oDoc)))
					 (vla-saveas oDoc dwg))

				   (vla-saveas oDoc dwg)))

			   (princ (strcat "\n** Error Opening File: " (vl-filename-base dwg)  ".dwg **"))))

		   (if Express (setq ProgBar (acet-ui-progress)))

		 ;............................................................................

.....;

		   (princ (strcat "\n<< " (itoa (length dwLst)) " Drawings Processed >>"))

		   (write_config cfgfname (list *BFind_lst* *BFind_pat* *BFind_cur* *BFind_sub* *BFind_opt*))

		   (setq uFlag (vla-EndUndomark *adoc))

		   ); Progn

		 (princ "\n*Cancel*"))

	 (ObjRelease (list dbx oDoc)) (gc) (gc)))

 (mapcar (function setvar) vl ov)
 (princ))


;...............................................................................

..;


(princ "\nø¤º°`°º¤ø  BFind.lsp ~ Copyright © by Lee McDonnell  ø¤º°`°º¤ø")
(princ "\n   ~¤~		  ...Type \"BFind\" to Invoke...			~¤~   ")
(princ)

;;;¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,;;;
;;																			 ;;
;;							 End of Program Code							 ;;
;;																			 ;;
;;;ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,¤º°`°º¤;;;

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Sao e copy lisp về đánh lệnh Bfind ko được vậy bác HDQ2318 ? Xin bác hướng dẫn và kiểm tra lại CODE giúp em với !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

có 1 điều bất tiện trong lisp này, đó là khi find & replace xong, bản vẽ sẽ được lưu lại dưới định dạng của phiên bản cad bạn đang dùng. nếu dùng cad2010, nó sẽ lưu ở định dạng cad2010, mặc dù bạn có chọn trong option là lưu về cad 2006 hay 2004...

mình nghi ngờ ở doạn code

  (defun ObjectDBXDocument (/ acVer)

(setq *acad (cond (*acad) ((vlax-get-acad-object))))

(vla-GetInterfaceObject *acad
  (if (< (setq acVer (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument"
	(strcat "ObjectDBX.AxDbDocument." (itoa acVer)))))

mà không biết có đúng không, cũng chưa biết cách xử lý thế nào để nó save về định dạng cad mình đã chọn trong Option.

Mong được chỉ giáo !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
thực ra nếu trên từng bản vẽ đã có lệnh Find của CAD rùi, vì mục đích dùng là "hàng loạt" nên mình mới viết tool này, giả sử bạn thiết kế xong hết, nhưng chủ đầu tư đòi đổi tên bản vẽ, thực hiện trên cả trăm bản thì cũng mất thời gian lắm :)

Bản vẽ của mình có rất nhiều fon mình không dùng được lệnh find. có cách nào khắc phục điều này không các bạn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Kính chào diễn đàn, mình mới sưu tầm được 1 lisp find and replace rất hay, nhưng khi chạy bị lỗi;

Lỗi báo:

 

<< 1 Drawings Processed >>
<< No Replacements Made >>
mà không hiểu sai ở đâu?

Xin mọi người giúp đỡ!

Trân trọng!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Kính chào diễn đàn, mình mới sưu tầm được 1 lisp find and replace rất hay, nhưng khi chạy bị lỗi;

 

Lỗi báo:

 1 Drawings Processed

No Replacements Made

Mà không hiểu sai ở đâu?

Xin mọi người giúp đỡ!

Trân trọng!

FILE MÌNH ĐÃ ĐÍNH KÈM Ở TRÊN

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Kính chào diễn đàn, mình mới sưu tầm được 1 lisp find and replace rất hay, nhưng khi chạy bị lỗi;

...........

thật không thể hiểu được ! (bị lỗi sao có thể kết  luận là rất hay)

 

 

"Find and Replacelà LISP của Lee Mac, một nhãn hiệu chất lượng có thể nói là "thật tuyệt vời"

15454_fnr2.png

 

 

Thế thì có vấn đề gì ở đây?

Lỗi báo:

 1 Drawings Processed

No Replacements Made

...........

Cá nhân tôi cho rằng v/đề là ở người sử dụng, thực là hàm hồ khi kết luận dòng thông báo "1 Drawing ..... No Replacements Made"  là Lisp bị lỗi.

nôi dung thông báo đại khái là "Đã xử lý 1 bản vẽ và kết quả là không thực hiện việc thay thế được bất kỳ đối tượng nào" (do người dùng nhập nội dung trong mục tìm kiếm "Find What" không có trong bản vẽ)

Tôi xác nhận lại, đây là dòng thông báo kết quả sau khi Lisp chạy xong, không phải lỗi.

Lỗi (nếu có) chắc là vốn tiếng Anh của bạn.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bác Gia_Bach cho hỏi tí: vì sao tôi dùng thì nó báo 2 files cfg và dcl không ghi được?

 

Chắc liên quan đến hệ điều hành và hàm _GetSavePath

(tôi dùng win8.1 Cad2014-2015) 

(defun _GetSavePath ( / tmp )
    (cond      
      ( (setq tmp (getvar 'ROAMABLEROOTPREFIX))
        (strcat (vl-string-right-trim "\\" (vl-string-translate "/" "\\" tmp)) "\\Support")
      )
      ( (setq tmp (findfile "ACAD.pat"))
        (vl-string-right-trim "\\" (vl-string-translate "/" "\\" (vl-filename-directory tmp)))
      )
      ( (vl-string-right-trim "\\" (vl-filename-directory (vl-filename-mktemp))) )
    )
  )

PS : Bác mà cũng ... hỏi, thì e rằng   .... :(

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

thật không thể hiểu được ! (bị lỗi sao có thể kết  luận là rất hay)

 

 

"Find and Replace" là LISP của Lee Mac, một nhãn hiệu chất lượng có thể nói là "thật tuyệt vời"

15454_fnr2.png

 

 

Thế thì có vấn đề gì ở đây?

Cá nhân tôi cho rằng v/đề là ở người sử dụng, thực là hàm hồ khi kết luận dòng thông báo "1 Drawing ..... No Replacements Made"  là Lisp bị lỗi.

nôi dung thông báo đại khái là "Đã xử lý 1 bản vẽ và kết quả là không thực hiện việc thay thế được bất kỳ đối tượng nào" (do người dùng nhập nội dung trong mục tìm kiếm "Find What" không có trong bản vẽ)

Tôi xác nhận lại, đây là dòng thông báo kết quả sau khi Lisp chạy xong, không phải lỗi.

Lỗi (nếu có) chắc là vốn tiếng Anh của bạn.

Mình nói hay là về mặt ý tưởng của lệnh find and replace đó!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chắc liên quan đến hệ điều hành và hàm _GetSavePath

(tôi dùng win8.1 Cad2014-2015) 


PS : Bác mà cũng ... hỏi, thì e rằng   .... :(

Thay bằng hàm trên thì ghi 2 files được, gọi dialog được, nhưng find hoặc raplace thì không nhúc nhích gì đến đối tượng cả, mặc dầu text được chọn trực tiếp (không thể sai). Và nó báo y như bạn Lisphnvn72015 đang hỏi vậy.

Có lẽ bị lỗi thật?

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×