Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Lisp xóa đối tượng


  • Please log in to reply
27 replies to this topic

#21 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 06 August 2011 - 08:34 PM

Rất có thể bạn áp dụng cái lisp này với những bản vẽ khá lớn, đến nỗi lúc này khoảng cách từ các mũi tên tới các text nhỏ hơn 0.3 rất rất nhiều nên mới bị tình trạng xóa sạch các mũi tên như vậy bạn ạ.

Cám ơn 'phamthanhbinh' rất nhiều. Lisp đã giải quyết tương đối tốt các vấn đề. Trước khi nhập khoảng cách mình cũng đã đo khoảng cách từ mũi tên đến text.
Với bản vẽ lớn hay nhỏ thì khoảng cách này luôn không đổi ? (Mình chạy từ Nova ra mà)
Có lẽ, lỗi ở đây chính là như "ketxu" nói: Hàm ssget nó phụ thuộc vào khung nhìn ?
Vì mình thử: với khung nhìn lớn thì lisp oke; nếu khung nhìn nhỏ thì lisp sẽ xóa tất cả mũi tên ?
Nếu giải quyết được vấn đề này thì code lisp hoàn chỉnh hơn>
Cám ơn bạn rất nhiều và các anh em code góp ý. Nó giúp mình rất nhiều trong công việc.\
Thân !
  • 0

#22 leejang

leejang

    biết lệnh move

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

Đã gửi 08 August 2011 - 06:47 AM

Cám ơn 'phamthanhbinh' rất nhiều. Lisp đã giải quyết tương đối tốt các vấn đề. Trước khi nhập khoảng cách mình cũng đã đo khoảng cách từ mũi tên đến text.
Với bản vẽ lớn hay nhỏ thì khoảng cách này luôn không đổi ? (Mình chạy từ Nova ra mà)
Có lẽ, lỗi ở đây chính là như "ketxu" nói: Hàm ssget nó phụ thuộc vào khung nhìn ?
Vì mình thử: với khung nhìn lớn thì lisp oke; nếu khung nhìn nhỏ thì lisp sẽ xóa tất cả mũi tên ?
Nếu giải quyết được vấn đề này thì code lisp hoàn chỉnh hơn>
Cám ơn bạn rất nhiều và các anh em code góp ý. Nó giúp mình rất nhiều trong công việc.\
Thân !

Có vấn đề thế này ạ. Khi có 2 mũi tên và 2 giá trị cạnh sát nhau. Nó xoá mất 1 giá trị mình định trước và xoá luôn cả 2 mũi tên. Bi h làm sao để khống chế cho lisp chỉ xoá 1 mũi tên+1giá trị thôi ạ ? Bởi vì chạy nova thì mũi tên và giá trị thường theo cặp. Em upload file lên, ở đây ta chỉ xoá giá trị 57.69% và cái mũi tên đi kèm của nó.
Đây là file ạ : http://www.cadviet.c...nova_tc1tc2.dwg
  • 0

#23 quochung.vpr

quochung.vpr

    biết zoom

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

Đã gửi 25 November 2011 - 05:17 PM

Nhân tiện đây em xin hỏi các anh là, em có 1 file cad mà muôn lọc các đối tượng text có cao độ bằng 1 và góc nghiêng 45 độ thì phải làm ntn?( đối tượng text của em nằm trong bản cad mà các text high là rất nhiều. mong các pro hướng dẫn tận tình em mới vẽ cad nên ko biết nhiều. Cho em xin cảm ơn trước
  • 0

#24 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 25 November 2011 - 06:44 PM

Nhân tiện đây em xin hỏi các anh là, em có 1 file cad mà muôn lọc các đối tượng text có cao độ bằng 1 và góc nghiêng 45 độ thì phải làm ntn?( đối tượng text của em nằm trong bản cad mà các text high là rất nhiều. mong các pro hướng dẫn tận tình em mới vẽ cad nên ko biết nhiều. Cho em xin cảm ơn trước

Cao độ bằng 1: nghĩa là điểm chèn của text có z=1, hay chiều cao của textstyle bằng 1?
Và có phải bạn muốn viết 1 lisp để chọn các đối tượng như vậy?
  • 0

* 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.


#25 quochung.vpr

quochung.vpr

    biết zoom

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

Đã gửi 29 November 2011 - 09:15 AM

Dạ nếu bạn có lisp thì càng tốt, nhưng nếu mình nhớ không nhầm thì trước đây có học môn tin học ứng dụng đường các thầy đã làm qua một lần trên cad 2005 rồi, thế nên nếu các bạn nào biết thì hướng dẫn lại cho mình với nhé.
  • 0

#26 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 29 November 2011 - 05:52 PM

Có vấn đề thế này ạ. Khi có 2 mũi tên và 2 giá trị cạnh sát nhau. Nó xoá mất 1 giá trị mình định trước và xoá luôn cả 2 mũi tên. Bi h làm sao để khống chế cho lisp chỉ xoá 1 mũi tên+1giá trị thôi ạ ? Bởi vì chạy nova thì mũi tên và giá trị thường theo cặp. Em upload file lên, ở đây ta chỉ xoá giá trị 57.69% và cái mũi tên đi kèm của nó. Đây là file ạ : http://www.cadviet.c...nova_tc1tc2.dwg

Hề hề hề,
Vậy bạn thủ dùng cái này xem sao nhé.
Mình có thay đổi lại một chút cái lisp cũ như sau:
1/- Yêu cầu chọn text mẫu để xác định khoảng cách cần xóa.(như cũ)
2/- Nhập nội dung các text cần xóa. Cái này mới hơn vì có thể nội dung các text cần xóa của bạn khác với của bạn Nguyen ngoc Son.
3/- Lisp sẽ xóa tất cả các text có nội dung như bạn đã nhập và các mũi tên tương ứng với các text này
Đây là code:


(defun c:xoa (/ oldos *h h txt ss ssl ss1 ss1l plst goc vt )
(vl-load-com)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq *h 0.5)
(setq h (cdr (assoc 40 (entget (car (entsel "\n Chon mot text can xoa"))))))
(if (> h 0) (setq *h h) (setq h *h))
(setq txt (getstring "\n Nhap noi dung cac text can xoa cach nhau mot dau phay: "))
(setq ss (ssget "x" (list (cons 0 "text") (cons 1 txt) (cons 8 "enttnthietke,ENTTNTHIETKE1"))))
(setq ssl (acet-ss-to-list ss))
(command "zoom" "e")
(foreach en ssl
(setq plst (acet-ent-geomextents en))
(setq plst (mapcar '(lambda (x) (trans x 0 1)) plst ))
(setq goc (cdr (assoc 50 (entget en))))
(setq ss1 (ssget "w" (list (- (caar plst) h) (- (cadar plst) h) (caddar plst)) \
(list (+ (caadr plst) h) (+ (cadadr plst) h) (caddr (cadr plst)))
(list (cons 0 "polyline") (cons 8 "enttnthietke"))))
(setq ss1l (acet-ss-to-list ss1))
(foreach en1 ss1l
(setq vt (vlax-curve-getfirstderiv (setq obj (vlax-ename->vla-object en1)) (vlax-curve-getparamatpoint obj (vlax-curve-getstartpoint obj))))
(if (or (equal goc (atan (cadr vt) (car vt)) 0.01 ) (equal (- goc pi) (atan (cadr vt) (car vt)) 0.01))
(setq ss (ssadd en1 ss))
)
)
)
(command "erase" ss "")
(command "zoom" "p")
(setvar "osmode" oldos)
(command "undo" "e")
(princ)
)

Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#27 quochung.vpr

quochung.vpr

    biết zoom

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

Đã gửi 03 December 2011 - 11:12 AM

Cậu ơi xem lai giúp mình với hình như cái lisp ko chay được.
  • 0

#28 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 03 December 2011 - 11:48 AM

Cậu ơi xem lai giúp mình với hình như cái lisp ko chay được.

Hề hề hề,
Nó báo lỗi chi nhể???
Tớ chưa test kỹ nên cậu cần cho tớ biết nó báo lỗi chi mới có thể sửa được. Hãy test lại coi....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.