Chuyển đến nội dung
Diễn đàn CADViet
Bommak

[Đã xong] Lisp tính tổng chiều dài các đối tượng

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

Bác Hoành có thể giúp em cách tính tổng chiều dài của đối tượng Mline được không ạ. Em làm được với line, arc, circle, poly/lwpoly... nhưng với Mline thì em không làm được.

Em cảm ơn bác..

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 Hoành có thể giúp em cách tính tổng chiều dài của đối tượng Mline được không ạ. Em làm được với line, arc, circle, poly/lwpoly... nhưng với Mline thì em không làm được.

Em cảm ơn bác..

 

Cách tính chiều dài của MLINE khá giống với LWPOLYLINE. Tuy nhiên ACAD cấu trúc dữ liệu hơi khác so với LWPOLYLINE một chút. Với LWPOLYLINE, tất cả các đỉnh đều có dạng (10 x y z), còn trong MLINE chỉ có đỉnh đầu tiên có dạng (10 x y z) còn các đỉnh sau đó đều có dạng (11 x y z). Sau đây là lệnh DAIMLINE để tính tổng chiều dài các MLINE được chọn:

(defun c:daimline ( / ss sdt tongdai index)
 (defun daione	(ent / pcu daiml p)
   (defun adp (pt)
     (cond ((= 10 (car pt))
     (setq pcu (cdr pt)
	   daiml 0.0
     )
    )
    ((= 11 (car pt))
     (setq
       p       (cdr pt)
       daiml (+ daiml (distance p pcu))
       pcu     p
     )
    )
     )
   )
   (setq tt	  (entget ent))
   (foreach pt	tt
     (adp pt)
   )
   daiml
 )
 (setq	ss	(ssget '((0 . "MLINE")))
sdt	(cond
	  (ss (sslength ss))
	  (t 0)
	)
index	0
tongdai	0.0
 )
 (repeat sdt
   (setq ent	  (ssname ss index)
  index	  (1+ index)
  tongdai (+ tongdai (daione ent))
   )
 )
 (princ (strcat "\nTong chieu dai cac MLine tren la: "
	 (rtos tongdai 2 2)
 )
 )
 (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
Cách tính chiều dài của MLINE khá giống với LWPOLYLINE. Tuy nhiên ACAD cấu trúc dữ liệu hơi khác so với LWPOLYLINE một chút. Với LWPOLYLINE, tất cả các đỉnh đều có dạng (10 x y z), còn trong MLINE chỉ có đỉnh đầu tiên có dạng (10 x y z) còn các đỉnh sau đó đều có dạng (11 x y z). Sau đây là lệnh DAIMLINE để tính tổng chiều dài các MLINE được chọn:

(defun c:daimline ( / ss sdt tongdai index)
 (defun daione	(ent / pcu daiml p)
   (defun adp (pt)
     (cond ((= 10 (car pt))
     (setq pcu (cdr pt)
	   daiml 0.0
     )
    )
    ((= 11 (car pt))
     (setq
       p       (cdr pt)
       daiml (+ daiml (distance p pcu))
       pcu     p
     )
    )
     )
   )
   (setq tt	  (entget ent))
   (foreach pt	tt
     (adp pt)
   )
   daiml
 )
 (setq	ss	(ssget '((0 . "MLINE")))
sdt	(cond
	  (ss (sslength ss))
	  (t 0)
	)
index	0
tongdai	0.0
 )
 (repeat sdt
   (setq ent	  (ssname ss index)
  index	  (1+ index)
  tongdai (+ tongdai (daione ent))
   )
 )
 (princ (strcat "\nTong chieu dai cac MLine tren la: "
	 (rtos tongdai 2 2)
 )
 )
 (princ)
)

 

 

Em cảm ơn bác Hoành nhiều nhé. Em tính chiều dài LWPOLYLINE bằng lệnh Area sau đó truy xuất biến hệ thống PERIMETER. Em đang cố gắng học nên chưa thành thạo trong việc xử lý Record.

Chúc bác luôn vui.

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 cảm ơn bác Hoành nhiều nhé. Em tính chiều dài LWPOLYLINE bằng lệnh Area sau đó truy xuất biến hệ thống PERIMETER. Em đang cố gắng học nên chưa thành thạo trong việc xử lý Record.

Chúc bác luôn vui.

 

Nếu để tính chiều dài bằng lệnh kết hợp biến hệ thống, bạn nên dùng lệnh Lengthen. Lệnh lengthen ngoài tính được chiều dài của polyline, circle còn tính được chiều dài của line, arc, spline. Cách dùng giống hệt như với lệnh AREA.

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
Nếu để tính chiều dài bằng lệnh kết hợp biến hệ thống, bạn nên dùng lệnh Lengthen. Lệnh lengthen ngoài tính được chiều dài của polyline, circle còn tính được chiều dài của line, arc, spline. Cách dùng giống hệt như với lệnh AREA.

 

 

Quá hay, bác đúng là Master. Từ trước đến giờ em chưa bao giờ dùng cái lệnh Lengthen này cả. Hỏi bác 1 câu hỏi mà lại học thêm được mấy "võ" liền, lãi quá bác ạ... :ph34r: :s_dead:

  • 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

Dear Mr 

Nguyen Hoanh

hiện giờ e có file cad cần tính tổng chiều dài đoạn thẳng Mline. Nhưng lisp của bác chưa

chia ra tính tổng cho từng loại đường kính ống (ống 42,60,90,110) vậy bác có thể nâng cấp lisp cũ lên để chia ra cho e được không ạ.

thank bác trước nhé :) 

 

File đính kèm ạ

 

 http://www.cadviet.com/upfiles/7/17104_Do_chiEu_dAi_mline_tUng_kIch_thUOc_426090110.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

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

×