Đế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

#21 ketxu

ketxu

    Copier - Paster - Editor

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

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

CAD của bạn đã cài bộ Express Tool ra chưa, bạn dùng CAD nào ? Thường thì cài bộ cài CAD sẽ có mục cho bạn lựa chọn cài thêm Express, và nếu đã cài thì thường sẽ có menu Express hiện ra. Bạn chịu khó miêu tả kỹ để mọi người dễ dàng giúp đỡ bạn hơ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


#22 hkk

hkk

    Chưa sử dụng CAD

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

Đã gửi 03 July 2012 - 03:56 PM

mình cần đếm block attribute có ai biết cách không chỉ mình với
thanks
  • 0

#23 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 04 July 2012 - 12:26 AM

mình cần đếm block attribute có ai biết cách không chỉ mình với
thanks

Hề hề hề,
Code nháp cho bạn xem có đúng ý không nhé:

(defun c:datbl ()
(setq n (sslength (ssget (list (cons 0 "insert") (cons 66 1)))))
(alert (strcat "\n Ban vua chon duoc " (rtos n 2 0) " block co chua thuoc tinh"))
(princ)
)
Chúc bạ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.

#24 quochuyksxd

quochuyksxd

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 24 (tàm tạm)

Đã gửi 05 July 2012 - 08:07 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));;;------------------------------------------------

Mình thấy lips này vẫn khá thủ công. Bạn có thể chỉnh sửa làm sao để chọn vào một block mẫu mà mình cần thống kê thì nó sẽ đếm tất cả block giống nó trên bản vẽ được không? (Ứng dung như khi cần thống kê cửa đi, cửa sổ...)
  • 0

#25 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 05 July 2012 - 08:44 AM


(defun C:DEM ()
(alert (strcat "\nTren ban ve co " (itoa (sslength (ssget "X" (list (cons 0 "insert") (assoc 2 (entget (car (entsel "\nChon Block mau: ")))))))) " block giong block mau.")))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#26 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 05 July 2012 - 09:03 AM

mình cần đếm block attribute có ai biết cách không chỉ mình với
thanks

Đếm block ATT thì đa dạng lắm,
1)có thể bạn chỉ cần đếm số lượng block mà không quan tâm đến nội dung của ATT VD: không cần phân biệt cửa D1 với D2 mà chỉ cần biết nó có block name là "Door"
2)hoặc bạn muốn đếm có bao nhiêu D1 và bao nhiêu D2? ở trường hợp này bạn cần phải cho người viết lisp biết block của bạn như thế nào, có mấy ATT....

bạn cần nói rõ yêu cầu của mình!
Nếu là yêu cầu như trường hợp 1 bạn có thể dùng thử lisp này, nó tương tự như lệnh slect similar, các đối tượng cùng kiểu, cùng layer thì nó sẽ chọn hết.

(defun c:sw(/ aaa ls dt dt1 sdt sdt1 ent ent1 id id1)
(setq AAA(SSGET)
sdt (sslength AAA)
id 0
dt (ssadd)
)
(repeat sdt;;repeat1
(setq ent (ssname AAA id)
id (1+ id)
);;setq
(setq ls (entget ent))
(if (= (cdr (assoc 0 ls)) "INSERT")
(get-block ent)
(setq dt1(ssget"all"(list(assoc 0 ls) (assoc 8 ls))))
);;if
(setq sdt1 (sslength dt1)
id1 -1)
(while (setq ent1(ssname dt1 (setq id1 (1+ id1))))
(setq dt (ssadd ent1 dt))
);;While
(sssetfirst dt dt)
);;repeat1
(princ (strcat "\nco " (rtos (sslength dt)) " doi tuong." ))
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;
(defun get-block(entm / sdtb idb ent2 entb dtm namem name BBB entb)
(setq dtm (vlax-ename->vla-object entm))
(setq namem (if(vlax-property-available-p dtm 'effectivename)
(vla-get-effectivename dtm)
(vla-get-name dtm)
));;;
(setq BBB(SSGET "all" (list(cons 0 "INSERT") (assoc 8 (entget entm))))
sdtb (sslength BBB)
idb 0
dt1 (ssadd)
)
(repeat sdtb;;repeat
(setq entb (ssname BBB idb)
idb (1+ idb)
)
(setq ent2(vlax-ename->vla-object entb))
(setq name (if(vlax-property-available-p ent2 'effectivename)
(vla-get-effectivename ent2)
(vla-get-name ent2)
))
(if (= name namem)
(setq dt1 (ssadd entb dt1))
)
);;repeat
)

  • 0
Hình đã gửi

#27 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 05 July 2012 - 09:12 AM

Sao mà dài thế! #25 cũng được mà
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#28 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 05 July 2012 - 09:29 AM

Sao mà dài thế! #25 cũng được mà

Đúng là lisp ở #25 đếm att được, nhưng em test với bản vẽ mà bạn ấy đưa lên thì không được bác ah, vì att cũng có thể bao gồm cả Dynamic block bác ah, Lisp này em viết để dùng chọn nhiều loại đối tượng cùng lúc nên hơi dài. Thấy có vẽ dùng được cho yêu cầu của bạn ấy nên em bê nguyên con lên ^^
  • 0
Hình đã gửi

#29 hangcom

hangcom

    Chưa sử dụng CAD

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

Đã gửi 27 March 2013 - 10:59 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));;;------------------------------------------------

Mình sử dụng Autocad 2008, mình đã sử dụng lệnh AP và nó báo đã load nhưng khi mình gõ lệnh ĐB nó không dùng được. nó báo:

Unknown command "DB".  Press F1 for help.

Bạn hãy cho mình hướng khắc phục lỗi này. Cảm ơn


  • 0

#30 hangcom

hangcom

    Chưa sử dụng CAD

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

Đã gửi 29 March 2013 - 09:08 AM

mình đợi 2 ngày mà vẫn không có ai trả lời được vấn đề này sao ?


  • 0

#31 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 29 March 2013 - 10:15 AM

Chắc k ai trả lời được đâu bạn ơi
  • 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


#32 minhtu2004

minhtu2004

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 219 Bài viết
Điểm đánh giá: 34 (tàm tạm)

Đã gửi 03 May 2013 - 03:09 PM

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

-Nhờ bạn viết thêm code tạo bảng table để chèn kết quả vào, thank.Bảng thống kê như sau:

Untitled_zpse5cefacc.jpg


  • 0

-Nhận thực hiện bản vẽ 3D bằng revit.
-Liên hệ: 01664793290.


#33 dzee123msag

dzee123msag

    Chưa sử dụng CAD

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

Đã gửi 26 April 2016 - 04:24 PM

Mình sử dụng lisp của bác ssg.Lỗi:"Command: db, 420 found; error: bad argument type: FILE nil". Tạo file cad mới thì sử dụng được. Nhưng mở bản vẽ của người khác đưa thì không sử dụng lisp "db" được. Mình chưa khắc phục được.


  • 0

#34 dokisotelg

dokisotelg

    Chưa sử dụng CAD

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

Đã gửi 04 May 2016 - 11:01 AM

Mình nhớ là trong thanh Quick Select của Cad hoặc lệnh Filter hoặc lệnh “ssx”.... đều đếm được mà


  • 0