Đến nội dung


Hình ảnh

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


  • Please log in to reply
23 replies to this topic

#1 tienquyet123

tienquyet123

    biết vẽ polygon

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

Đã gửi 09 March 2011 - 08:22 AM

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

  • 0

#2 hoan2182

hoan2182

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2646 Bài viết
Điểm đánh giá: 832 (rất tốt)

Đã gửi 09 March 2011 - 09:28 AM

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.
  • 0

Gió đưa cây cải về trời

Rau răm ở lại chịu lời đắng cay...


#3 tienquyet123

tienquyet123

    biết vẽ polygon

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

Đã gửi 09 March 2011 - 09:49 AM

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ổ
  • 1

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 March 2011 - 10:09 AM

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à ^^)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#5 hoan2182

hoan2182

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2646 Bài viết
Điểm đánh giá: 832 (rất tốt)

Đã gửi 09 March 2011 - 10:21 AM

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!
  • 0

Gió đưa cây cải về trời

Rau răm ở lại chịu lời đắng cay...


#6 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 09 March 2011 - 10:25 AM

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 à.
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#7 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 March 2011 - 10:30 AM

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ì >:">
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#8 tienquyet123

tienquyet123

    biết vẽ polygon

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

Đã gửi 09 March 2011 - 10:32 AM

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??
  • 0

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 09 March 2011 - 10:39 AM

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
  • 0

#10 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 09 March 2011 - 10:46 AM

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"))
)


  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#11 tienquyet123

tienquyet123

    biết vẽ polygon

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

Đã gửi 09 March 2011 - 10:53 AM

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
  • 0

#12 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 March 2011 - 11:02 AM

Đó, 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 ạ ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#13 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 09 March 2011 - 11:07 AM

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"))
)

  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#14 tienquyet123

tienquyet123

    biết vẽ polygon

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

Đã gửi 09 March 2011 - 11:15 AM

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

  • 0

#15 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 March 2011 - 11:21 AM

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 ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#16 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 09 March 2011 - 11:28 AM

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
  • 0

#17 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 09 March 2011 - 11:31 AM

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....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#18 tienquyet123

tienquyet123

    biết vẽ polygon

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

Đã gửi 09 March 2011 - 11:44 AM

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.


  • 0

#19 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 March 2011 - 11:51 AM

Ồ 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)
)

  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#20 tienquyet123

tienquyet123

    biết vẽ polygon

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

Đã gửi 09 March 2011 - 11:55 AM

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
  • 0