Đến nội dung


Hình ảnh
- - - - -

[NHỜ CHỈNH SỬA] lisp tính cao độ (cho kết quả sai khi số ở dạng 0,00)


  • Please log in to reply
3 replies to this topic

#1 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 25 February 2014 - 10:21 PM

http://www.cadviet.c..._cao_do__h1.lspNhờ các Member của Cadviet.com giúp mình Lisp tính cao độ
(Vui lòng xem file đính kèm)
- Mô tả Lisp
1. Gõ lệnh : h1
2. Pick Chọn điểm đã biết cao độ
3. Pick chọn giá trị cho điểm vừa chọn
4. Pick chọn điểm cần tìm cao độ
5. Kết quả :
 
Nếu ở bước (3), Số được chọn ở dạng 0.00 thì kết quả trả về là hoàn toàn chính xác.
Nhưng nếu số được chọn ở dạng 0,00 thì kết quả không chính xác
khác nhau ở dấu Chấm (.) và dấu Phảy (,)
 
6. Đã tìm cách thay đổi đấu Chấm(.) dấu Phảy (,) Trong Control Panel của Windows nhưng không khắc phục được
? Nhờ các member khắc phục giùm !
Thanks !
 
File ví dụ : http://www.cadviet.c..._vi_du__tbv.dwg
File LISP (Lâu rồi mình mới quay trở lại cadviet.com, mình chưa tìm ra cách upload file lisp, có gì sai mong BQT thông cảm giùm, Thanks !)

(defun c:h1 ( / pt p1 p01 ent ecopy elev elev1 offset etype txth)
(setvar "osmode" 1) (command "ucs" "w")
(setq pt (getpoint "\nChon diem da biet cao do: ")
ent (entget (car (entsel "\nChon gia tri cao do cho diem vua xong: ")))
etype (cdr (assoc 0 ent))
txth (cdr (assoc 40 ent)))
(if (/= etype "TEXT")
(progn
(princ "\nGia tri ban chon khong phai la so")
(exit))
(setq elev (atof (cdr (assoc 1 ent)))))
(command "layer" "m" "UNSUITABLE" "")
(while (setq p1(getpoint "\nChon diem can tim cao do"))
(setq elev1 (+ elev (- (cadr p1) (cadr pt)))
offset (abs(- (car p1) (car pt)))
p01 (polar p1 (* 3.0 (/ pi 2)) txth)
p01 (polar p01 pi (* 0.9 txth))
ecopy (list (assoc 0 ent) (cons 100 "AcDbEntity") (cons 8 "UNSUITABLE") (cons 100 "AcDbText") (assoc 10 ent) (assoc 40 ent)
(cons 1 (strcat "" (rtos elev1 2 2))) (assoc 50 ent) (assoc 41 ent) (assoc 51 ent) (assoc 7 ent) (cons 71 0) (cons 72 1)
(cons 11 p1) (list 210 0.0 0.0 1.0) (cons 100 "AcDbText") (cons 73 2)))
(entmake ecopy)
(princ "\nNhan ESC hoac SPACE bar de huy lenh"))
(end_task))

 


  • 0

#2 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 02 March 2014 - 10:24 AM

Ai giúp mình với !


  • 0

#3 vantuan18nd

vantuan18nd

    biết vẽ rectang

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

Đã gửi 07 March 2014 - 09:10 PM

Không bít mình diễn đạt thế được chưa nhỉ

Khi chạy lisp :

+ Nếu số ở dạng dấu phẩy "," thì kết quả sai (VD: 11,20-0,20; Kết quả đúng sẽ là 11,00 >> Nhưng Lisp lại cho kết quả = 11 - 0,20 = 10,8)

Ai giúp với :((

????? Help


  • 0

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 08 March 2014 - 12:31 AM

Không bít mình diễn đạt thế được chưa nhỉ

Khi chạy lisp :

+ Nếu số ở dạng dấu phẩy "," thì kết quả sai (VD: 11,20-0,20; Kết quả đúng sẽ là 11,00 >> Nhưng Lisp lại cho kết quả = 11 - 0,20 = 10,8)

Ai giúp với :((

????? Help

Hề hề hề,

Vậy là bạn biết sửa rồi đó. Chỉ đơn giản là hàm (atof ....) trong lisp không chịu nhận dấu phẩy mà thôi.

Do vậy cách sửa hết sức đơn giản là thay dấu phẩy bằng dấu chấm trên bản vẽ của bạn. Có thể bạn sửa thủ công mà cũng có thể bạn xài lisp cho nó ....... oai. Việc này bạn có thể sử dụng các lệnh của CAD mà làm , nhanh không thua gì lisp cả. đó là lệnh find and replace kết hợp với wild card characters là ok.

Hy vọng bạn sẽ sửa ngon.


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