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

Cách thống kê số lượng circle

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

Vi dụ:Mình có 1 bản vẽ rất nhiều chi tiết.

http://www.cadviet.com/upfiles/3/testhole.dwg

Trong đó có khoảng 30-->40 CIRCLE(lỗ tròn) hoặc nhiều hơn Trong số đó thì lại có các Ø khác nhau Ø 1,5 Ø 2 Ø 2,5 Ø 2,7

.....

Điều mình muốn bây giờ là: CÓ CÁCH NÀO KIỂM TRA "SỐ LƯỢNG" MỖI LOẠI CÓ BAO NHIÊU KO?? Bạn nào biết giúp mình giải quyết vấn đề này với 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

Vi dụ:Mình có 1 bản vẽ rất nhiều chi tiết.

http://www.cadviet.com/upfiles/3/testhole.dwg

Trong đó có khoảng 30-->40 CIRCLE(lỗ tròn) hoặc nhiều hơn Trong số đó thì lại có các Ø khác nhau Ø 1,5 Ø 2 Ø 2,5 Ø 2,7

.....

Điều mình muốn bây giờ là: CÓ CÁCH NÀO KIỂM TRA "SỐ LƯỢNG" MỖI LOẠI CÓ BAO NHIÊU KO?? Bạn nào biết giúp mình giải quyết vấn đề này với thanks

 

 

Bản vẽ của anh có cái may mắn là tất cả các hình tròn đều cùng 1 layer 40. Anh làm thủ công bằng cách :

1-Tắt tất cả các layer khác đi chỉ giữ lại layer 40

2- Chọn đối tượng các hình vẽ ko cần đếm chuyển nó tới một layer đã khóa nào đó, chỉ giữ lại các hình tròn trên màn hình.

3- Chọn tất cả các đối tượng>>> gõ lệnh M >>> trên dòng Command sẽ nhìn thấy số lượng là 276 hình tròn:

Command: Specify opposite corner:

Command: m MOVE 276 found

(Thời gian để làm việc này chưa đến 3 phút)

 

Do đặc thù công việc của anh, chỉ còn cách chữa cháy là chuyển các hình vẽ về cùng một layer. Lần sau nếu có vẽ các bản vẽ khác tương tự, anh nên chọn mỗi loại hình vẽ , chọn một kiểu layer riêng sẽ dễ quản lý và thuận tiện hơn nhiều.

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

Bạn hiểu nhầm ý mình rùi. Nếu muốn số lượng lỗ tròn là bao nhiêu, thì mình vào Qseclect/circle/seclect all sẽ biết đc số lượng. Nhưng ý mình là xem mỗi loại Ø có bao nhiêu cơ? VD Ø 2.0 bao nhiêu?? Ø 1.5 bao nhiêu?? Ø 1.0 bao nhiêu?? ... Bản vẽ này do mấy ông bên khách hàng gửi sang thế mới khổ

  • 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ái này lập lisp giúp bạn cũng không phải là khó, nhưng hiện tại mình chưa có thời gian. Tạm thời bạn có thể làm thủ công bằng cách sau :

1- Dùng qselect như bạn để biết tổng số lượng hình tròn

2- Chọn 1 hình tròn bất kỳ, dùng Ctrl + 1 để biết Bán kính, đường kính...Dùng lại qselect thêm lựa chọn Radius hoặc Diameter mà bạn vừa đo được, bạn ghi lại, rồi xoá những hình này đi.Chọn 1 hình tròn bất kỳ trong số những hình tròn còn lại, quay lại đầu bước 2

3- Tiếp tục cho đến khi giải quyết hết tổng số hình tròn

Chú ý : bước 1 là để confirm thôi

Sau khi xong thì Ctrl U lấy lại hình tròn nhé, hoặc save as ra file khác ( giữ file gốc mà ^^)

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

Bạn hiểu nhầm ý mình rùi. Nếu muốn số lượng lỗ tròn là bao nhiêu, thì mình vào Qseclect/circle/seclect all sẽ biết đc số lượng. Nhưng ý mình là xem mỗi loại Ø có bao nhiêu cơ? VD Ø 2.0 bao nhiêu?? Ø 1.5 bao nhiêu?? Ø 1.0 bao nhiêu?? ... Bản vẽ này do mấy ông bên khách hàng gửi sang thế mới khổ

Lỗi tại em không đọc kỹ, em sẽ rút kinh nghiệm cho lần viết bài sau!

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ái này lập lisp giúp bạn cũng không phải là khó, nhưng hiện tại mình chưa có thời gian. Tạm thời bạn có thể làm thủ công bằng cách sau :

1- Dùng qselect như bạn để biết tổng số lượng hình tròn

2- Chọn 1 hình tròn bất kỳ, dùng Ctrl + 1 để biết Bán kính, đường kính...Dùng lại qselect thêm lựa chọn Radius hoặc Diameter mà bạn vừa đo được, bạn ghi lại, rồi xoá những hình này đi.Chọn 1 hình tròn bất kỳ trong số những hình tròn còn lại, quay lại đầu bước 2

3- Tiếp tục cho đến khi giải quyết hết tổng số hình tròn

Chú ý : bước 1 là để confirm thôi

Sau khi xong thì Ctrl U lấy lại hình tròn nhé, hoặc save as ra file khác ( giữ file gốc mà ^^)

thủ công đến vậy à.

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

File bản vẽ bạn quyet gửi k có text bác ạ. Nếu có, thì cũng làm theo cách đó với qselect và Text + text content. CÒn trường hợp Circle 1 đằng, text ghi 1 nẻo 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

Cái này lập lisp giúp bạn cũng không phải là khó, nhưng hiện tại mình chưa có thời gian. Tạm thời bạn có thể làm thủ công bằng cách sau :

1- Dùng qselect như bạn để biết tổng số lượng hình tròn

2- Chọn 1 hình tròn bất kỳ, dùng Ctrl + 1 để biết Bán kính, đường kính...Dùng lại qselect thêm lựa chọn Radius hoặc Diameter mà bạn vừa đo được, bạn ghi lại, rồi xoá những hình này đi.Chọn 1 hình tròn bất kỳ trong số những hình tròn còn lại, quay lại đầu bước 2

3- Tiếp tục cho đến khi giải quyết hết tổng số hình tròn

Chú ý : bước 1 là để confirm thôi

Sau khi xong thì Ctrl U lấy lại hình tròn nhé, hoặc save as ra file khác ( giữ file gốc mà ^^)

 

Chẹp chẹp

Cách này mình nghĩ ko ổn lắm vì:

Khổ nỗi mình chưa biết bản vẽ có nhưng Ø nào lại fai vào Ctrl+1 hix ..... Mất hơi nhiều time bạn nhỉ Nếu có khoảng 20 loại chắc cũng ốm mất Đây là cách thủ công và nhanh nhất ngoài lisp đúng ko ketxu? Còn cách nào nhanh hơn mà ko fai dùng lisp??

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ẹp chẹp

Cách này mình nghĩ ko ổn lắm vì:

Khổ nỗi mình chưa biết bản vẽ có nhưng Ø nào lại fai vào Ctrl+1 hix ..... Mất hơi nhiều time bạn nhỉ Nếu có khoảng 20 loại chắc cũng ốm mất Đây là cách thủ công và nhanh nhất ngoài lisp đúng ko ketxu? Còn cách nào nhanh hơn mà ko fai dùng lisp??

Nếu bạn biết về Lisp, các bài toán về thống kê thì sử dụng Lisp đếm Block của bác ssg và chỉnh sửa theo ý của bạn là xong

Của bạn đây :

Lệnh là DB

Lisp DB

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ẹp chẹp

Cách này mình nghĩ ko ổn lắm vì:

Khổ nỗi mình chưa biết bản vẽ có nhưng Ø nào lại fai vào Ctrl+1 hix ..... Mất hơi nhiều time bạn nhỉ Nếu có khoảng 20 loại chắc cũng ốm mất Đây là cách thủ công và nhanh nhất ngoài lisp đúng ko ketxu? Còn cách nào nhanh hơn mà ko fai dùng lisp??

Mình viết cho bạn đây vì nó không dài lắm.

(defun c:demc()
 (setq ra (cdr (assoc 40 (entget (car (entsel "Chon duong chon can thong ke:")))))
ci (ssget "x" (list (cons 40 ra)))
kq (sslength ci)
)
 (princ (strcat "\nTong so duong tron co duong kinh: " (rtos ra 2 2) " la " (rtos kq 2 0) " cai"))
 )

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

Mình viết cho bạn đây vì nó không dài lắm.

(defun c:demc()
 (setq ra (cdr (assoc 40 (entget (car (entsel "Chon duong chon can thong ke:")))))
ci (ssget "x" (list (cons 40 ra)))
kq (sslength ci)
)
 (princ (strcat "\nTong so duong tron co duong kinh: " (rtos ra 2 2) " la " (rtos kq 2 0) " cai"))
 )

 

cám ơn bạn nhưng ko hiểu sao lisp của bạn chọn toàn sai số lượng.

bạn thử check lại giúp mình xem

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

Đó, viết lisp thì các bác khác sẽ giúp bạn. Còn cách thủ công, do bạn nói chỉ có khoảng 30-> 40 cái circle, mà mỗi loại lại chỉ có mấy cái, thì chắc bạn cũng chỉ làm chục lần là cùng chứ mấy ^^.. Còn nếu hay hơn nữa, hãy ngồi uống trà và down các lisp các bác ấy gửi về dùng là được 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ám ơn bạn nhưng ko hiểu sao lisp của bạn chọn toàn sai số lượng.

bạn thử check lại giúp mình xem

Xin lỗi mình thiếu 1 điều kiện lọc.

(defun c:demc()
 (setq ra (cdr (assoc 40 (entget (car (entsel "Chon duong chon can thong ke:")))))
ci (ssget "x" (list (cons 0 "CIRCLE") (cons 40 ra)))
kq (sslength ci)
)
 (princ (strcat "\nTong so duong tron co duong kinh: " (rtos ra 2 2) " la " (rtos kq 2 0) " cai"))
 )

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

Nếu bạn biết về Lisp, các bài toán về thống kê thì sử dụng Lisp đếm Block của bác ssg và chỉnh sửa theo ý của bạn là xong

Của bạn đây :

Lệnh là DB

Lisp DB

 

Mình cám ơn Teu_NV Nhưng mình chỉ tập tẹo thôi ko sửa đc. Vấn đề bây giờ là. 1.Cad LT20011 của mình ko hỗ trọ lisp 2.Điều mình muốn là có cách nào ko cần lisp và xử lý nhanh vấn đề này 3.Đã có ban ketxu giúp mình 1 cách nhưng hơi thủ công (Mình muốn biết có cách nào nhanh hơn ko?) 4.Nếu không nhanh hơn cách của ketxu thì mình cần 1 lisp (Những máy khác ở cty vẫn hỗ trợ lisp trừ máy mình vì bản quyền. Đành phải nhờ máy ng khác nếu ko muốn thủ công vậy). 5.Vẫn ưu tiên ko cần lisp(làm máy mình thoải mái)

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

Lisp bác Tuệ sửa cho bạn chuẩn rồi mà.Mình sửa lại 1 chút để k ghi ra file nữa giúp bạn đây..COpy y nguyên thuật toán đếm của bác Hoành ^^

 

(defun C:DC(/ e  Ln Bn old X Res)     
(foreach e (acet-ss-to-list (ssget '((0 . "CIRCLE"))))
     (setq Ln (append Ln (list (* 2 (cdr (assoc 40 (entget e)))))))
 )
(foreach Bn Ln
   (if (setq old (assoc Bn Res))
       (setq Res (subst (cons bn (1+ (cdr old))) old Res))
       (setq Res (append Res (list (cons Bn 1))))
   )
)
(foreach X Res  (princ (strcat "So luong duong tron Duong kinh " (rtos (car X) 2 4) " = " (itoa (cdr X)) "\n")))
(princ)
)

Qua kết quả thì thấy bản vẽ có đúng 10 loại, thao tác thủ công cũng k chậm lắm đâu bạn hiề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

Mình cám ơn Teu_NV Nhưng mình chỉ tập tẹo thôi ko sửa đc. Vấn đề bây giờ là. 1.Cad LT20011 của mình ko hỗ trọ lisp 2.Điều mình muốn là có cách nào ko cần lisp và xử lý nhanh vấn đề này 3.Đã có ban ketxu giúp mình 1 cách nhưng hơi thủ công (Mình muốn biết có cách nào nhanh hơn ko?) 4.Nếu không nhanh hơn cách của ketxu thì mình cần 1 lisp (Những máy khác ở cty vẫn hỗ trợ lisp trừ máy mình vì bản quyền. Đành phải nhờ máy ng khác nếu ko muốn thủ công vậy). 5.Vẫn ưu tiên ko cần lisp(làm máy mình thoải mái)

thanks

2.Điều mình muốn là có cách nào ko cần lisp và xử lý nhanh vấn đề này

Chỉ còn cách sử dụng thành thạo lệnh FILTER hoặc Qselect

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

Mình viết cho bạn đây vì nó không dài lắm.

(defun c:demc()
 (setq ra (cdr (assoc 40 (entget (car (entsel "Chon duong chon can thong ke:")))))
ci (ssget "x" (list (cons 40 ra)))
kq (sslength ci)
)
 (princ (strcat "\nTong so duong tron co duong kinh: " (rtos ra 2 2) " la " (rtos kq 2 0) " cai"))
 )

Chào bác phamngoctukts,

1/- Bác nên cho (cons 0 "CIRCLE") vào trong bộ lọc của hàm SSGET để tránh chọn nhầm các đối tượng khác cũng có mã DXF 40 bằng ra bác ạ.

2/- Bác nên cho chọn trước một tập hợp các đường tròn có bán kính khác nhau để có thể chạy lisp một lần mà có được nhiều kết quả hơn. Có thể việc chọn này do người dùng tự nhập danh sách các bán kính hay nhập các đường tròn từ bản vẽ theo ý của họ.

Chúc bác luô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

Lisp bác Tuệ sửa cho bạn chuẩn rồi mà.Mình sửa lại 1 chút để k ghi ra file nữa giúp bạn đây..COpy y nguyên thuật toán đếm của bác Hoành ^^

 

(defun C:DC(/ e  Ln Bn old X Res) 	
(foreach e (acet-ss-to-list (ssget '((0 . "CIRCLE"))))
        (setq Ln (append Ln (list (* 2 (cdr (assoc 40 (entget e)))))))
 )
(foreach Bn Ln
   (if (setq old (assoc Bn Res))
       (setq Res (subst (cons bn (1+ (cdr old))) old Res))
       (setq Res (append Res (list (cons Bn 1))))
   )
)
(foreach X Res  (princ (strcat "So luong duong tron Duong kinh " (rtos (car X) 2 4) " = " (itoa (cdr X)) "\n")))
(princ)
)

Qua kết quả thì thấy bản vẽ có đúng 10 loại, thao tác thủ công cũng k chậm lắm đâu bạn hiền ^^

 

Đấy là 1 bản vẽ mình đưa lên làm VD mà.

Cám ơn lisp của phamngoctukts nó chạy ngon.

Lisp của Tue_NV mà ketxu sửa cho thì mình chưa dùng đc.

Còn nếu như bạn gia_bach nói cần thành thạo FILTER mình sẽ tìm hiểu thêm

và sẽ cần nhiều sự chỉ giáo của 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ó thể do máy bạn chưa cài Express ^^.Thôi bạn cứ dùng cách của bác TUệ đi ha :")

Nhưng mà vẫn phải sửa mới được ^^

 

(defun C:DC(/ e  Ln Bn old X Res)  
(vl-load-com)   
(foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "CIRCLE"))))))
     (setq Ln (append Ln (list (* 2 (cdr (assoc 40 (entget e)))))))
 )
(foreach Bn Ln
   (if (setq old (assoc Bn Res))
       (setq Res (subst (cons bn (1+ (cdr old))) old Res))
       (setq Res (append Res (list (cons Bn 1))))
   )
)

(foreach X Res  (princ (strcat "\n" "So luong duong tron Duong kinh " (rtos (car X) 2 4) " = " (itoa (cdr X)))))
(princ)
)

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

thế là mình sẽ dùng lisp và đi nhờ máy :wacko:

ketxu co tai liệu filter không send mình nghiên cứu chút

lệnh Filter

filter_1.jpg

 

lệnh qselect

qsel.jpg

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

Vi dụ:Mình có 1 bản vẽ rất nhiều chi tiết.

http://www.cadviet.com/upfiles/3/testhole.dwg

Trong đó có khoảng 30-->40 CIRCLE(lỗ tròn) hoặc nhiều hơn Trong số đó thì lại có các Ø khác nhau Ø 1,5 Ø 2 Ø 2,5 Ø 2,7

.....

Điều mình muốn bây giờ là: CÓ CÁCH NÀO KIỂM TRA "SỐ LƯỢNG" MỖI LOẠI CÓ BAO NHIÊU KO?? Bạn nào biết giúp mình giải quyết vấn đề này với thanks

Dùng lệnh FI cái là xong ngay mà bạn.

đầu tiên bạn xác định có bao nhiêu loại Ø

select filter thì chọn circle

add select opject thì chọn 1 loại Ø nào đó.

apply

quét toàn bộ bản vẽ cần đếm sẽ đc số lượng loại Ø mà bạn chọn.

làm tương tự các Ø còn lại.

chắc nhanh hơn ngồi đếm :lol: :lol:

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

Mình thấy có nhiều điều lạ hen, cái này lisp xử lý rất tốt bạn này lại ko thích dùng (do CAD LT) có những cái thao tác rất đơn giản bạn khác nhất định phải dùng lisp. Không hiểu được.

Nếu bạn muốn thao tác trên máy nên dùng quick select như bạn Gia_bach hướng dẫn ở trên nhưng để nhanh hơn bạn có thể chọn nhỏ hơn hoặc lớn hơn ở mục Operator kết hợp với khung properties để xem các đường kính của những đường tròn đã chọn có bằng nhau không vì có thể có những đường tròn bạn chưa biết D hoặc bạn miss.

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  

×