Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
vantuan18nd

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

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

vantuan18nd    4

http://www.cadviet.com/upfiles/3/103675_tinh_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.com/upfiles/3/103675_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))

 

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
vantuan18nd    4

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

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
phamthanhbinh    3.123

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.

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  

×