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

[Yêu cầu] lisp đếm dimension

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

mình cần một lisp dùng để thống kê dimension có tác dụng như lệnh bcount dùng để thống kê block. ví dụ mình muốn thông kê các đuờng dim150 theo chiều dài khác nhau thì sau khi dùng lisp se có bảng thống kê hiện ra như sau : Dim150 D1180.......5

Dim150 D600 .......7

ai biết có lisp nào có tác dụng như thế hoặc tuơng tự như thế chỉ cho mình với. Xin cảm ơ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 chưa biết có cái lisp nào như thế, nên đành chọc ngoáy cái lisp cũ của bác gia_bach để post lại cho bạn vậy :

 

(defun c:tkd (/ lst msp pt ss str txtsiz lstDSTyle DSTyle)
 (vl-load-com)
 (setq lstDStyle (table "dimstyle")
	pt (getpoint "\nDiem dat:" )
	txtsiz (* (getvar "dimtxt")(getvar "dimscale")))
 (foreach DStyle lstDStyle
 (if (setq ss (ssget "X" (list (cons 0 "DIMENSION")(cons 3 DStyle))))
   (progn
     (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
       (if (= (cdr(assoc 1 (entget e))) "")
		(setq str (cdr(assoc 42 (entget e))))
		(setq str (atof(cdr(assoc 1 (entget e)))))	
	)
	(setq str (strcat "D" (rtos str 2 0)))
       (if (not (assoc str lst))
         (setq lst (cons (cons str 1) lst))
         (setq lst (subst (cons str (1+ (cdr (assoc str lst))))
                          (assoc str lst) lst)))      )
     (setq lst (vl-sort lst '(lambda (x y) (< (car x) (car y))))            
           msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
     (vla-addtext msp DStyle (vlax-3d-point (polar pt 180 (* 8 txtsiz))) txtsiz )	  
  (foreach e lst
       (vla-addtext msp (car e) (vlax-3d-point pt) txtsiz )
       (vla-addtext msp (cdr e) (vlax-3d-point (polar pt 0 (* 8 txtsiz))) txtsiz )
       (setq pt (polar pt (/ pi -2) (* 1.5 txtsiz)))  ))
   ;(princ (strcat "\nKhong co Text trong DimsTyle :" DStyle))
)
(setq pt (polar pt (/ pi -2) (* 10 txtsiz)))
)
 (princ))


(defun table (s / d r)
(while (setq d (tblnext s (null d)))
(setq r (cons (cdr (assoc 2 d)) r))
)
)

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

hi All.

lisp chạy rất tốt, nhưng KETXU có thể viết lại là thống kê các Dim được chọn có được không? cái này thống kê cả bản vẽ nên nhiều lúc nhiều quá!

Thanks!

Hề hề hề,

bạn bỏ tham số "x" trong hàm (setq ss (ssget "X" (list (cons 0 "DIMENSION")(cons 3 DStyle))) đi là Ok

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

A ơi! Cái này rất hay nhưng tiếc quá e k dùng đc. e bỏ "X" rồi nhưng nó như thế này:

 

Command: TKd

Diem dat:

Select objects: Specify opposite corner: 0 found

Select objects: Specify opposite corner: 0 found, 0 total

Select objects: Specify opposite corner: 100 found, 100 total

Select objects:

Select objects: *Cancel*

; error: Function cancelled

Command:

Có Dim nó tìm đc, có dim k tìm đc. Nói chung là chọn các dim k đc như ý. A có thể xem lại giúp e đc k?

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

Lạ vậy. Bạn post file kèm theo khoanh vùng cái dim mà bạn k chọn đc mọi người xem sao

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 đây. Chắc là mình không giúp gì cho bạn được rồi. K phải lisp nó không làm đúng mà là nó làm rất đúng, chẳng qua bạn không biết hoặc không đọc yêu cầu chủ topic đó thôi. Lisp trên mình viết để liệt kê toàn bộ dim trên bản vẽ theo Dimstyle

 

QUá trình làm cửa lisp là duyệt qua từng Dimstyle và tự động tìm các dim có style tương ứng trên toàn bản vẽ để liệt kê.

 

Nếu bạn bỏ chữ "x" đi, có nghĩa là bạn phải tự quét chọn từng dim ứng với từng dimstyle.

(ví dụ file của bạn có 2 dimstyle là 1,2, thì nếu bỏ chữ x đi, bạn sẽ phải chọn thủ công 2 lần, lần 1 thì chỉ chọn được những thằng dim ở dimstyle 1, lần 2 thì mới chọn được những thằng ở Dimstyle 2...)

 

Cái đám dim của bạn nằm ở cuối danh sách thì quét mệt nghỉ mới tới lượt.

Bạn hiểu ý k ^^?

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

Vâng! Vậy thì a có thể sửa lại cho e thế này đc k? Vì e k biết về lập trình Alisp. Có tác dụng đếm dim trong vùng lựa chọn bất kì k phân biệt dim style mà đếm dim rồi thống kê theo giá trị của dim đó.Thao tác và bảng thống kê tương tự như cách trên. E cám ơn a Ketxu và mọi người rất nhiều vì sự nhiệt tình giúp đỡ của các anh.

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

Vâng! Vậy thì a có thể sửa lại cho e thế này đc k? Vì e k biết về lập trình Alisp. Có tác dụng đếm dim trong vùng lựa chọn bất kì k phân biệt dim style mà đếm dim rồi thống kê theo giá trị của dim đó.Thao tác và bảng thống kê tương tự như cách trên. E cám ơn a Ketxu và mọi người rất nhiều vì sự nhiệt tình giúp đỡ của các anh.

Hề hề hề,

Thử bỏ cái (cons 3 Dstyle) đi coi nó được cái gì hè???

Như vậy nó sẽ cho chọn tất cả những cái chi là dimensions theo đúng nghĩa của nó. Còn những chú mà bạn edit rồi thì chưa chắc nghen. Hãy thử rồi báo kết quả.

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

Thank a Bình nhiều! lisp làm vc theo ý e rồi, đếm tất cả các dim theo mình lựa chọn và thống kê theo giá trị. Chỉ có 1 điều là nó thể hiện Dimstyle k đúng. Khi e chọn vùng đếm có nhiếu Dimstyle thì nó đếm tất các dim nhưng lại chỉ hiện lên 1 kiểu dimstyle. Thứ 2 là khi đếm nó tự động làm tròn giá trị Dim. A có thể sửa lại thành như thế này k ah: Đếm tất cả các dim trong vùng lựa chọn( kể cả những dim đã edit), và thống kê theo giá trị của nó chứ k làm tròn, nếu có nhiều kiểu dimstyle thì hiện đúng kiểu dimstyle. Nếu lisp làm vc như vậy thì quá tuyệt vời. Mong các anh sơm giúp đỡ.

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

e xem cái của a Doan Van Ha từ trc rồi. Cũng hay nhưng có 1 vấn đề là e để dimension style manager làm tròn số thập phân thì lisp lại k đưa ra kết quả hiển thị trên dim mà đếm theo giá trị khi chưa làm tròn -> cái này k theo ý em. E muốn nó để nguyên giá trị của dim đã đo đc ( kể cả dim đã edit), và đếm theo giá trị đó mà thôi.

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  

×