Đến nội dung


Hình ảnh
- - - - -

[Chia sẻ] Lisp xóa layer Defpoints


  • Please log in to reply
2 replies to this topic

#1 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 23 May 2012 - 06:36 PM

Bình thường, layer Defpoints không thể xóa được. Tuy nhiên trong một số trường hợp vẫn nảy sinh nhu cầu xóa cái layer này. Hôm trước em phát hiện ra là để xóa layer này, cần phải làm:

1. Xóa hết các dimension
2. Purge các block có dạng: *D1, *D2,...
3. Đổi tên layer Defpoints thành tên khác, ví dụ : deletelayer
4. Purge layer deletelayer này là xong

Vì phải thực hiện nhiều lần, nên em đã viết lisp sau. Share lên đây cho cả nhà, ai thấy lisp chưa ổn chỗ nào thì mong bớt chút thời gian cho em ý kiến với:


;;; Written by pdle
(defun c:bst()
(setq lb (list (cdr (assoc 2 (tblnext "block" T))))) ; Reset cho tblnext chay tu dau bang block
(while (and(not (member (setq vbl(cdr (assoc 2 (tblnext "block")))) lb)) vbl)
(setq lb (cons vbl lb))
) ; Lay het ten cac block
(setq sd (ssget "_X" (list (cons 0 "DIMENSION"))))
(if sd
(foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex sd)))
(entdel ent)
)
) ; Xoa het dimension
(foreach ent lb
(if (=(substr ent 1 2) "*D") (command "-purge" "b" ent "y" "y"))
) ; Purge cac block dang *D
(if (tblsearch "layer" "Defpoints")
(progn
(command "-rename" "la" "Defpoints" "deletelayer")
(command "-purge" "la" "deletelayer" "y" "y")
)
) ; Doi ten cho Defpoints va xoa no
)

Em có 2 câu hỏi sau:

1) Trong trường hợp command của CAD không thực hiện được lệnh, chẳng hạn lệnh purge không purge được block, thì làm thế nào để có thể kiểm soát bằng lisp

2) Các block dạng *E1, *E2 là liên quan đến gì trong CAD (chẳng hạn *D1, *D2,... thì liên quan đến Dimension)
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 23 May 2012 - 08:37 PM

Bình thường, layer Defpoints không thể xóa được. Tuy nhiên trong một số trường hợp vẫn nảy sinh nhu cầu xóa cái layer này. Hôm trước em phát hiện ra là để xóa layer này, cần phải làm:

1. Xóa hết các dimension
2. Purge các block có dạng: *D1, *D2,...
3. Đổi tên layer Defpoints thành tên khác, ví dụ : deletelayer
4. Purge layer deletelayer này là xong
.......

Chi mà rắc rối rứa bạn?
Laydel hoặc Laymrg xoá được tất (trừ Layer hiện hành)
  • 2

#3 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 May 2012 - 09:47 PM

Em có 2 câu hỏi sau:
1) Trong trường hợp command của CAD không thực hiện được lệnh, chẳng hạn lệnh purge không purge được block, thì làm thế nào để có thể kiểm soát bằng lisp
2) Các block dạng *E1, *E2 là liên quan đến gì trong CAD (chẳng hạn *D1, *D2,... thì liên quan đến Dimension)

1). Hàm command luôn trả về nil. Do đó tôi nghĩ e không kiểm soát được command bằng lisp.
2). Bạn đọc link này, bài đầu tiên, xem hình vẽ trong file cad đính kèm nhé!
http://forums.autode...ht/true#M242006
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.