Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
4 replies to this topic

#1 thanhdatkts

thanhdatkts

    biết vẽ line

  • Members
  • PipPip
  • 24 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 26 February 2011 - 11:10 AM

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
  • 0

#2 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 26 February 2011 - 11:25 AM

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
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#3 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 26 February 2011 - 01:03 PM

Edit: tớ post nhầm topic :D
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#4 tski259

tski259

    biết vẽ pline

  • Members
  • PipPip
  • 66 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 26 February 2011 - 02:20 PM

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))
)
  • 0

#5 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 26 February 2011 - 02:43 PM

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....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.