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

Xin Lisp Thống Kê Chiều Dài Mline

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

Nhờ các bạn viết giúp mình lisp thống kê các đường Mline có đủ các thuộc tính sau

+ Mline  : Linestyle

+Mline  : Kích thước đường Mline

+ Mline : Layer của duong Mline

Và lisp có thể giúp mình có thêm khả năng : tính tổng chiều dài Mline theo các tính chất Linestyle, Kích thuoc, layer

Thanks

 

  • 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

-Lisp tính tổng chiều dài mline theo style, scale, layer. Tên lệnh DML

-Về lý thuyết thì thống kê các đường Mline có đủ các thuộc tính là làm được nhưng đề ko rỏ nên không giải.

(defun c:dml ( / txt)

 (initget "ST LA SA")
 (setq txt (getkword "\nLoc MLINE theo [STyle/LAyer/SAcle] <ST>: "))
 (cond
   ((not txt)
   (setq kieu " thuoc STYLE: <") (setq mdxf 2))
   ((= "ST" txt)
   (setq kieu " thuoc STYLE: <") (setq mdxf 2))
   ((= "LA" txt)
   (setq kieu " thuoc LAYER: <") (setq mdxf 8))
   ((= "SA" txt)
   (setq kieu " co SCALE: <") (setq mdxf 40))
 )

(setq ketqua (cdr (assoc mdxf (entget (car (chonmotmline))))))
(setq ss (ssget (list (cons 0 "MLINE") (cons mdxf ketqua))))
  (setq tot_len 0.0)
  (setq sml (sslength ss))

  (while (> (sslength ss) 0)
    (setq e_name (ssname ss 0))
    (setq e_record (entget e_name))
    (setq e_type (cdr (assoc '0 e_record)))
    (cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
	   (command "lengthen" e_name "")
	   (setq tot_len (+ tot_len (getvar "PERIMETER")))
	   (ssdel e_name ss)
	  )
	  ((wcmatch e_type "MLINE") (add_mline))
	  (e_type (ssdel e_name ss))
    )
  )

  (cond ((= "SA" txt) (setq ketqua (rtos ketqua 2 2)) ))
  (prompt (strcat "\nTim thay: " (itoa sml) " doi tuong MLINE" kieu ketqua "> tong chieu dai=" (rtos tot_len 2 2)))


(princ))
;;;;;;;;;;;;;;
(defun chonmotmline ( / dchon)
(setq dchon (entsel "\nChon Mline chuan:"))
(while
(or
(null (car dchon))
(and (/= "MLINE" (cdr (assoc 0 (entget (car dchon)))))
)
)
(princ "\nDoi tuong khong phai MLINE. Chon lai !")
(setq dchon (entsel))
)
dchon)
;;;;;;;;;;;;;;
(defun add_mline ()
  (foreach e_record_sub	e_record
    (cond ((= 10 (car e_record_sub))
	   (setq pt1	   (cdr e_record_sub)
		 mline_len 0.0
	   )
	  )
	  ((= 11 (car e_record_sub))
	   (setq pt2	   (cdr e_record_sub)
		 mline_len (+ mline_len (distance pt2 pt1))
		 pt1	   pt2
	   )
	  )
    )
  )
  (setq tot_len (+ tot_len mline_len))
  (ssdel e_name ss)
)

(lisp có sử dụng phần tính tổng mline của kexu)

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 cho em hỏi. Có list nào lọc được các đường MLine theo Scale của Mline không. Hiện tại em tính tổng bằng Mline bằng list bên trên đôi khi bị kết quả sai vì những đường Mline không song song với trục tung hoặc trục hoành.

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
6 giờ trước, unbroken đã nói:

Cảm ơn bạn. Làm thế nào để có được cái j đó bạn đang dùng

 

Bạn Add Zalo mình nhé: 0986370918

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  

×