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

Các bác sửa hộ em cái lisp tính diện tích và chu vi

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

sau khi tìm tòi mình tìm được 1 lisp tính diện tích rất hay nhưng lại kg thực sự đúng lắm

 

(defun c:dt()

;tinh dien tich 1 hinh khep kin

(setq p (getpoint "Chon khu vuc can tinh :"))

(command "boundary" p "")

(command "area" "e" "l")

(command "erase" "l" "" )

(command "color" "bylayer")

(command "text" "m" p pause "0" (strcat "%%u" "Dien Tich = " (rtos (getvar "area" ) 2 2) " m2" ))

(command "redraw" )

)

 

nó ra kết quả đúng nhưng không tự lùi về 6 số....

 

rất cần các pro sửa lại dùm lisp cho đúng kết quả tự lùi về 6 số sau dấu chấm để tính đơn vị theo m2....

 

 

Tiện thể các pro nào biết sửa nó thành hiện cả chu vi vùng luôn thì tốt quá...thank các bác trước :D

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ó ra kết quả đúng nhưng không tự lùi về 6 số....

 

Bạn sửa chỗ này

(rtos (getvar "area" ) 2 2) -> (rtos (/ (getvar "area" ) 1000000) 2 2)

Chú ý nếu diện tích của bạn < 0.01 m2 thì nó sẽ báo = 0.00

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

sau khi tìm tòi mình tìm được 1 lisp tính diện tích rất hay nhưng lại kg thực sự đúng lắm

 

 

 

nó ra kết quả đúng nhưng không tự lùi về 6 số....

 

rất cần các pro sửa lại dùm lisp cho đúng kết quả tự lùi về 6 số sau dấu chấm để tính đơn vị theo m2....

 

 

Tiện thể các pro nào biết sửa nó thành hiện cả chu vi vùng luôn thì tốt quá...thank các bác trước :D

Hi.Lisp này ngắn gọn nhưng nhưng có nhiều nhược điểm nên mình biết rồi mà ko dùng:1. Chỉ tính đúng ở tỉ lệ 1/1. 2.Chỉ tính cho 1 hình kín,nếu bạn pick nhiều hình nó ko tính tổng cho bạn.Mình cũng mới tự mày mò học lisp thôi nên tận dụng lisp của diễn đàn rồi biến đổi thành của mình cho phù hợp công việc. Ai thấy giông giống của mình thì xin bỏ qua nha.Lisp mình đổi như sau:( đơn vị vẽ là mm kết quả là m2)

;------------------------------------tinh dien tich (dti)-----------------------------------

(Defun c:dti()

(setvar "cmdecho" 0)

(initget "Heso Do")

(command "style" "DT" "vn-abc.shx" "" "0.8" "0.6" "" "" "")

(if (not tpo) (setq tpo 1))

(setq SC (getint (strcat "\n Nhap ti le <" (itoa tpo) "> :")))

(if (not SC) (setq SC tpo) (setq tpo SC))

(if (not tp1) (setq tp1 2))

(setq tp (getint (strcat "\n Nhap So chu so thap phan <" (itoa tp1) "> :")))

(if (not tp) (setq tp tp1) (setq tp1 tp))

(setq pt (getpoint "\n chon diem:"))

(if (= pt "Heso")

(progn

(setq am (getreal "\n loccoc259.co.cc: "))

(if (and (null am) (/= ac 0))

(setq am ac)

)

(setq pt (getpoint "\n Chon diem: "))

)

(setq ac am))

 

(if (or (= am 0) (null am)) (setq am 1))

(setq s 0)

(progn

; (setq pt (getpoint "\n Chon diem: "))

(while pt

(setq entold (cdr (assoc 5 (entget (entlast)))))

(command "boundary" pt "")

(setq entnew (cdr (assoc 5 (entget (entlast)))))

(if (/= entold entnew)

(progn

(setq entnew (entget (entlast)))

(if (assoc 62 entnew)

(setq entnew (subst (cons 62 (+ 3 (cdr (assoc 62 entnew)))) (assoc 62 entnew) entnew))

(setq entnew (append entnew (list (cons 62 (+ 3 (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 8 entnew))))))))))

)

(entmod entnew)

(Command "area" "o" (entlast))

(setq s (+ s (getvar "area")))

(setq pt (getpoint "\n Chon diem: "))

(entdel (entlast))

)

(progn

(princ "chon diem sai")

(setq pt (getpoint "\n Chon diem: "))

)

)

)

 

)

 

"(command "osnap" "intersection")"

 

(princ (* s am))

(princ)

(command "style" "DT" "vn-abc.shx" "" "0.85" "0.6" "" "" "")

(setq pt1 (getpoint "Chon vi tri ghi dien tich: "))

(setq dt1 (* s am SC SC))

(setq dt (/ dt1 1000000))

(setq dt (strcat (rtos dt 2 tp)))

(command "text" pt1 2 0 (strcat dt))

)

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

sau khi tìm tòi mình tìm được 1 lisp tính diện tích rất hay nhưng lại kg thực sự đúng lắm

 

 

 

nó ra kết quả đúng nhưng không tự lùi về 6 số....

 

rất cần các pro sửa lại dùm lisp cho đúng kết quả tự lùi về 6 số sau dấu chấm để tính đơn vị theo m2....

 

 

Tiện thể các pro nào biết sửa nó thành hiện cả chu vi vùng luôn thì tốt quá...thank các bác trước :D

Hề hề hề,

Trước hết mong bạn hiểu rằng cái lisp trên trả về diện tích của vùng chọn tính theo đơn vị hiện hành của bản vẽ. Do vậy việc bạn muốn hiển thị nó ở hệ đơn vị nào thì hoặc bạn làm như bác Phamngoctukts đã chỉ hoặc là bạn hãy đổi hệ đơn vị của bản vẽ và thay đổi tỷ lệ vẽ cho phù hợp.

Để có được chu vi của vùng chọn, bạn hãy bổ sung dòng code sau:

(command "text" "m" p pause "0" (strcat "%%u" "Chu vi = " (rtos (getvar "perimeter" ) 2 2) " mm" ))

vào dưới dòng code:

(command "text" "m" p pause "0" (strcat "%%u" "Dien Tich = " (rtos (getvar "area" ) 2 2) " mm2" ))

Lưu ý rằng bạn có thể thay đổi đơn vị đo của chu vi bằng cách tương tự như đã nói trên.

 

Hy vọng bạn hài lò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

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  

×