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

[Nhờ chỉnh sửa]lisp tính tổng diện tích của bác Nguyen Hoanh

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

(defun c:udt (/ ss tong ham tmp tt)
  (setq
    ss (ssget '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "REGION")(0 . "CIRCLE")(0 . "ARC")(-4 . "OR>")))	
    tong 0.0
    ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))
    tmp (mapcar 'ham (ss2ent ss))  
    hstl 0.001
    tp 2
    tt (entget (car (entsel "\nChon text ket qua: ")))
    tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))
  )
  (entmod (subst (cons 1 (rtos (* (atof tong) hstl hstl) 2 tp)) (assoc 1 tt) tt))
)

(defun ss2ent(ss / sodt index 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)
)
(princ "\nUpdate Area - free lisp from cadviet.com")
(princ "\nUse UDT command to start!")
(vl-load-com) 

 

Lisp này tui đã dùng được hơn 4 năm rồi, không có gì phàn nàn về hiệu quả của nó, nhưng bây giờ muốn nhờ các bác chỉnh sửa 1 tí để phù hợp hơn với nhu cầu hiện giờ ah

 

Hiện giờ: mỗi khi ra kết quả, lisp chỉ hiển thị số diện tích. VD: 10,1

 

Yêu cầu: Hiển thị kết quả, sẽ hiển thị S=10,1 m2

 

Cám ơn các bác trướ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


(defun c:udt (/ ss tong ham tmp tt)
(setq
ss (ssget '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "REGION")(0 . "CIRCLE")(0 . "ARC")(-4 . "OR>")))
tong 0.0
ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))
tmp (mapcar 'ham (ss2ent ss))
hstl 0.001
tp 2
tt (entget (car (entsel "\nChon text ket qua: ")))
tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))
)
(entmod (subst (cons 1 (strcat "S = " (rtos (* (atof tong) hstl hstl) 2 tp) "M2")) (assoc 1 tt) tt))
)

(defun ss2ent(ss / sodt index 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)
)
(princ "\nUpdate Area - free lisp from cadviet.com")
(princ "\nUse UDT command to start!")
(vl-load-com)

Sửa:

 

(entmod (subst (cons 1 (rtos (* (atof tong) hstl hstl) 2 tp)) (assoc 1 tt) tt))

Thành:

(entmod (subst (cons 1 (strcat "S = " (rtos (* (atof tong) hstl hstl) 2 tp) "M2")) (assoc 1 tt) tt))

  • Vote tăng 2

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


(defun c:udt (/ ss tong ham tmp tt)

(setq

ss (ssget '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "REGION")(0 . "CIRCLE")(0 . "ARC")(-4 . "OR>")))

tong 0.0

ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))

tmp (mapcar 'ham (ss2ent ss))

hstl 0.001

tp 2

tt (entget (car (entsel "\nChon text ket qua: ")))

tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))

)

(entmod (subst (cons 1 (strcat "S = " (rtos (* (atof tong) hstl hstl) 2 tp) "M2")) (assoc 1 tt) tt))

)

 

(defun ss2ent(ss / sodt index 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)

)

(princ "\nUpdate Area - free lisp from cadviet.com")

(princ "\nUse UDT command to start!")

(vl-load-com)

Sửa:

 

(entmod (subst (cons 1 (rtos (* (atof tong) hstl hstl) 2 tp)) (assoc 1 tt) tt))

Thành:

(entmod (subst (cons 1 (strcat "S = " (rtos (* (atof tong) hstl hstl) 2 tp) "M2")) (assoc 1 tt) tt))

 

cám ơn bác nhiều nhiều, mấy hôm đi công tác hôm nay mới vào cadviet đượ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

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  

×