Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
ThuyLinh313

[Thảo luận] - Lisp select nhanh đối tượng (thay thế Quick select và filter)

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

Dạo này vào forum thấy nhiều bạn có nhu cầu lisp giúp chọn nhanh đối tượng, theo các điều kiện lọc khác nhau. Bạn thì muốn chọn nhanh nhiều đối tượng lọc theo màu, bạn thì lọc theo layer, hoặc theo một điều kiện lọc.

Nhìn chung các điều kiện lọc mà các bạn đưa ra thì các lệnh Quick select hay Filter của cad đều đáp ứng được hết. Tuy nhiên các bạn không dùng hoặc ít dùng có lẽ vì chúng không phải là những lệnh có cách thức giao tiếp thân thiện với người dùng (mất quá nhiều thao tác để chọn được đối tượng). Mình có thể sử dụng tốt 2 lệnh này nhưng cũng không sử dụng chúng thường xuyên vì nguyên nhân trên. Bởi vậy mình đang có ý định viết 1 lệnh mới thân thiện hơn, thao tác nhanh hơn. Ý tưởng của mình như thế này:

 

1) Về cách dùng: để đơn giản tối đa cho việc sử dụng thì khi thực hiện lệnh sẽ chỉ gồm 3 bước sau:

- Gõ lệnh

- Chọn đối tượng làm mẫu cho điều kiện lọc

- Chọn vùng chọn đối tượng (điều kiện này thậm chí có thể loại bỏ nếu viết riêng 1 lệnh select all cho toàn bộ bản vẽ)

Kết quả trả về tập hợp gripset các đối tượng thỏa mãn giống đối tượng mẫu để bạn muốn làm gì tiếp theo với chúng thì làm.

 

2) Vấn đề cần được thảo luận: Để làm được như trên thì đòi hỏi phải xây dựng được điều kiện lọc mẫu (fillter list) dùng cho hàm ssget. Điều kiện duy nhất của fillter list là đáp ứng được theo hầu hết nhu cầu thường xuyên của người dùng.

 

Mình lấy ví dụ cho dễ hiều: Yêu cầu chọn nhanh tập hợp gồm các block và các line theo 2 đối tượng mẫu là 1 Block và 1 line.

- Khi muốn chọn 1 tập hợp block trên bản vẽ giống nhau. thông thường chúng ta sẽ sử dụng 3 điều kiện lọc là: Kiểu đối tượng (dxf 0), Layer (dxf 8), và Blockname (dxf 2).

- Khi muốn chọn 1 tập hợp các đối tượng line giống nhau về tính chất: chúng ta thuờng dùng 3 điều kiện lọc: Kiểu đối tượng (dxf 0), Layer (dxf 8), Linetype (dxf 6).

Rồi, với ví dụ trên ta xây dựng được fillter list sau khi chọn các đối tượng mẫu như sau:

'((-4 . "<OR")

(-4 . "<AND")(0 . "INSERT") (8 . "TenlayerMẫu") (2 . "tenBlockMẫu))(-4 . "AND>")

(-4 . "<AND")(0 . "LINE") (8 . "TenlayerMẫu") (6 . "Linetype Mẫu))(-4 . "AND>")

(-4 . "OR>")

 

Điều mình muốn các bạn cùng thảo luận ở đây chính là: với từng kiểu đối tượng mẫu, thì các mã DXF nào của kiểu đối tượng đó nên được đưa ra làm điều kiện lọc thì hợp lý nhất với đa số nhu cầu của người dùng.

Rất mong các bạn đóng góp ý kiến để mình viết hoàn thiện ứng dụng này. Thanks!

 

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

Sao thao tác chọn một mà lại có 2 đt mẫu ta :)

 

Về vđ bạn đang thảo luận, ketxu góp ý bảng y hệt Setting của lệnh Ma

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

Nghĩa là ta trong 1 lần gõ lệnh ta có thể chon 1 nhóm hay nhiều nhóm đối tượng giống nhau. Tăng tính mềm dẻo của lisp hơn so với filter và qselect. Đây là nhu cầu thường xuyên Ketxu ạ.

Như trong ví dụ trên. gõ lệnh xong, chọn 2 đối tượng mẫu gồm 1 block và 1 line thì đến bước 3 ta có thể select được tất cả các đối tượng Line và block giống 2 đối tương mẫu đã chọn. Thay vì phải 2 hoặc nhiều lần gõ lệnh ta chỉ cần 1 lần là xong.

 

Mình cũng đã nghĩ đến cái setting của lệnh MA. Nhung vẫn chưa ổn lắm vì nó copy gần như hoàn toàn mọi thong tin của đối tượng mẫu cho đối tượng đích. Cân phải lược bớt một số thong tin để chương trình có tính mở hơn và phù hợp với nhu cầu sử dung hơn. ví dụ: Text thì nên bỏ qua góc xoay, màu sắc. Pline thì nên bỏ qua độ dày, hatch thì bỏ qua scale, góc xoay...

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

Nghĩa là ta trong 1 lần gõ lệnh ta có thể chon 1 nhóm hay nhiều nhóm đối tượng giống nhau. Tăng tính mềm dẻo của lisp hơn so với filter và qselect. Đây là nhu cầu thường xuyên Ketxu ạ.

Như trong ví dụ trên. gõ lệnh xong, chọn 2 đối tượng mẫu gồm 1 block và 1 line thì đến bước 3 ta có thể select được tất cả các đối tượng Line và block giống 2 đối tương mẫu đã chọn. Thay vì phải 2 hoặc nhiều lần gõ lệnh ta chỉ cần 1 lần là xong.

 

Mình cũng đã nghĩ đến cái setting của lệnh MA. Nhung vẫn chưa ổn lắm vì nó copy gần như hoàn toàn mọi thong tin của đối tượng mẫu cho đối tượng đích. Cân phải lược bớt một số thong tin để chương trình có tính mở hơn và phù hợp với nhu cầu sử dung hơn. ví dụ: Text thì nên bỏ qua góc xoay, màu sắc. Pline thì nên bỏ qua độ dày, hatch thì bỏ qua scale, góc xoay...

 

Và những cái bỏ qua như thế nếu có nhu cầu sử dụng thì quay lại với Filter và qselect 

Chính vì bạn bỏ qua như thế thì mới chỉ có sử dụng 1 lần lệnh. Nếu không bỏ qua thì cũng giống Filter và qselect

Với filter những cái có nhu cầu sử dụng thường xuyên, mình lưu 1 tên nào đó -> rồi chọn tên và chọn đối tượng là xong 

Bản thân mình thấy  Filter và qselect có rất nhiều tùy chọn. 

Khi viết phải có nhiều tùy chọn cho User chứ. Mà có  nhiều tùy chọn thì đâu có khác Filter và qselect ?

  • 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

Chính xác là như thế, cái gì bỏ qua thì có thể quay lại với filter và qselect nếu có nhu cầu. Nhưng với phương pháp chọn đối tượng mẫu kiểu Multy như cách mình đưa ra thì nhu cầu quay trở lại với filter hay qselect là rất ít.

Mình đã xây dựng xong một filter mẫu cho mọi đối tượng dựa trên quan điểm cá nhân của mình, code cũng đã xong, dùng rất thích! Mình sẽ dùng nó 1 vài ngày để trải nghiệm thử xem cần điều chỉnh thêm không sau đó sẽ post để các bạn dùng thử ^^ 

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

Chủ threat đề cập rất hay và đúng với nhu cầu của những người sử dụng như mình. Nhưng nếu để tổng quát tất cả các loại đối tượng vào 1 lisp là hơi khó. Và như vậy thì các điều kiện lọc chắc chỉ quy được về những yếu tố chung nhất. Theo mình có thể những yếu tố bao gồm:

+ Loại đối tượng

+ layer

+ màu

+ Linetype

+ Linetype scale

Như vậy chắc cũng khá tổng quát và dùng được cho khá nhiều trường hợp rồi. Theo ngu ý của mình như vậy, các bạn góp ý thêm

:)

  • 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

Không thể áp đặt filter của một nhóm cho đại đa số được, có nghĩa là, cái filter của bạn không được phép "chết", hay nói khác, mình nghĩ, sẽ chuẩn hơn, nếu nó có tùy chọn như MA setting hoặc Filter Setting nhưng người dùng được phép can thiệp nội dung này + lưu lại ^^

Lại nhớ có cái lisp mình viết để chuyển filter list của lệnh Filter sang filter Lisp list, k biết giờ trên 4room còn không ^^

  • Vote tăng 2

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

Hiện tại thì filter list của mình đúng là đang "chết", nhưng là "chết" hợp lý như thế này:

- Object  (dxf 0) áp dụng cho mọi đối tượng.

- Layer (dxf 8) áp dụng cho mọi đối tượng.

- Name (dxf 2) áp dụng cho xref, block, hatch.

- Style (dxf 3, 7) áp dụng cho *text, dim, leader..

- Ltype (dxf 6) áp dụng cho các đối tượng *Line, curve.

Riêng điều kiện lọc theo màu sẽ không đưa vào mặc định vì chúng ta thường quản lý các lớp đối tượng theo theo layer chứ không theo màu (Chỉ có dân vẽ cad gà mờ mới dùng màu để phân biệt đối tượng ^^). Mình đang xem xét đưa nó vào 1 option riêng khi nào dùng thì mới kích hoạt. đỡ làm thu hẹp mất phạm vi lọc đối tượng của cả chương trình.

  • Like 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
Đăng nhập để thực hiện theo  

×