Đến nội dung


Hình ảnh

Lọc đối tượng polyline với độ dầy


  • Please log in to reply
25 replies to this topic

#1 interwar1283

interwar1283

    biết dimcontinue

  • Vip
  • PipPipPipPipPip
  • 374 Bài viết
Điểm đánh giá: 211 (khá)

Đã gửi 23 August 2007 - 02:14 PM

Lệnh Filter là một công cụ lọc đối tượng có những thuộc tính giống nhau, rất hưu hiệu khi làm việc với một bản vẽ. Nhưng có một vấn đề khi sử dụng lệnh này để chọn những đối tượng là Polyline thì không thể lọc được những Polyline có độ dầy (Golbal width) như nhau mà sẽ chọn tất cả những polyline có thuộc tính khác giống nhau nhưng khác độ dầy. Khi gặp những tình huống như vậy thì phải thao tác thêm một số lệnh nữa mới làm được mà mình muốn làm. Cad cũng có lệnh Quick select có thể lọc được những Polyline có cũng độ dầy nhưng nó chỉ chọn được một thuộc tính, không phân biệt được các thuộc tính còn lại như layer, mầu…
Vậy có cách nào bổ xung cho lệnh Filters khi lọc đối tượng là Polyline có thêm thuộc tính độ dầy của Polyline không các bác.
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 23 August 2007 - 02:58 PM

Lệnh Filters là một công cụ lọc đối tượng có những thuộc tính giống nhau, rất hưu hiệu khi làm việc với một bản vẽ. Nhưng có một vấn đề khi sử dụng lệnh này để chọn những đối tượng là Polyline thì không thể lọc được những Polyline có độ dầy (Golbal width) như nhau mà sẽ chọn tất cả những polyline có thuộc tính khác giống nhau nhưng khác độ dầy. Khi gặp những tình huống như vậy thì phải thao tác thêm một số lệnh nữa mới làm được mà mình muốn làm. Cad cũng có lệnh Quick select có thể lọc được những Polyline có cũng độ dầy nhưng nó chỉ chọn được một thuộc tính, không phân biệt được các thuộc tính còn lại như layer, mầu…
Vậy có cách nào bổ xung cho lệnh Filters khi lọc đối tượng là Polyline có thêm thuộc tính độ dầy của Polyline không các bác.

Có 1 mẹo này giúp bạn có thể add thuộc tính polylinewidth vào trong lệnh filter:
- Bạn chọn Polyline trong mục Select filter.
- Nhấn nút Add để thêm mục Object = Polyline lên list phía trên.
- Bạn chọn TextHeight trong phần Select filter.
- Nhập chiều dày bạn muốn vào mục X (bạn có thể chọn =, <, >,... tuỳ bạn)
- Bạn nhấn nút Add.
- ACAD sẽ Add 2 thuộc tính là TextHeight và Object = Text vào trong list phía trên.
- Bạn chọn mục Object = Text rồi nhấn Delete để xoá nó đi.
Hình đã gửi
Với danh sách trên bạn đã filter được polyline với width bạn muốn. Bạn có thể thêm các thuộc tính khác như layer, màu sắc,... tuỳ bạn.
  • 0

#3 interwar1283

interwar1283

    biết dimcontinue

  • Vip
  • PipPipPipPipPip
  • 374 Bài viết
Điểm đánh giá: 211 (khá)

Đã gửi 23 August 2007 - 07:00 PM

ok, đúng như những gi mình đang mong muốn, Cảm ơn Bác Hoành nhiều.
  • 0

#4 bemove

bemove

    biết lệnh divide

  • Vip
  • PipPipPipPipPipPip
  • 446 Bài viết
Điểm đánh giá: 1308 (rất tốt)

Đã gửi 23 August 2007 - 09:04 PM

Có cách khác là dùng lệnh Qselect
Xem thêm http://www.cadviet.com/forum/index.php?sho...&hl=qselect
  • 0

#5 interwar1283

interwar1283

    biết dimcontinue

  • Vip
  • PipPipPipPipPip
  • 374 Bài viết
Điểm đánh giá: 211 (khá)

Đã gửi 24 August 2007 - 07:49 PM

Có cách khác là dùng lệnh Qselect
Xem thêm http://www.cadviet.com/forum/index.php?sho...&hl=qselect


Lệnh Qselect mình cũng đã đề cập ở trên.
Theo những gì mình biết thì lệnh Qselect (Quick select ) chỉ lọc ra được một thuộc tính một, ví dụ với 1 Polyline thì chỉ lọc được hoặc là độ dầy, hoặc là layer, hoặc là mầu... chứ không lọc được ra những Polyline có cùng độ dầy, cùng layer và cùng mầu... được.Muốn lọc ra Polyline có độ dầy là X chẳng hạn thì nó sẽ lọc ra được những Polyline có độ dầy là X và thuộc những layer khác nhau, mầu khác nhau...
Cám ơn bác Bemove. Kiến thức còn hạn chế rất mong được chỉ dẫn.
  • 0

#6 thaiha175

thaiha175

    biết vẽ ellipse

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

Đã gửi 13 September 2007 - 10:39 PM

pác ơi dùng lệnh filters thế nào vậy sao em dùng không giốngh hình của pác vậy hướng dẫn em phát đúng thứ đang cần,thank các pác rất hay
  • 0
sống trên đời phải có 1 tấm lòng ,để gió cuốn đi

#7 bibibi

bibibi

    biết pan

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

Đã gửi 26 October 2007 - 03:54 PM

các pác ơi. lệnh lọc là như thế nào vậy các pác, nói rõ júp em zới, thanks
  • 0

#8 interwar1283

interwar1283

    biết dimcontinue

  • Vip
  • PipPipPipPipPip
  • 374 Bài viết
Điểm đánh giá: 211 (khá)

Đã gửi 26 October 2007 - 04:05 PM

các pác ơi. lệnh lọc là như thế nào vậy các pác, nói rõ júp em zới, thanks

Anh Hoành đã chỉ rất tỉ mỉ rồi mà. có cả hình minh hoạ nữa.
  • 0

#9 bibibi

bibibi

    biết pan

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

Đã gửi 26 October 2007 - 04:36 PM

nhưng ý nghĩa lọc là như thế nào, xin nói rõ đc ko, và dùng để làm gì, cho vd đc ko
  • 0

#10 interwar1283

interwar1283

    biết dimcontinue

  • Vip
  • PipPipPipPipPip
  • 374 Bài viết
Điểm đánh giá: 211 (khá)

Đã gửi 26 October 2007 - 05:01 PM

nhưng ý nghĩa lọc là như thế nào, xin nói rõ đc ko, và dùng để làm gì, cho vd đc ko

Ví dụ nho nhỏ thế này nhé:
Trên bản vẽ có rất nhiều đối tượng như text, line, polyline, hacth, dim, mầu sắc.......
-bây giờ bạn cần chọn tất cả các đối tượng là Text chẳng hạn, bạn gõ lệnh FI, add thuộc tính là text vào (add to list) rồi Apply -> cad sẽ hỏi bạn Select vùng cần tìm (hoạc chọn All với tất cả bản vẽ) -> rồi Enter thì chỉ những đối tượng là Text mới được chọn và bạn có thể làm việc với nhưng text đó như move, delete...
-hoac bạn muốn chọn các đối tượng text mà có mầu red thì bạn add thêm thuộc tính color = 1 vào rồi làm tương tự kết quả bạn sẽ chọn được tất cả những text mà có mầu red
Hình đã gửi
Hình đã gửi
Hình đã gửi
Khi dùng nhiều lệnh này cũng có rất nhiều cái hay đấy.
  • 1

#11 gp14

gp14

    DO TUAN GIAP

  • Moderator
  • PipPipPipPipPipPipPip
  • 1860 Bài viết
Điểm đánh giá: 1120 (rất tốt)

Đã gửi 20 March 2008 - 05:42 PM

Mọi người giúp mình lọc các Tolerance S1 để thống kê số lượng <_<
Đây là file:
http://www.cadviet.c...C_Tolerance.dwg
  • 0

#12 ho_con

ho_con

    biết zoom

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

Đã gửi 26 March 2008 - 11:50 PM

các bác ơi, làm sao lọc được các polyline kín bi giờ???? em bó tay rồi :undecided:
các bác biết thì cgỉ giùm em với!!
thank các bác nhiều!! :bigsmile:
  • 0

#13 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 March 2008 - 12:05 AM

các bác ơi, làm sao lọc được các polyline kín bi giờ???? em bó tay rồi :undecided:
các bác biết thì cgỉ giùm em với!!
thank các bác nhiều!! :bigsmile:


Lệnh CPL dưới đây sẽ chỉ chọn các pline kín:
(defun c:CPL( / ss )
(setq ss (ssget '((0 . "LWPOLYLINE")(70 . 1))))
(sssetfirst ss ss)
(princ)
)

  • 1

#14 ltanh43

ltanh43

    Chưa sử dụng CAD

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

Đã gửi 24 September 2010 - 12:50 PM

tôi muốn lọc ra tất cả những đoạn thẳng đứng ( song song trục Y ) vậy thì phải làm thế nào? hoặc lọc ra tất cả nhưng đoạn thẳng có chiều dài xác định ( vd chiều dài là 133mm ).
mong người giúp đỡ :(
  • 0

#15 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 September 2010 - 04:04 PM

tôi muốn lọc ra tất cả những đoạn thẳng đứng ( song song trục Y ) vậy thì phải làm thế nào? hoặc lọc ra tất cả nhưng đoạn thẳng có chiều dài xác định ( vd chiều dài là 133mm ).
mong người giúp đỡ :(

Bạn dùng thử cái này để lọc các line thẳng đứng:
(defun c:ddfil ( )
(setq ss (ssget "X" (list (cons 0 "LINE)))
n (sslength ss)
i 0
ssl (ssadd)
)
(while (< i n)
(setq en (ssname ss i)
els (entget en)
p1 (cdr (assoc 10 els))
p2 (cdr (assoc 11 els))
goc (angle p1 p2)
)
(if (or (= goc (/ pi 2)) (= goc (- (/ pi 2))))
(setq ssl (ssadd en ssl))
)
(setq i (1+ i))
)
ssl
)
Còn với đoạn thẳng có độ dài xác định trước thì hơi phức tạp hơn:
(defun c:ddlst ( )
(setq ssn (ssget "x" (list (cons 0 "LINE")))
ssd (ssadd)
n (sslength ssn)
i 0
da (getdist "\n Nhap khoang cach chuan: ")
)
(while (< i n)
(setq en (ssname ssn i)
els (entget en)
p1 (cdr (assoc 10 els))
p2 (cdr (assoc 11 els))
dd (distance p1 p2)
)
(if (= dd da)
(setq ssd (ssadd en ssd))
)
(setq i (1+ i))
)
ssd
)

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.

#16 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 September 2010 - 09:33 PM

tôi muốn lọc ra tất cả những đoạn thẳng đứng ( song song trục Y ) vậy thì phải làm thế nào? hoặc lọc ra tất cả nhưng đoạn thẳng có chiều dài xác định ( vd chiều dài là 133mm ).
mong người giúp đỡ :)

Bạn dùng thử cái này để lọc các line thẳng đứng:
(setq ss (ssget "X" (list (cons 0 "LINE) (cons 50 pi))))
Còn với đoạn thẳng có độ dài xác định trước thì hơi phức tạp hơn:
(defun ddlst ( )
(setq ssn (ssget "x" (list (cons 0 "LINE")))
ssd (ssadd)
n (sslength ssn)
i 0
da (getdist "\n Nhap khoang cach chuan: ")
)
(while (< i n)
(setq en (ssname ssn i)
els (entget en)
p1 (cdr (assoc 10 els))
p2 (cdr (assoc 11 els))
dd (distance p1 p2)
)
(if (= dd da)
(setq ssd (ssadd en ssd))
)
(setq i (1+ i))
)
ssd
)
Chúc bạn vui.

Bác Bình và bạn ltanh43 có thể sử dụng Quick select
+ để lọc những đoạn thẳng đứng ( song song trục Y ) : Angle Properties
+ lọc ra tất cả nhưng đoạn thẳng có chiều dài xác định ( vd chiều dài là 133mm ) : Length Properties
Thể hiện như hộp thoại dưới :
Hình đã gửi
-------

các bác ơi, làm sao lọc được các polyline kín bi giờ???? em bó tay rồi :(
các bác biết thì cgỉ giùm em với!!
thank các bác nhiều!! :(

-> Để lọc các polyline kín thì sử dụng Quick select với Closed Properties của Plyline
  • 0

#17 ltanh43

ltanh43

    Chưa sử dụng CAD

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

Đã gửi 25 September 2010 - 05:10 PM

cảm ơn đoạn mã của bạn. nhưng tôi vẫn chưa làm được
quá trình thực hiện như sau

1. copy đoạn mã và lưu thành file:
Hình đã gửi http://up.anhso.net
2. thêm đường dẫn tới file lsp
Hình đã gửi http://up.anhso.net
3. load file
Hình đã gửi http://up.anhso.net
4. bị báo lỗi
Hình đã gửi http://up.anhso.net
  • 0

#18 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 26 September 2010 - 10:15 AM

cảm ơn đoạn mã của bạn. nhưng tôi vẫn chưa làm được
quá trình thực hiện như sau

1. copy đoạn mã và lưu thành file:
Hình đã gửi http://up.anhso.net
2. thêm đường dẫn tới file lsp
Hình đã gửi http://up.anhso.net
3. load file
Hình đã gửi http://up.anhso.net
4. bị báo lỗi
Hình đã gửi http://up.anhso.net

Chào bạn ltanh43,
1/- Có lẽ thao tác chép dữ liệu của bạn có trục trặc vì sau khi chép xong thì lisp có thêm một cái dấu ngoặc đóng ở dòng code thứ hai này
(setq ss (ssget "X" (list (cons 0 "LINE)))

Vì thế CAD mới báo lỗi ; error : extra right paren on iput . Bạn hãy kiểm tra lại nhé.

2/- Bạn thử áp dụng cái qselect như bác Tuê_NV đã nói có lẽ sẽ đỡ rắc rối hơn bạn ạ.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 duchieu0205

duchieu0205

    biết vẽ line

  • Members
  • PipPip
  • 20 Bài viết
Điểm đánh giá: -3 (bình thường)

Đã gửi 13 August 2011 - 01:19 PM

Có 1 mẹo này giúp bạn có thể add thuộc tính polylinewidth vào trong lệnh filter:
- Bạn chọn Polyline trong mục Select filter.
- Nhấn nút Add để thêm mục Object = Polyline lên list phía trên.
- Bạn chọn TextHeight trong phần Select filter.
- Nhập chiều dày bạn muốn vào mục X (bạn có thể chọn =, <, >,... tuỳ bạn)
- Bạn nhấn nút Add.
- ACAD sẽ Add 2 thuộc tính là TextHeight và Object = Text vào trong list phía trên.
- Bạn chọn mục Object = Text rồi nhấn Delete để xoá nó đi.
Hình đã gửi
Với danh sách trên bạn đã filter được polyline với width bạn muốn. Bạn có thể thêm các thuộc tính khác như layer, màu sắc,... tuỳ bạn.

Cũng với việc lọc polylinewidth nhung bằng lsp thì làm thế nào được bác Hoành?
  • 0

#20 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 12 March 2012 - 10:11 AM

Lisp CPL của bác Hoành hay thật. Nhưng em muốn sau khi chon toàn bộ PL thì sẽ tạo wipeout cho toàn bộ PL này thi như thế nào ạ ?
  • 0