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

Nhờ viết Lisp tìm tên tuyến

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

Xin chào a.e cadviet, mình có một bản vẽ mặt bằng thoát nước, trên bản vẽ có nhiều tuyến sắp xếp không có trật tự gì hết. mình muốn tìm một tuyến trên bản vẽ nhưng rất mất thời gian và khó tìm thấy mặ dù mình đã ẩn hết các Layer còn lại. Nhờ a.e viết hộ cho một lisp để tìm nhanh hơn, ví dụ mình tìm Tuyến 10-12 thì nhập 10-12 vào thì Tuyến 10-12 hiện giữa màn hình. Cảm ơn a.e trước nha.

 

Bản vẽ: http://www.cadviet.com/upfiles/3/mat_bang_...ky_phuong_1.dwg

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
Xin chào a.e cadviet, mình có một bản vẽ mặt bằng thoát nước, trên bản vẽ có nhiều tuyến sắp xếp không có trật tự gì hết. mình muốn tìm một tuyến trên bản vẽ nhưng rất mất thời gian và khó tìm thấy mặ dù mình đã ẩn hết các Layer còn lại. Nhờ a.e viết hộ cho một lisp để tìm nhanh hơn, ví dụ mình tìm Tuyến 10-12 thì nhập 10-12 vào thì Tuyến 10-12 hiện giữa màn hình. Cảm ơn a.e trước nha.

 

Bản vẽ: http://www.cadviet.com/upfiles/3/mat_bang_...ky_phuong_1.dwg

Hồi truớc mình đã viết lisp này rồi mà giờ tìm hoài không thấy. chán thật

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
Vậy sao bạn không dùng lệnh FIND,sau khi tìm thấy đối tượng thì kick ZOOM TO????

 

hehe. Có những cái rất bât ngờ. nhiều khi cứ cắm đầu cắm cổ vào viết mà không biết rằng cad có cái đó tự bao giờ.

 

Lệnh dưới đây tìm và zoom đoạn text chứa chữ "tuyến" và chữ nhập vào.

Ví dụ

muốn tìm "Tuyến 234 -237" thì nhập 234 hoặc 237

muốn tìm "Tuyến số 40" thì nhập 40

muốn tìm "Tuyến 19 - 24" thì nhập 19-24 không cần dấu cách.

Còn nếu muốn tìm tuyến 236 thì..hehe. Phải thêm vài đoạn code nữa.

 

buồn buồn nhập dấu "-" hay 1 số gì đó vào nó chạy một hồi thấy cũng vui vui.

 

 

Nếu thấy không nhanh hơn lện find thì bác dùng lệnh find theo HD của ketxu nhé.

;npham. www.cadviet.com
(defun c:zt (/ ss tuyen matuyen ename ent i)
(setq matuyen (getstring T "\nTen tuyen:"))
(if matuyen
 (progn
(setq ss (ssget "x" (list
		  (cons -4 "			  (cons 0 "TEXT")
		  (cons 8 "TEXT GHI CHU")
		  (cons -4 "AND>")
		  )))
(setq i 0)
(while (setq ename (ssname ss i))
   (setq ent (entget ename))	   
   (setq tuyen (vl-list->string (vl-remove '32 (vl-string->list (cdr (assoc 1 ent))))))

   (if  (and 
	(wcmatch (strcase tuyen t) "*tuyõn*")
	(wcmatch tuyen (strcat "*" matuyen"*"))
	)		   

 (command "zoom" "c" (cdr (assoc 10 ent)) 75))


 (setq i (1+ i))
 )
))
 (princ)
 )

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

Lệnh là FT, chỉnh thế nào tùy bạn. Mình đưa ra ý tưởng khác bạn 1 chút để dễ dùng hơn. ĐK dùng lisp này: tất cả các text tên tuyến phải được đặt ở layer TENTUYEN. bạn có thể tự sửa code sao cho phù hợp với cách đặt tên layer của bạn. sửa ở đây (8 . "TENTUYEN")

(defun c:FT (/ DXF DCL_FT DCL_ID FILE_DCL HT LST PT0 PT1 PT2 SST TEMP_FT TENT)
(vl-load-com)
(setvar "cmdecho" 0)
(defun DXF (code en) (cdr (assoc code (entget en))))
(setq SST (acet-ss-to-list (ssget "x" '((0 . "TEXT") (8 . "TENTUYEN")))) LST '())
(foreach SSn SST (if (not (member (dxf 1 SSn) LST)) (setq LST (append LST (list (dxf 1 SSn))))))
(setq LST (acad_strlsort LST))
(setq DCL_FT (list (strcat
"ftuyen : dialog { label = \"Free lisp from Cadviet.com\";"
 " : column {"
 " : row { : list_box { key = \"ListT\"; edit_width = 95; height = "
	(rtos (if (<= (1+ (length LST)) 40) (1+ (length LST)) 41)  2 0) ";}}"
 ": row { : button { key = \"cancel\"; label = \"Cancel and exit\"; is_default = true; is_cancel = true;}}"
 "}}" ))
TEMP_FT (vl-filename-mktemp "FT.DCL")
FILE_DCL (open TEMP_FT "W"))
(foreach LL DCL_FT (write-line LL FILE_DCL))
(close FILE_DCL)
(setq DCL_ID (load_dialog TEMP_FT))
(new_dialog "ftuyen" DCL_ID)
(start_list "ListT")
(mapcar 'add_list LST)
(end_list)
(action_tile "ListT" "(setq TenT (nth (fix (atof (get_tile \"ListT\"))) LST)) (done_dialog) ")
(start_dialog) 
(unload_dialog DCL_ID)
(vl-file-delete TEMP_FT)
(if TenT (progn
(foreach SSn SST	(if (= (DXF 1 SSn) TenT) (setq PT0 (DXF 10 SSn) HT (DXF 40 SSn))))
(setq PT1 (polar PT0 (* 0.25 pi) (* 40 HT)) PT2 (polar PT0 (* 1.25 pi) (* 40 HT)))
(command "zoom" "w" PT1 PT2)
(prompt (strcat "- " TenT"\n_Thaistreetz@gmail.com"))) (prompt " - cancel"))
(princ)
);end

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

Lệnh Find sau đó Zoom to bây giờ mình mới biết. Mình đã thử 2 lisp của 2 Thaistreetz và npham viết, kết quả rất tuyệt. Rất cảm ơn cadviet.

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  

×