Rated 5/5 based on 240179 internet user reviews

Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

lisp xóa tất cả các đối tượng trong 1 vùng kín


  • Please log in to reply
77 replies to this topic

#1 namhai

namhai

    biết vẽ rectang

  • Members
  • PipPip
  • 81 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 26 June 2009 - 04:13 PM

e muốn xoá tất cả các đối tượng trong 1 vùng kín nhưng phải làm thủ công bằng lệnh trim và erase, như vậy rất mất công và tốn thời gian, bác nào có cách nào giúp e giải quyết vấn đề này 1 cách nhanh chóng không?
  • 0
Hãy làm việc hết mình rồi mọi điều tốt đẹp sẽ đến với bạn.....

#2 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 26 June 2009 - 04:22 PM

e muốn xoá tất cả các đối tượng trong 1 vùng kín nhưng phải làm thủ công bằng lệnh trim và erase, như vậy rất mất công và tốn thời gian, bác nào có cách nào giúp e giải quyết vấn đề này 1 cách nhanh chóng không?


Mình không biết viết lisp. nhưng có vài cách giúp bạn đỡ thủ công hơn.
1. Dùng lệnh Trim với tham số f.
2. Bạn dùng lệnh extrim của express tool
cả 2 lệnh trên vẫn kết hợp vơi Erase nhưng nhanh hơn rất nhiều.
3. Dùng wipeout để che đi tất cả đối tượng trong vùng kín. Mình nghĩ cách này giải quyết tốt nhất vấn đề của bạn.
  • 0

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


#3 namhai

namhai

    biết vẽ rectang

  • Members
  • PipPip
  • 81 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 27 June 2009 - 08:05 AM

Mình không biết viết lisp. nhưng có vài cách giúp bạn đỡ thủ công hơn.
1. Dùng lệnh Trim với tham số f.
2. Bạn dùng lệnh extrim của express tool
cả 2 lệnh trên vẫn kết hợp vơi Erase nhưng nhanh hơn rất nhiều.
3. Dùng wipeout để che đi tất cả đối tượng trong vùng kín. Mình nghĩ cách này giải quyết tốt nhất vấn đề của bạn.

Minh vẫn đang dùng cách này nhưng trong trường hợp cần xoá nhiều đối tượng thì vẫn thủ công quá, nó chỉ hữu ích khi các đường mìng cần xoá cắt với đường bao tạo nên vùng kín đấy, còn dùng wipeout chỉ là che các đối tượng, cái mình muốn là xoá hẳn các đối tượng đấy đi!!
  • 0
Hãy làm việc hết mình rồi mọi điều tốt đẹp sẽ đến với bạn.....

#4 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 27 June 2009 - 08:26 AM

Minh vẫn đang dùng cách này nhưng trong trường hợp cần xoá nhiều đối tượng thì vẫn thủ công quá, nó chỉ hữu ích khi các đường mìng cần xoá cắt với đường bao tạo nên vùng kín đấy, còn dùng wipeout chỉ là che các đối tượng, cái mình muốn là xoá hẳn các đối tượng đấy đi!!

Bạn chọn đối tượng bằng Window bấm S rùi CP sao đó vẽ dọc theo hình kín đó là chọn được các đối tượng trong hình rùi E thế là ok !!!
  • 0

#5 thiep

thiep

    biết dimdiameter

  • Members
  • PipPipPipPipPip
  • 331 Bài viết
Điểm đánh giá: 249 (khá)

Đã gửi 27 June 2009 - 09:12 AM

e muốn xoá tất cả các đối tượng trong 1 vùng kín nhưng phải làm thủ công bằng lệnh trim và erase, như vậy rất mất công và tốn thời gian, bác nào có cách nào giúp e giải quyết vấn đề này 1 cách nhanh chóng không?

Đây là lisp bạn cần:
;;;-------------------------------------------------------------(defun c:erC (/ sc cur p0 P1 L1 d L n ssgDEL glength)  (princ "\nFree lisp from www.cadviet.com")  (command "undo" "be")  (setvar "osmode" 0)  (setq	sc	2009	cur	(car (entsel "\nchon duong: "))	glength	(lambda (e) (command ".lengthen" e "") (getvar "perimeter"))	d	(/ (glength cur) sc)	l1	0.0	p0	(vlax-curve-getStartPoint cur)	L	(list p0)  )  (redraw cur 4)  (repeat sc    (setq      l1 (+ l1 d)      p1 (vlax-curve-getPointAtDist cur l1)    )    (setq L (append L (List p1)))  )  (setq ssgDEL (ssget "WP" L))  (setq n 0)  (repeat (sslength ssgDEL)    (entdel (ssname ssgDEL n))    (setq n (1+ n))  )  (command "undo" "end")  (princ "\nChuc cac ban may man va thanh cong - Thiep 0918841230")  (princ))(vl-load-com)
Không phải xóa thủ công nữa nhé.
  • 5

#6 namhai

namhai

    biết vẽ rectang

  • Members
  • PipPip
  • 81 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 27 June 2009 - 09:21 AM

Bạn chọn đối tượng bằng Window bấm S rùi CP sao đó vẽ dọc theo hình kín đó là chọn được các đối tượng trong hình rùi E thế là ok !!!

sau khi minh chọn đối tượng theo cách của bạn được rồi mình đánh lệnh e để xoá thì không được, theo cách bạn làm có phải chỉ để chọn đối tượng, còn lệnh erase thì phải thực hiện sau?
  • 0
Hãy làm việc hết mình rồi mọi điều tốt đẹp sẽ đến với bạn.....

#7 namhai

namhai

    biết vẽ rectang

  • Members
  • PipPip
  • 81 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 27 June 2009 - 09:26 AM

Đây là lisp bạn cần:

;;;-------------------------------------------------------------(defun c:erC (/ sc cur p0 P1 L1 d L n ssgDEL glength)  (princ "\nFree lisp from www.cadviet.com")  (command "undo" "be")  (setvar "osmode" 0)  (setq	sc	2009	cur	(car (entsel "\nchon duong: "))	glength	(lambda (e) (command ".lengthen" e "") (getvar "perimeter"))	d	(/ (glength cur) sc)	l1	0.0	p0	(vlax-curve-getStartPoint cur)	L	(list p0)  )  (redraw cur 4)  (repeat sc    (setq      l1 (+ l1 d)      p1 (vlax-curve-getPointAtDist cur l1)    )    (setq L (append L (List p1)))  )  (setq ssgDEL (ssget "WP" L))  (setq n 0)  (repeat (sslength ssgDEL)    (entdel (ssname ssgDEL n))    (setq n (1+ n))  )  (command "undo" "end")  (princ "\nChuc cac ban may man va thanh cong - Thiep 0918841230")  (princ))(vl-load-com)
Không phải xóa thủ công nữa nhé.

Bác Thiệp à, lisp của bác tuyệt vời quá, e thanks bác nhiều nhé! tiện đây bác giúp e lisp xoá các đối tượng nằm ngoài vùng kín với đưọc không ạ?
  • 3
Hãy làm việc hết mình rồi mọi điều tốt đẹp sẽ đến với bạn.....

#8 thiep

thiep

    biết dimdiameter

  • Members
  • PipPipPipPipPip
  • 331 Bài viết
Điểm đánh giá: 249 (khá)

Đã gửi 27 June 2009 - 11:33 AM

Bác Thiệp à, lisp của bác tuyệt vời quá, e thanks bác nhiều nhé! tiện đây bác giúp e lisp xoá các đối tượng nằm ngoài vùng kín với đưọc không ạ?

Lisp trên hiểu cả các đường Cur không kín, còn đây lisp xóa các đối tượng ngoài Cur:
;;;-------------------------------------------------------------(defun ss2ent (ss / i Le e)  (setq	i  0	Le nil  )  (repeat (sslength ss)    (setq      e	 (ssname ss i)      Le (append Le (list e))      i	 (1+ i)    )  )  Le);--------------------------(defun C:eoC (/ sc cur p0 P1 L1 d L n ssgDEL glength)  (princ "\nFree lisp from www.cadviet.com")  (command "undo" "be")  (setvar "osmode" 0)  (setq	sc	2009	cur	(car (entsel "\nChon duong curve: "))	glength	(lambda (e) (command ".lengthen" e "") (getvar "perimeter"))	d	(/ (glength cur) sc)	l1	0.0	p0	(vlax-curve-getStartPoint cur)	L	(list p0)  )  (redraw cur 4)  (repeat sc    (setq      l1 (+ l1 d)      p1 (vlax-curve-getPointAtDist cur l1)    )    (setq L (append L (List p1)))  )  (setq ssall (ssget "X")        ssginC (ssget "WP" L)	enssginC (ss2ent ssginC))  (foreach eni enssginC    (ssdel eni ssall)    )  (setq n 0)  (repeat (sslength ssall)    (entdel (ssname ssall n))    (setq n (1+ n))  )  (command "undo" "end")  (princ "\nChuc cac ban may man va thanh cong - Thiep")  (princ))(vl-load-com)

  • 2

#9 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 27 June 2009 - 12:24 PM

Bác Thiep oi, dựa trên 2 lệnh xóa trên thì bác có thể chỉnh xửa 1 chút để khi chạy thì chương trình dùng đúng trong mọi trường hợp. Em đề xuất bác có thể lồng lệnh extrim vào trong 2 lệnh trên để người dùng chỉ cần vẽ 1 đường pline khép kín thì chương trình sẽ xóa tại giao điểm cắt của đường pline kín. Em cá mơn Bác nhiều.
Đây là file cad mẫu nhờ bác Thiep ngâm cứu hộ
http://www.cadviet.c...files/mau_4.dwg
( Xin lỗi Bác do em không biết viết lisp, nên có gì sai xót mong Bác thông cảm bỏ qua)
  • 0

#10 thiep

thiep

    biết dimdiameter

  • Members
  • PipPipPipPipPip
  • 331 Bài viết
Điểm đánh giá: 249 (khá)

Đã gửi 27 June 2009 - 05:19 PM

Bác Thiep oi, dựa trên 2 lệnh xóa trên thì bác có thể chỉnh xửa 1 chút để khi chạy thì chương trình dùng đúng trong mọi trường hợp. Em đề xuất bác có thể lồng lệnh extrim vào trong 2 lệnh trên để người dùng chỉ cần vẽ 1 đường pline khép kín thì chương trình sẽ xóa tại giao điểm cắt của đường pline kín. Em cá mơn Bác nhiều.
Đây là file cad mẫu nhờ bác Thiep ngâm cứu hộ
http://www.cadviet.c...files/mau_4.dwg
( Xin lỗi Bác do em không biết viết lisp, nên có gì sai xót mong Bác thông cảm bỏ qua)

Thiep có thể gộp 2 Lisp trên lại thành 1. Lisp yêu cầu thêm: xóa các đối tượng trong hay ngoài CUR.
Còn lồng thêm lệnh extrim thì thiep không làm được như yêu cầu, vì trong lisp extrim có những hàm được viết sẵn bằng ObjectARX, không hiểu được bên trong là cái gì. Chịu, cái hiện nay thiep còn bí là:
- Làm sao Lisp hiểu được mình pick trong hay ngoài đường CUR
- Trong extrim.lsp, các listpoint (lst, lst2...) được tạo như thế nào.
Chắc nhờ bác Hoành, VNdoc, hay các bậc cao thủ khác am hiểu về ObjectARX viết tiếp thôi.
Tuy nhiên, thiep chỉ thêm một động tác gọi lệnh extrim trước để xén các đối tượng cắt ngang qua CUR, bên trong hay bên ngoài. còn sau đó, sẽ thực hiện lisp cua Thiep. Lisp erc.lsp đã chỉnh sửa:
;; ERC.LSP free lisp from cadviet.com;;;-------------------------------------------------------------(defun ss2ent (ss / i Le e)(setq i 0Le nil)(repeat (sslength ss)(setqe (ssname ss i)Le (append Le (list e))i (1+ i)))Le);;;-------------------------------------------------------------(defun c:erc (/ sc cur p0 P1 L1 d L n ssgDEL glength)  (princ "\nFree lisp from www.cadviet.com")  (vl-load-all "C:/Program Files/AutoCAD 2007/Express/extrim.lsp")  (c:extrim)  (command "undo" "be")  (setvar "osmode" 0)  (setq	sc	2009	cur	(car (entsel "\nchon duong: "))	glength	(lambda (e) (command ".lengthen" e "") (getvar "perimeter"))	d	(/ (glength cur) sc)	l1	0.0	p0	(vlax-curve-getStartPoint cur)	L	(list p0)  )  (redraw cur 4)  (repeat sc    (setq      l1 (+ l1 d)      p1 (vlax-curve-getPointAtDist cur l1)    )    (setq L (append L (List p1)))  )  (setq n 0)  (initget "T N")  (setq bit (getkword "\nBan muon xoa Trong hay Ngoai Curve < T/N>: "))  (cond	((= bit "T")	 (setq ssgDEL (ssget "WP" L))	)	((= bit "N")	 (progn	   (setq ssgDEL	  (ssget "X")		 ssginC	  (ssget "CP" L)		 enssginC (ss2ent ssginC)	   )	   (foreach eni	enssginC	     (ssdel eni ssgDEL)	   )	 )	)  )  (repeat (sslength ssgDEL)    (entdel (ssname ssgDEL n))    (setq n (1+ n))  )  (command "undo" "end")  (princ "\nChuc cac ban may man va thanh cong - Thiep 0918841230")  (princ))(vl-load-com)

Ngày cuối tuàn vui vẻ!.
  • 4

#11 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 27 June 2009 - 05:45 PM

Cá mơn Thiep rất nhiều, mong các cao thủ về lisp có thể nghe vô để hoàn thiện lisp này. Thank mọi người nhiều. Chúc mọi người cuối tuần vui vẻ :blink: :s_big: :blink:
  • 0

#12 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 28 June 2009 - 12:15 AM

Thiep có thể gộp 2 Lisp trên lại thành 1. Lisp yêu cầu thêm: xóa các đối tượng trong hay ngoài CUR.
Còn lồng thêm lệnh extrim thì thiep không làm được như yêu cầu, vì trong lisp extrim có những hàm được viết sẵn bằng ObjectARX, không hiểu được bên trong là cái gì. Chịu, cái hiện nay thiep còn bí là:
- Làm sao Lisp hiểu được mình pick trong hay ngoài đường CUR
- Trong extrim.lsp, các listpoint (lst, lst2...) được tạo như thế nào.
Chắc nhờ bác Hoành, VNdoc, hay các bậc cao thủ khác am hiểu về ObjectARX viết tiếp thôi.
Tuy nhiên, thiep chỉ thêm một động tác gọi lệnh extrim trước để xén các đối tượng cắt ngang qua CUR, bên trong hay bên ngoài. còn sau đó, sẽ thực hiện lisp cua Thiep. Lisp erc.lsp đã chỉnh sửa:

Cái này đơn giản thôi mà! Bạn có thể đọc mã nguồn của extrim.lsp để hiểu nó.

Bạn thay dòng lệnh (c:extrim) bằng (etrim ent p) là bạn có thể 'lồng' vào lệnh extrim được rồi.

Hàm etrim với 2 tham số, tham số thứ nhất là entity name của đối tượng, tham số thứ hai là điểm pick.
Ta có thể biết cách dùng lệnh etrim qua ví dụ dưới đây:
(vl-load-all "C:/Program Files/AutoCAD 2007/Express/extrim.lsp")
(defun c:myextrim( / ent p)
(setq 
ent (car (entsel "\nHay chon doi tuong: ")) 
p (getpoint "\nHay pick vao phia can trim: ")
)
(etrim ent p)
)

  • 3

#13 khaosat2009

khaosat2009

    biết lệnh offset

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

Đã gửi 28 June 2009 - 07:19 AM

Anh có thể giúp em líp copy các đối tuợng trong vùng kín được chọn
Rất cám ơn
  • 0

#14 namhai

namhai

    biết vẽ rectang

  • Members
  • PipPip
  • 81 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 29 June 2009 - 07:46 AM

Hình như lisp trên không xoá được các đối tượng nằm trong khu vực được giới hạn bởi 2 vùng kín(chẳng hạn e chỉ muốn xoá các đối tượng trong hình vành khăn tức là đối tượng được giới hạn bởi 2 đường tròn đồng tâm có bán kính khác nhau), mong các cao thủ ra tay giúp đỡ
  • 0
Hãy làm việc hết mình rồi mọi điều tốt đẹp sẽ đến với bạn.....

#15 thiep

thiep

    biết dimdiameter

  • Members
  • PipPipPipPipPip
  • 331 Bài viết
Điểm đánh giá: 249 (khá)

Đã gửi 29 June 2009 - 11:28 AM

Hình như lisp trên không xoá được các đối tượng nằm trong khu vực được giới hạn bởi 2 vùng kín(chẳng hạn e chỉ muốn xoá các đối tượng trong hình vành khăn tức là đối tượng được giới hạn bởi 2 đường tròn đồng tâm có bán kính khác nhau), mong các cao thủ ra tay giúp đỡ

Nanhai à, vì ban đầu bạn chỉ yêu cầu xóa các đối tượng trong 1 curve.
Sau đó thì Nanhai yêu cầu thêm xóa các đối tượng ngoài 1 curve.
Bây giờ thì yêu cầu thêm xóa các đối tượng giữa 2 curve, chứ không có "hình như" bạn ạ
Thiep sẽ chỉnh sửa Lisp theo cả 3 yêu cầu này cho bạn.
Nhớ lần sau Namhai ra đầu đề 1 lần thôi, khỏi phải viết đi viết lại nhiều lần bạn nhé?
Lisp đã chỉnh sửa:

  • 3

#16 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 29 June 2009 - 01:08 PM

Nhờ Bác Thiep coi lại dùm em Lisp er2c nó báo lỗi không chạy được.
-Command: er2c
Free lisp from www.cadviet.com
too many arguments
Đây là file cad mẫu:
http://www.cadviet.c...pfiles/mau1.dwg

Tiện thể Bác cho em hỏi Lisp xoá các đối tượng bên trong hoặc bên ngoài 1 đường Pline kép kín có lồng thêm lệnh Extrim Bác đã viết xong chưa vậy? Nếu viết xong rồi thì em cá mơn Bác nhiều lắm. Thank Bác nhiều.
  • 0

#17 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 29 June 2009 - 01:26 PM

Nhờ Bác Thiep coi lại dùm em Lisp er2c nó báo lỗi không chạy được.
-Command: er2c
Free lisp from www.cadviet.com
too many arguments
Đây là file cad mẫu:
http://www.cadviet.c...pfiles/mau1.dwg

Tiện thể Bác cho em hỏi Lisp xoá các đối tượng bên trong hoặc bên ngoài 1 đường Pline kép kín có lồng thêm lệnh Extrim Bác đã viết xong chưa vậy? Nếu viết xong rồi thì em cá mơn Bác nhiều lắm. Thank Bác nhiều.

Bạn thư lại đi,
trước đây bị lỗi phần download
  • 1

#18 xuandao0708

xuandao0708

    biết lệnh scale

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

Đã gửi 29 June 2009 - 01:52 PM

Em có thể nhờ các Bác cải thiến thêm 1 chút cho nó hoàn chỉnh theo như file mẫu kô vậy? Nếu được thì nó rất hữa ích.
Dưới đây là file mẫu
http://www.cadviet.c...iles/mau1_1.dwg
Em cá mơn các Bác nhiều.
  • 0

#19 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1322 Bài viết
Điểm đánh giá: 1364 (rất tốt)

Đã gửi 30 June 2009 - 07:32 AM

Nhờ pác Thiệp xem lại. Lisp er2c.lsp bị lỗi không chạy dc.
Bị lỗi như thế này. Lisp của bác thật tuyệt. Thanks bác nhiều nhiều.
Command: er2c
Free lisp from www.cadviet.com; error: no function definition: ACET-ERROR-INIT
Command:

Chào xataraku
hàm ACET-ERROR-INIT thuộc thư viện Express Tool.
bạn phải cài bộ Express Tool thì LISP er2c mới chạy đuợc.
  • 1

#20 namhai

namhai

    biết vẽ rectang

  • Members
  • PipPip
  • 81 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 30 June 2009 - 08:08 AM

Nanhai à, vì ban đầu bạn chỉ yêu cầu xóa các đối tượng trong 1 curve.
Sau đó thì Nanhai yêu cầu thêm xóa các đối tượng ngoài 1 curve.
Bây giờ thì yêu cầu thêm xóa các đối tượng giữa 2 curve, chứ không có "hình như" bạn ạ
Thiep sẽ chỉnh sửa Lisp theo cả 3 yêu cầu này cho bạn.
Nhớ lần sau Namhai ra đầu đề 1 lần thôi, khỏi phải viết đi viết lại nhiều lần bạn nhé?
Lisp đã chỉnh sửa:

Bác Thiếp à,,sory bác vì lúc đầu e chỉ gặp rắc rối với 1 curve, vấn đề về 2 curve là ý tưởng phát sinh mà, hìhì...nhưng sao lisp này không kết hợp được với extrim giống như 1 curve hả bác thiep?nếu kết hợp được với extrim thì tuyệt quá bác thiêp a!Thanks bác nhiều nhiều nha
  • 0
Hãy làm việc hết mình rồi mọi điều tốt đẹp sẽ đến với bạn.....