Chuyển đến nội dung
Diễn đàn CADViet
interwar1283

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

Các bài được khuyến nghị

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.

filterplinewidth.gif

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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

fi1.jpg

fi2.jpg

fi3.jpg

Khi dùng nhiều lệnh này cũng có rất nhiều cái hay đấy.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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)
)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 đỡ :(

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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 :

qs.jpg

-------

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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:

anhso-17525_1.jpghttp://up.anhso.net

2. thêm đường dẫn tới file lsp

anhso-17527_2.jpghttp://up.anhso.net

3. load file

anhso-17529_3.jpghttp://up.anhso.net

4. bị báo lỗi

anhso-17532_4.jpghttp://up.anhso.net

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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:

anhso-17525_1.jpghttp://up.anhso.net

2. thêm đường dẫn tới file lsp

anhso-17527_2.jpghttp://up.anhso.net

3. load file

anhso-17529_3.jpghttp://up.anhso.net

4. bị báo lỗi

anhso-17532_4.jpghttp://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 ạ.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khá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.

filterplinewidth.gif

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?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 ạ ?

Đây bạn:

(defun c:CPL( / ss z)
(setq ss (ssget '((0 . "LWPOLYLINE") (70 . 1))))
(setq z 0)
(repeat (sslength ss)
 (command "wipeout" "p" (ssname ss z) "y")
 (setq z (1+ z)))
(princ))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Trong trường hợp Line không kín hoặc trùng điểm: ví du Pline qua 4 điểm abcda là bị trùng điểm?

Thì có cách nào để minh chọn cái Pline dạng này để tạo luôn wipeout ko ?

Cám ơn !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Trong trường hợp Line không kín hoặc trùng điểm: ví du Pline qua 4 điểm abcda là bị trùng điểm?

Thì có cách nào để minh chọn cái Pline dạng này để tạo luôn wipeout ko ?

Cám ơn !

Với pline trùng điểm: làm được.

Với pline không kín: nếu bạn chấp nhận nối điểm đầu và cuối lại bằng 1 đường thẳng thì cũng làm được.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cụ thể là chọn như thế nào? với lisp hiện tại test thì không chọn

Thân !

Để chiều rảnh, nếu chưa ai giúp thì tôi sẽ giúp bạn (phải viết lại lisp).

P/S (13h40-12/3/2012): đây bạn!

(defun c:CPL( / ss z lsppoint pl)
(princ "\nChon cac Pline de tao Wipeout...")
(setq ss (ssget '((0 . "LWPOLYLINE"))))
(setq z 0)
(repeat (sslength ss)
 (setq lstpoint (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (ssname ss z)))))
 (setq pl (LWpoly lstpoint 1))
 (command "wipeout" "p" pl "y")
 (entdel (ssname ss z))
 (setq z (1+ z)))
(princ))
(defun LWPoly (lst cls)
(entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 (length lst)) (cons 70 cls))
                               	(mapcar (function (lambda (p) (cons 10 p))) lst))))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×