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

[Nhờ giúp đỡ] Lisp đếm block BLKQTY

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

Ở phần chữ không có dấu là để lấy bề rộng cột chứa tên thiết bị.

Theo tui biết nếu làm trực tiếp trong lisp thì chỉ có cách ấ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

Ở phần chữ không có dấu là để lấy bề rộng cột chứa tên thiết bị.

Theo tui biết nếu làm trực tiếp trong lisp thì chỉ có cách ấy.

 

-Cái này phải mất công bạn vandv phải dùng thêm chương trình để chuyển nữa rồi ^_^

- Tìm bề rộng cột đâu cần phải ghi chữ không dấu

Chữ có dấu tìm bề rộng nó cũng tương đương với chũ không dấu.

Bạn kiểm tra lại nhé!

 

 

-Theo mình cách hay nhất vẫn nên sử dụng description của block để mô tả. Sau đó dùng Lisp để đọc

Việc này cũng khá nhanh. Vì trong lệnh BEDIT cũng vốn đã hiển thị tên Block với mô tả description. Bạn ấy lại đặt Block theo tên bắt đầu bằng chữ D_ nên việc sử dụng description của block để mô tả rất dễ dàng

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 phải mất công bạn vandv phải dùng thêm chương trình để chuyển nữa rồi ^_^

- Tìm bề rộng cột đâu cần phải ghi chữ không dấu

Chữ có dấu tìm bề rộng nó cũng tương đương với chũ không dấu.

Bạn kiểm tra lại nhé!

 

 

-Theo mình cách hay nhất vẫn nên sử dụng description của block để mô tả. Sau đó dùng Lisp để đọc

Việc này cũng khá nhanh. Vì trong lệnh BEDIT cũng vốn đã hiển thị tên Block với mô tả description. Bạn ấy lại đặt Block theo tên bắt đầu bằng chữ D_ nên việc sử dụng description của block để mô tả rất dễ dàng

Mình đã tạo description của block. Bác Tue_NV chỉ mình cách dùng lisp để thống ke với http://www.cadviet.com/upfiles/4/102116_thong_ke_dien.dwg

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ác Tue_NV:

1. Chữ có dấu ở dạng hexa nên nhiều ký tự quá bác ạ! Em chưa biết cách giải quyết.???

2. Description em làm được rồi, nhưng tiếng Việt vẫn bị nhảy tung tăng.

PS: Muốn hiện tiếng Việt thì trong Description lại phải để Hexa.

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

@vandv:

+ Description phải dùng hexa.

+ Cách dùng đơn giản nhất để nhập mã hexa: http://www.cadviet.com/forum/topic/65354-thao-luan-go-tieng-viet-unicode-hexadecimal-ngay-trong-trinh-soan-thao-code-lisp/

Đây là lisp:

(defun c:BlkQty (/ blk_id blk_len blk_name blks cur_var ent h header_lsp height i ins j len0 lst_blk msp pt row ss str tblobj width width1 width2 x y blk_obj defx blk_def)
;; By : Gia Bach, gia_bach @ www.CadViet.com ;;
(defun TxtWidth (val h msp / txt minp maxp)
(setq txt (vla-addtext msp val (vlax-3d-point '(0 0 0)) h))
(vla-getboundingbox txt 'minp 'maxp)
(vla-erase txt)
(- (car (vlax-safearray->list maxp)) (car (vlax-safearray->list minp))))
(defun GetOrCreateTableStyle (tbl_name / name namelst objtblsty objtblstydic tablst txtsty)
(setq objTblStyDic (vla-item (vla-get-dictionaries *adoc) "ACAD_TABLESTYLE"))
(foreach
itm (vlax-for itm objTblStyDic (setq tabLst (append tabLst (list itm))))
(if (not (vl-catch-all-error-p (setq name (vl-catch-all-apply 'vla-get-name (list itm)))))
(setq nameLst (append nameLst (list name)))))
(if (not (vl-position tbl_name nameLst))
(vla-addobject objTblStyDic tbl_name "AcDbTableStyle"))
(setq objTblSty (vla-item objTblStyDic tbl_name)
TxtSty (variant-value (vla-getvariable *adoc "TextStyle")))
(mapcar '(lambda (x) (vla-settextstyle objTblSty x TxtSty)) (list actitlerow acheaderrow acdatarow))
(vla-setvariable *adoc "CTableStyle" tbl_name))
(defun GetObjectID (obj)
(if (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
(vlax-invoke-method (vla-get-utility *adoc) 'GetObjectIdString obj :vlax-false)
(vla-get-objectid obj))) ;main
(if (setq ss (ssget (list (cons 0 "INSERT"))))
(progn (vl-load-com)
(setq i -1
len0 8)
(while (setq ent (ssname ss (setq i (1+ i))))
(setq blk_name (vla-get-name (vlax-ename->vla-object ent)))
;; ------------- Lay Description -------------------
(setq blk_obj (vlax-ename->vla-object ent)
blk_def (vla-item
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(vla-get-effectivename blk_obj))
defx (vl-catch-all-apply (function (lambda () (vla-get-comments blk_def)))))
;;-------------Thay doi Len-------------------------
(if (> (setq blk_len (strlen defx)) len0)
(setq str defx
len0 blk_len))
(setq blk_name (list blk_name defx)) ; Them Description
(if (not (assoc blk_name lst_blk))
(setq lst_blk (cons (cons blk_name 1) lst_blk))
(setq lst_blk (subst (cons blk_name (1+ (cdr (assoc blk_name lst_blk)))) (assoc blk_name lst_blk) lst_blk))))
;;--------------------------------------------------
(setq lst_blk (vl-sort lst_blk '(lambda (x y) (< (car (car x)) (car (car y)))))) ; Them car
(setq cur_var (mapcar 'getvar '("DYNMODE" "DYNPROMPT")))
(mapcar 'setvar '("DYNMODE" "DYNPROMPT") '(1 1))
(initget "Yes No")
(setq ins (getkword "\nChen ki hieu Block [Yes/No ] : "))
(or ins (setq ins "Yes"))
(mapcar 'setvar '("DYNMODE" "DYNPROMPT") cur_var)
(or *h* (setq *h* (* (getvar "dimtxt") (getvar "dimscale"))))
(initget 6)
(setq h (getreal (strcat "\nChieu cao chu <" (rtos *h*) "> :")))
(if h (setq *h* h)
(setq h *h*))
(setq *adoc (vla-get-activedocument (vlax-get-acad-object))
msp (vla-get-modelspace *adoc)
blks (vla-get-blocks *adoc))
(setq width1 (* 2 (TxtWidth "STT" h msp))
width (* 2 (TxtWidth "So luong" h msp))
height (* 2 h))
(if str
(setq width2 (* 1.25 (TxtWidth (strcase str) h msp)))
(setq width2 width))
(if (> h 3)
(setq width (* (fix (/ width 10)) 10)
width1 (* (fix (/ width1 10)) 10)
width2 (* (fix (/ width2 10)) 10)
height (* (fix (/ height 5)) 5)))
(GetOrCreateTableStyle "CadViet")
(setq pt (getpoint "\nDiem dat Bang :")
TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst_blk) 2) 5 height width))
(vla-put-regeneratetablesuppressed TblObj :vlax-true)
(vla-setcolumnwidth TblObj 0 width1)
(vla-setcolumnwidth TblObj 1 width2)
(vla-put-vertcellmargin TblObj (* 0.75 h))
(vla-put-horzcellmargin TblObj (* 0.75 h))
(mapcar '(lambda (x) (vla-settextheight TblObj x h)) (list actitlerow acheaderrow acdatarow))
(mapcar '(lambda (x) (vla-setalignment TblObj x 2)) (list actitlerow acheaderrow acdatarow))
(vl-catch-all-error-p (vl-catch-all-apply (function (lambda () (vla-mergecells TblObj 0 0 0 3)))))
(vla-settext TblObj 0 0 "B\U+1EA2NG TH\U+1ED0NG K\U+00CA")
(vla-setcelltextheight TblObj 0 0 (* h 2))
(setq j -1
header_lsp (list "STT" "T\U+00CAN G\U+1ECCI" "\U+0110\U+01A0N V\U+1ECA" "S\U+1ED0 L\U+01AF\U+1EE2NG" "K\U+00DD HI\U+1EC6U"))
(repeat (length header_lsp) (vla-settext TblObj 1 (setq j (1+ j)) (nth j header_lsp)))
(setq row 2
i 1)
(foreach
pt lst_blk
(setq blk_name (car pt)
j -1)
(mapcar '(lambda (x) (vla-settext TblObj row (setq j (1+ j)) x))
(list i (cadr blk_name) "C\U+00C1I" (cdr pt))) ; Them cadr
(if (= ins "Yes")
(vlax-for
blk blks
(if (= (vla-get-name blk) (car blk_name)) ; Them car
(vla-setblocktablerecordid TblObj row 4 (GetObjectID blk) :vlax-true))))
(vla-setcellalignment TblObj row 1 7)
(vla-setcellalignment TblObj row 3 9)
(setq row (1+ row)
i (1+ i)))
(vla-put-regeneratetablesuppressed TblObj :vlax-false)
(vlax-release-object TblObj)))
(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

@Bác Tue_NV:

1. Chữ có dấu ở dạng hexa nên nhiều ký tự quá bác ạ! Em chưa biết cách giải quyết.???

2. Description em làm được rồi, nhưng tiếng Việt vẫn bị nhảy tung tăng.

PS: Muốn hiện tiếng Việt thì trong Description lại phải để Hexa.

 

Trong Description Không cần phải để Hexa

Ban quocmanh và vandv thử lisp này nhé

(Trên file tạo description của vandv)

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/69520-nho-gia-p-do-lisp-dem-block-blkqty/
(defun c:BlkQty (/ blk_id blk_len blk_name blks cur_var ent h header_lsp height i
         ins j len0 lst_blk  msp pt row ss str tblobj width width1 width2 x y);;
;;  By : Gia Bach, gia_bach @  www.CadViet.com             ;;
(defun TxtWidth (val h msp / txt minp maxp)
  (setq    txt (vla-AddText msp val (vlax-3d-point '(0 0 0)) h))
  (vla-getBoundingBox txt 'minp 'maxp )
  ;(vla-Erase txt)
  (-(car(vlax-safearray->list maxp))(car(vlax-safearray->list minp)))  )

(defun GetOrCreateTableStyle (tbl_name / name namelst objtblsty objtblstydic tablst txtsty)
  (setq objTblStyDic (vla-item (vla-get-dictionaries *adoc) "ACAD_TABLESTYLE") )  
  (foreach itm (vlax-for itm objTblStyDic
         (setq tabLst (append tabLst (list itm))))
    (if (not
      (vl-catch-all-error-p
        (setq name (vl-catch-all-apply 'vla-get-Name (list itm)))))
      (setq nameLst (append nameLst (list name)))  )  )
  (if (not (vl-position tbl_name nameLst))
    (vla-addobject objTblStyDic tbl_name "AcDbTableStyle"))
  (setq objTblSty (vla-item objTblStyDic tbl_name)
    TxtSty (variant-value (vla-getvariable *adoc "TextStyle")))
  (mapcar '(lambda (x)(vla-settextstyle objTblSty x TxtSty))
          (list acTitleRow acHeaderRow acDataRow) )
  (vla-setvariable *adoc "CTableStyle" tbl_name) )

(defun GetObjectID (obj)
  (if (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
    (vlax-invoke-method
      (vla-get-Utility *adoc)
      'GetObjectIdString obj :vlax-false )
    (vla-get-Objectid obj)))  
;main
  (if (setq ss (ssget (list (cons 0 "INSERT"))))
    (progn
      (vl-load-com)
      (setq i -1 len0 8)
      (while (setq ent (ssname ss (setq i (1+ i))))
    (setq blk_name (cdr(assoc 4 (entget(tblobjname "block" (vla-get-effectivename (vlax-ename->vla-object ent)))))))  
    (if (> (setq blk_len (strlen blk_name)) len0)
      (setq str blk_name len0 blk_len) )    
    (if (not (assoc blk_name lst_blk))
      (setq lst_blk (cons (cons blk_name 1) lst_blk))
      (setq lst_blk (subst (cons blk_name (1+ (cdr (assoc blk_name lst_blk))))
                   (assoc blk_name lst_blk) lst_blk)))        )
      (setq lst_blk (vl-sort lst_blk '(lambda (x y) (< (car x) (car y)) ) ))
      (setq cur_var (mapcar 'getvar '("DYNMODE" "DYNPROMPT")))
      (mapcar 'setvar '("DYNMODE" "DYNPROMPT") '(1 1))
      (initget "Yes No")
      (setq ins (getkword "\nChen ki hieu Block [Yes/No ] <yes> : ") )
      (or ins (setq ins "Yes"))
      (mapcar 'setvar '("DYNMODE" "DYNPROMPT") cur_var)      
      (or *h* (setq *h* (* (getvar "dimtxt")(getvar "dimscale"))))
      (initget 6)
      (setq h (getreal (strcat "\nChieu cao chu <" (rtos *h*) "> :")))      
      (if h (setq *h* h) (setq h *h*) )
      (setq *adoc (vla-get-ActiveDocument (vlax-get-acad-object))
        msp (vla-get-modelspace *adoc)
        blks (vla-get-blocks *adoc))      
      (setq width1 (* 2 (TxtWidth "STT" h msp))
        width (* 2 (TxtWidth "So luong" h msp))
        height (* 2 h))
      (if str
    (setq width2 (* 1.05 (TxtWidth (strcase str) h msp)))
    (setq width2 width))
      (if (> h 3)
    (setq width (* (fix (/ width 10))10)
          width1 (* (fix (/ width1 10))10)
          width2 (* (fix (/ width2 10))10)
          height (* (fix (/ height 5))5)))
      (GetOrCreateTableStyle "CadViet")
      (setq pt (getpoint "\nDiem dat Bang :")
        TblObj (vla-addtable msp (vlax-3d-point pt) (+ (length lst_blk) 2) 5 height width))
      (vla-put-regeneratetablesuppressed TblObj :vlax-true)
      (vla-SetColumnWidth TblObj 0 width1)
      (vla-SetColumnWidth TblObj 1 width2)
      (vla-put-vertcellmargin TblObj (* 0.75 h))
      (vla-put-horzcellmargin TblObj (* 0.75 h))
      (mapcar '(lambda (x)(vla-setTextHeight TblObj x h))
          (list acTitleRow acHeaderRow acDataRow) )
      (mapcar '(lambda (x)(vla-setAlignment TblObj x 2))
          (list acTitleRow acHeaderRow acDataRow))      
      (vl-catch-all-error-p (vl-catch-all-apply (function(lambda () (vla-MergeCells TblObj 0 0 0 3)) )))
      (vla-setText TblObj 0 0 "Bang thong ke")
      (setq j -1 header_lsp (list "STT" "Ten" "Don vi" "So luong" "Ky hieu"))
      (repeat (length header_lsp)
    (vla-setText TblObj 1 (setq j (1+ j)) (nth j header_lsp)))
      (setq row 2 i 1)    
      (foreach pt lst_blk
    (setq blk_name (car pt) j -1 )
    (mapcar '(lambda (x)(vla-setText TblObj row (setq j (1+ j)) x))
        (list i blk_name "cai" (cdr pt)))
    (if (= ins "Yes")
      (vlax-for blk blks
        (if; (= (vla-get-Name blk) blk_name)
        (= (cdr(assoc 4 (entget(tblobjname "block" (vla-get-name blk))))) blk_name)
          (vla-SetBlockTableRecordId TblObj row 4 (GetObjectID blk) :vlax-true))) )
    (vla-SetCellAlignment TblObj row 1 7)
    (vla-SetCellAlignment TblObj row 3 9)
    (setq row (1+ row) i (1+ i))    )
      (vla-put-regeneratetablesuppressed TblObj :vlax-false)
      (vlax-release-object TblObj) )  )
  (princ))
  • 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

Em nhờ các cao thủ viết thêm vào lisp của bác gia_bach nội dung như sau:

-         Trong bản vẽ dưới đây có 2 loại dữ liệu text: D15,L...; D20,L... .Và mỗi loại có 2 mầu khác nhau là mầu 15, 80.

(D15,L...: đường kính 15, chiều dài)

-         Em muốn ra kết quả tổng tất cả các text sau chữ “D15,L” và “D20,L” cụ thể:

+ D15,L... mầu 15

+ D20,L... mầu 15

+ D15,L... mầu 80

+ D20,L... mầu 80.

Em xin cảm ơn trước ạ!

http://www.cadviet.com/upfiles/5/144817_sdkg_1.dwg

  • Vote giảm 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ác bác giúp em với, em load lis 102517_blkqty4 về autoad 2015 64 bit dùng win 7 64 bit. Nó hiện thị load ok. vào đánh lệnh thì không được.

Dùng lis 102517_blkqty4 này qua các máy khác phiên bản cad 2007 thi ok.

Mong cá bác trên điễn dàn giúp đỡ.

 

 

http://www.cadviet.com/upfiles/5/56747_102517_blkqty4.lsp

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ác bác giúp em với, em load lis 102517_blkqty4 về autoad 2015 64 bit dùng win 7 64 bit. Nó hiện thị load ok. vào đánh lệnh thì không được.

Dùng lis 102517_blkqty4 này qua các máy khác phiên bản cad 2007 thi ok.

Mong cá bác trên điễn dàn giúp đỡ.

 

 

http://www.cadviet.com/upfiles/5/56747_102517_blkqty4.lsp

Lisp này chạy ngon trên CAD2015 64bit nhé.

 

"đánh lệnh thì không được."  : nghĩa là sao?

Nếu không có thông tin gì khác thì đến thầy bói cũng pótay.

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  

×