Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
5 replies to this topic

#1 van tu

van tu

    biết zoom

  • Members
  • Pip
  • 15 Bài viết
Điểm đánh giá: 9 (bình thường)

Đã gửi 06 December 2010 - 10:12 PM

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.c...ky_phuong_1.dwg
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 06 December 2010 - 11:11 PM

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????
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 06 December 2010 - 11:32 PM

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.c...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
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#4 npham

npham

    biết lệnh rotate

  • Members
  • PipPipPip
  • 136 Bài viết
Điểm đánh giá: 75 (tàm tạm)

Đã gửi 06 December 2010 - 11:35 PM

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

  • 0

#5 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 07 December 2010 - 01:43 AM

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

  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#6 van tu

van tu

    biết zoom

  • Members
  • Pip
  • 15 Bài viết
Điểm đánh giá: 9 (bình thường)

Đã gửi 07 December 2010 - 08:10 AM

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.
  • 0