Đến nội dung


Hình ảnh
* - - - - 1 Bình chọn

Xin lisp về đếm block


  • Please log in to reply
33 replies to this topic

#1 ttmt_jses

ttmt_jses

    biết vẽ circle

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

Đã gửi 03 December 2008 - 05:48 PM

Mình đang làm công việc thiết kế các loại bàn ghế, trong đó dùng rất nhiều các loại khớp nối có thứ tự từ HJ1 - > HJ10, và nhiều phụ kiện khác .Mỗi lần vẽ xong mình phải dùng lệnh bcount để đếm từng loại nhưng phải nhấn F2 mới thấy được hết số lượng mấy thứ đó trên Autocad Text Window nên rất mất thời gian,.Xin viết giùm mình lisp theo ý sau: chọn tất cả các đối tượng cần tính toán, sau đó lisp tự thống kê số lượng của từng loại và in ra file text xuất hiện ngay trên màn hình giống như Autocad Text Window.Nếu cần thêm thông tin gì để viết được Lisp này xin mọi người cứ yêu cầu.Xin cảm ơn mọi người.
  • 0

#2 daotukl

daotukl

    biết lệnh stretch

  • Members
  • PipPipPip
  • 162 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 03 December 2008 - 06:40 PM

Mình đang làm công việc thiết kế các loại bàn ghế, trong đó dùng rất nhiều các loại khớp nối có thứ tự từ HJ1 - > HJ10, và nhiều phụ kiện khác .Mỗi lần vẽ xong mình phải dùng lệnh bcount để đếm từng loại nhưng phải nhấn F2 mới thấy được hết số lượng mấy thứ đó trên Autocad Text Window nên rất mất thời gian,.Xin viết giùm mình lisp theo ý sau: chọn tất cả các đối tượng cần tính toán, sau đó lisp tự thống kê số lượng của từng loại và in ra file text xuất hiện ngay trên màn hình giống như Autocad Text Window.Nếu cần thêm thông tin gì để viết được Lisp này xin mọi người cứ yêu cầu.Xin cảm ơn mọi người.

dùng attribute extraction(tools =>attribute extraction)
nếu chưa đúng thi bạn có thể up một acad file lên diễn đàn
  • 0

#3 ttmt_jses

ttmt_jses

    biết vẽ circle

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

Đã gửi 05 December 2008 - 04:59 PM

Minh mò hoài mà sao chả làm được gì cả, căn bản là tiếng anh của minh yếu quá, bạn có thể hướng dẫn cụ thể cho mình được không?
  • 0

#4 ttmt_jses

ttmt_jses

    biết vẽ circle

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

Đã gửi 06 December 2008 - 08:01 AM

Sao không ai hồi âm vậy?Có ai giúp minh với!!!!!
  • 0

#5 daotukl

daotukl

    biết lệnh stretch

  • Members
  • PipPipPip
  • 162 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 06 December 2008 - 08:57 AM

Sao không ai hồi âm vậy?Có ai giúp minh với!!!!!

Mình làm với cad 2007:
TOOLS => attribute extraction : gồm 6 bước:(6 page)
page 1: chọn Create table .....(use templete: chọn cái này nếu bạn có khung sẵn) => next
page 2: chọn select objects nếu chỉ chọn một khu vực nào đó(còn chọn hết bản vẽ thì chọn current drawing)=> next
page 3: muốn xuất cái gì thì chọn cái đó ... =>next
page 4: chọn autocad table(chọn thêm externel file nếu muốn xuất ra excel)=> next
page 5: next
page 6: FINISH
  • 1

#6 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 06 December 2008 - 10:50 AM

Mình đang làm công việc thiết kế các loại bàn ghế, trong đó dùng rất nhiều các loại khớp nối có thứ tự từ HJ1 - > HJ10, và nhiều phụ kiện khác .Mỗi lần vẽ xong mình phải dùng lệnh bcount để đếm từng loại nhưng phải nhấn F2 mới thấy được hết số lượng mấy thứ đó trên Autocad Text Window nên rất mất thời gian,.Xin viết giùm mình lisp theo ý sau: chọn tất cả các đối tượng cần tính toán, sau đó lisp tự thống kê số lượng của từng loại và in ra file text xuất hiện ngay trên màn hình giống như Autocad Text Window.Nếu cần thêm thông tin gì để viết được Lisp này xin mọi người cứ yêu cầu.Xin cảm ơn mọi người.


Bạn dùng thử lisp này. Lệnh DB, nó chạy y như ý bạn muốn:


;;;------------------------------------------------
(defun ss2ent(ss / sodt index ent lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq
ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
;;;------------------------------------------------
(defun C:DB( / ss Le fn f e Le Ln Bn old X Res) ;;;Dem so luong Blocks
(setq
ss (ssget '((0 . "INSERT")))
Le (ss2ent ss)
fn (getfiled "Save As" "" "txt" 1)
f (open fn "w")
)
(foreach e Le (setq Ln (append Ln (list (cdr (assoc 2 (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))))
)
)
(princ "KET QUA:\n\n" f)
(foreach X Res (princ (strcat (car X) " = " (itoa (cdr X)) "\n") f))
(close f)
(startapp "notepad" fn)
(princ)
)
;;;------------------------------------------------


  • 8

#7 ttmt_jses

ttmt_jses

    biết vẽ circle

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

Đã gửi 06 December 2008 - 12:55 PM

Phải công nhận, bác ssg hết chỗ chê, cảm ơn bác thật thật nhiều,còn hơn cả mong đợi nữa :cheers:
  • 1

#8 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 08 December 2008 - 09:34 AM

Phải công nhận, bác ssg hết chỗ chê, cảm ơn bác thật thật nhiều,còn hơn cả mong đợi nữa :cheers:

Không cần phải khen! Bạn là thành viên mới, ssg xin lưu ý bạn vài điều:

1. Nếu cảm thấy một bài viết nào đó hay, hữu ích với mình, và nếu không có ý kiến gì khác, bạn chỉ cần bấm vào nút "Thanks" ở dưới bài viết đó. Số lần được thanks của một thành viên sẽ được thống kê tự động và được ghi ở phần thông tin về thành viên bên trái bài viết, sau dấu : và trước dấu *. Con số ấy phần nào ghi nhận sự đóng góp của thành viên đó đối với diễn đàn, có tác dụng động viên người viết bài tốt hơn là những lới khen chung chung.

2. Trước khi nêu yêu cầu, bạn nên dùng chức năng "Tìm kiếm" của diễn đàn. Thật ra thì lisp đếm block đã được anh Hoành post ở topic "Viết lisp theo yêu cầu", trang 31. Tuy nhiên:
- Yêu cầu của bạn có hơi khác một chút: không cần xét tỷ lệ của block; ghi ra file *.txt và open nó
- Topic trên quá lớn, tìm được một nội dung trong đó quả thực rất khó và mất thời gian. Ngay cả ssg, dù biết rằng nó ở trang 31 (theo lời của 1 member khi ssg dùng chức năng tìm kiếm), nhưng phải lật trang đến... mỏi tay mới thấy!
Ssg đã dựa trên cái lisp của anh Hoành, sửa đổi, bổ sung một chút cho hợp với yêu cầu của bạn.

Nhân đây, ssg cũng đề nghị anh Hoành tách topic trên (cả cả một số topic khác nếu có số bài quá nhiều) thành nhiều topic con để các thành viên tiện theo dõi khi cần. Ngoài ra, nếu có thể được, anh bổ sung thêm chức năng "gõ con số 31 chẳng hạn, trình duyệt sẽ chuyển ngay đến trang 31 mà không cần phải lật trang nhiều lần". Biết là anh Hoành đang khá bận, chỉ lưu ý để anh xem xét.


P/S
(Dành cho các "lập trình viên" lisp)

Thuật toán đếm mà anh Hoành đã dùng thật tuyệt. Minh hoạ bằng đoạn code sau trong chương trình của ssg:

...
(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))))
)
)
...

Không chỉ để đếm block, các bạn có thể dùng thuật toán trên khi cần đếm bất cứ cái gì.
  • 2

#9 ngochop

ngochop

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 18 June 2009 - 10:50 AM

Các bác cho em hỏi tí, ngôn ngữ trong kết quả tìm được khi hiên ở notepad có thể đọc được tiếng anh, tiếng trung không vậy, ý em hỏi là khi bản vẽ của người nước ngoài thiết kê (ở cty em là của mấy anh KS Trung Quốc họ đặt tên cho block bằng chữ TQ, khi được kết quả thì bị vỡ font gây khó khăn cho việc tìm kết quả, đặc biệt là khi tìm block có số lượng gần giống nhau), mong các bác giúp đỡ. Thật ra đi làm em mới tìm hiểu nhiều về lĩnh vực autolisp, nó hay thật đấy.
  • 0

#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 June 2009 - 11:52 AM

Các bác cho em hỏi tí, ngôn ngữ trong kết quả tìm được khi hiên ở notepad có thể đọc được tiếng anh, tiếng trung không vậy, ý em hỏi là khi bản vẽ của người nước ngoài thiết kê (ở cty em là của mấy anh KS Trung Quốc họ đặt tên cho block bằng chữ TQ, khi được kết quả thì bị vỡ font gây khó khăn cho việc tìm kết quả, đặc biệt là khi tìm block có số lượng gần giống nhau), mong các bác giúp đỡ. Thật ra đi làm em mới tìm hiểu nhiều về lĩnh vực autolisp, nó hay thật đấy.

Bạn có thể sử dụng lệnh Rename của CAD để đổi tên Block đó về theo ý của mình nhằm thuận lợi hơn trong công việc tìm kiếm và sử dụng
  • 1

#11 ngochop

ngochop

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 18 June 2009 - 03:57 PM

Bạn có thể sử dụng lệnh Rename của CAD để đổi tên Block đó về theo ý của mình nhằm thuận lợi hơn trong công việc tìm kiếm và sử dụng

Cảm ơn các bác nhé. Tiện đây em cũng xin hỏi các bác, em đã lục tung dd rồi nhưng không thấy, tức là thế này, em có một bản vẽ mà người thiết kế hình như không dung block (hay là ẩn hiện gì thì em chưa biết), làm cho em sử dụng lisp đếm block (để đếm thiết bị) không thể dùng được, làm thế nào bây giờ hả các bác, có cách nào để biến các thiết bị đó thành block không vậy.
  • 0

#12 ngochop

ngochop

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 19 June 2009 - 02:47 PM

Cảm ơn các bác nhé. Tiện đây em cũng xin hỏi các bác, em đã lục tung dd rồi nhưng không thấy, tức là thế này, em có một bản vẽ mà người thiết kế hình như không dung block (hay là ẩn hiện gì thì em chưa biết), làm cho em sử dụng lisp đếm block (để đếm thiết bị) không thể dùng được, làm thế nào bây giờ hả các bác, có cách nào để biến các thiết bị đó thành block không vậy.

Không có bác nào có ý kiến gì ah
  • 0

#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 June 2009 - 02:50 PM

Không có bác nào có ý kiến gì ah

Bạn hãy upload bản vẽ đó lên đây mới có cách giải quyết được.
  • 0

#14 ngochop

ngochop

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 20 June 2009 - 08:43 AM

Bạn hãy upload bản vẽ đó lên đây mới có cách giải quyết được.

Các bác thông cảm nhé, em không up lên được, chỉ biết là mấy ông KS bên nước bạn (TQ) họ vẽ mấy cái thiết bị như bóng đèn, công tắc, ổ cắm họ không dùng block bình thường làm em dùng lisp đếm block không thể nào đếm được. Dạng như họ vẽ một thiết bị chuẩn rồi dùng lệnh copy thì phải
  • 1

#15 hailuavnn

hailuavnn

    biết vẽ ellipse

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

Đã gửi 23 May 2010 - 12:05 AM

Bạn dùng thử lisp này. Lệnh DB, nó chạy y như ý bạn muốn:


;;;------------------------------------------------
(defun ss2ent(ss / sodt index ent lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq
ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
;;;------------------------------------------------
(defun C:DB( / ss Le fn f e Le Ln Bn old X Res) ;;;Dem so luong Blocks
(setq
ss (ssget '((0 . "INSERT")))
Le (ss2ent ss)
fn (getfiled "Save As" "" "txt" 1)
f (open fn "w")
)
(foreach e Le (setq Ln (append Ln (list (cdr (assoc 2 (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))))
)
)
(princ "KET QUA:\n\n" f)
(foreach X Res (princ (strcat (car X) " = " (itoa (cdr X)) "\n") f))
(close f)
(startapp "notepad" fn)
(princ)
)
;;;------------------------------------------------


Rất cám ơn, bài viết của bạn rất có ích cho mọi người
  • 1

#16 nguyen tuan hung

nguyen tuan hung

    biết vẽ arc

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

Đã gửi 05 May 2011 - 03:48 PM

Chào tất cả mọi người trong diễn đàn.
EM có chút thắc mắc về cách đếm block mong ai bít thì giúp em.
Thanks
http://www.cadviet.c...system_plan.dwg
  • 0

#17 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 05 May 2011 - 04:02 PM

- Bạn nhìn xuống bên dưới bài bạn, mục Similar Post có kha khá link về vấn đề này rồi.Lần sau nhớ chú ý hơn bạn nhé.
- Bạn nói không đếm được chắc là dùng Bcount, và chưa thử các công cụ lọc qselect, fi của CAD.
- Nếu muốn dùng lisp thì bạn qua đây :
DB
  • 1

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


#18 quochuyhutech

quochuyhutech

    Chưa sử dụng CAD

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

Đã gửi 06 May 2011 - 02:35 PM

mình muốn xin lisp về lệnh bcount chứ không phải db ai giúp minh với
  • 0

#19 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 06 May 2011 - 02:37 PM

mình muốn xin lisp về lệnh bcount chứ không phải db ai giúp minh với

Thật khó hiểu!
Bcount nằm trong bộ Express, nếu máy bạn có rồi thì xin cái gì ở đây ??
  • 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 quochuyhutech

quochuyhutech

    Chưa sử dụng CAD

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

Đã gửi 06 May 2011 - 03:19 PM

Thật khó hiểu!
Bcount nằm trong bộ Express, nếu máy bạn có rồi thì xin cái gì ở đây ??

nhưng khi mình gõ lệnh bcount máy báo unknown command
  • 0