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

[Hỏi] Lisp Tính Cao Độ

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

trước đây em có nhờ anh bạn viết hộ em cái lisp tính cao độ nhưng sau một thời gian sửa dụng em đã phát hiện ra các lỗi sau :

- khi sử ap cái lisp này vào thì nó chống với các lisp khác không cho chạy lệnh khâc , ví dụ như em gán layiso= phím 1 , layon= phím 2 , layoff=phím 3 . thì sau khi chạy líp thì em ấn 1,2,3 đều vô dụng .

- khi thay đổ tỷ lệ thì em cứ phải mở cái lip bằng note thay phần sc = 0,xx

vậy xin nhờ các bác sửa dùm em 2 cái lỗi này hộ em . thêm cho em cái phần hỏi tỷ lệ bản vẽ khi chạy lệnh .

mà cái lip này rất hữu dụng trong công việc của em mong các bác giúp đỡ .

thank các bác rất nhiều.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq sc 0.01)
(setvar "dimzin" 0)
(defun c:os () (setvar "osmode" 545))
;;;;;===============================
;; Silent load.
(princ)
(defun c:e1 () (command "erase" "all" ""))
(defun c:+++++ ()  (command "'.zoom" "8x"))
(defun c:++++++ ()  (command "'.zoom" "16x"))
(defun c:++++ ()  (command "'.zoom" "4x"))
(defun c:+++ ()  (command "'.zoom" "2x"))
(defun c:++ ()  (command "'.zoom" "1.5x"))
(defun c:+ ()  (command "'.zoom" "1.2x"))
(defun c:- ()  (command "'.zoom" "0.9x"))
(defun c:-- ()  (command "'.zoom" "0.5x"))
(defun c:--- ()  (command "'.zoom" "0.2x"))
(defun c:---- ()  (command "'.zoom" "0.1x"))
(defun c:----- ()  (command "'.zoom" "0.05x"))
(defun c:------ ()  (command "'.zoom" "0.01x"))
(defun c:1 () (ssget) (command "change" "p" "" "p" "c" "1" ""))
(defun c:2 () (ssget) (command "change" "p" "" "p" "c" "2" ""))
(defun c:3 () (ssget) (command "change" "p" "" "p" "c" "3" ""))
(defun c:4 () (ssget) (command "change" "p" "" "p" "c" "4" ""))
(defun c:5 () (ssget) (command "change" "p" "" "p" "c" "5" ""))
(defun c:6 () (ssget) (command "change" "p" "" "p" "c" "6" ""))
(defun c:7 () (ssget) (command "change" "p" "" "p" "c" "7" ""))
(defun c:8 () (ssget) (command "change" "p" "" "p" "c" "8" ""))
(defun c:9 () (ssget) (command "change" "p" "" "p" "c" "9" ""))
(defun c:10 () (ssget) (command "change" "p" "" "p" "c" "10" ""))
(defun c:11 () (ssget) (command "change" "p" "" "p" "c" "11" ""))
(defun c:0 () (ssget) (command "change" "p" "" "p" "c" "BY LAYER" ""))
;**********************************************************************
(defun c:goc ()
 (setvar "cmdecho" 0)
 ;(setq osm (getvar "osmode"))
 (if (= sc nil)(setq sc (getreal (strcat"\nChon ty le ve (=kt ve/kt Autocad):"))))
 (prompt "\n*****Chu y: Ty le hien tai la*****:")(princ sc)
 ;(if (/= sc2 nil)(setq sc sc2))
 (command ".zoom" "e")
 ;(setq sspl (SSGET "c" '(10.5 20.25) '(10.5 27.5) (LIST(CONS 0 "lwpolyline"))));su dung khi ban ve co 1 cn o toa do co dinh
 ;(if (= th nil) (setq th (ssget "w" '(10.5 19.25 0) '(11.5 18.00 0) (list(cons 0 "TEXT")))))
 (command "zoom" "p")
 (if (and (= a nil)(/= sspl nil))(setq a (cdr(assoc 10 (entget (ssname sspl 0))))))
 (IF (= a nil)
(setq a (Getpoint "\n Chon mot diem lam chuan (co cao do):"))
(progn
 	(setq kitu nil)
 	(initget "Co Khong")
 	(setq kitu (getkword "\n Ban co chon lai diem chuan khong?[Co/Khong]:<K>"))
 	(If (= kitu "Co")(setq a (Getpoint "\n Chon lai diem lam chuan (co cao do):")))
 	)
)
 ;(if (and(= nil g)(/= nil th)) (setq g (atof (cdr (ASSOC 1 (ENTGET (SSNAME th 0)))))))
 (IF (= nil g)
(progn
 	(prompt "Khong co cao do tai vi tri can tim!")
 	(setq g (Getreal "\n Nhap cao do diem chuan [bang ban phim/Chon tren man hinh]:<Chon>" ))
 	(if (= nil g)
(progn
  (setq sscd (entsel "\n Moi ban chon cao do tren man hinh:"))
  (setq g (atof (cdr (assoc 1 (entget (car sscd))))))
  (prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:"))
  )
)
 	)
(If(= kitu "Co")
 	(progn
(setq g (Getreal "\n Nhap lai cao do diem chuan [bang ban phim/Chon tren man hinh]:<Chon>" ))
(if (= nil g)
  (progn
(setq sscd (entsel "\n Moi ban chon lai cao do tren man hinh:"))
(setq g (atof (cdr (assoc 1 (entget (car sscd))))))
(prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:"))
  )
  )
)
 	)
)
 )

;;============Tinh cao do khi biet cao do diem chon lam c:goc====================
(defun c:tcd ()
 (PROMPT "\n(Lenh tinh toa do & K/C 1 diem bat ky)")
 (c:goc)
 (setq xa (* sc (car a)))
 (setq ya (* sc (cadr a)))
 (setq l1 xa)
 (setq l3 ya)
 (While
(setq b (Getpoint "\n Chon diem can tinh:"))
(setq xb (* sc (car B)))
(setq x (- xb xa))
(setq yb (* sc (cadr B)))
(setq y (+ g (- yb ya)))
(setq ypr (rtos y 2 3))
(setq l2 xb)
(setq l4 yb)
(setq dy (- l4 l3))
(setq l3 l4)
(setq l (- l2 l1))
(setq ypr1 (rtos L 2 3))
(setq l1 l2)
(Prompt "\nCao do diem vua chon:")  (princ (rtos y 2 3))
(Prompt "\nK/C x le:")  (princ (rtos l 2 3))
(Prompt " _ K/C x den diem goc:")  (princ (rtos x 2 3))
(if (= 0 l)
 	(Prompt " _ Do doc doan vua chon: E%")
 	(Progn
(setq dd (* 100 (/ dy l)))
(Prompt " _ Do doc doan vua chon:")(princ (rtos dd 2 3))(princ "%")
)
 	)

;(setq pt2 (getpoint "\nDiem ghi cao do vua tinh duoc :"))
;(command "TEXT" pt2 "" "90" ypr)
;(setq pt3 (getpoint "\nDiem ghi K/C le vua tinh duoc :"))
;(command "TEXT" pt3 "" "90" ypr1)
;(setq a '(0 0 0) g 0)
(setq thchon (nentselp"\nChon text can thay the:"))
(if (/= nil thchon)
 	(progn
(setq ens (car thchon))
(COMMAND "CHANGE" ens "" "" "" "" "" ""(rtos y 2 2))
(COMMAND "CHANGE" ens  "" "p" "c" "6" "")
)
 	)
(princ)
)
 )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  • Vote tăng 1

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

Lisp này đã gán các lệnh 0 -> 11 thành các lệnh đổi màu tập chọn, bạn dùng mà không biết tí tẹo tèo teo nào về lisp thì cũng đáng buồn đây.

Lisp sửa :

(setvar "dimzin" 0)
(defun c:os () (setvar "osmode" 545))
;;;;;===============================
;; Silent load.
(princ)
(defun c:e1 () (command "erase" "all" ""))
(defun c:+++++ ()  (command "'.zoom" "8x"))
(defun c:++++++ ()  (command "'.zoom" "16x"))
(defun c:++++ ()  (command "'.zoom" "4x"))
(defun c:+++ ()  (command "'.zoom" "2x"))
(defun c:++ ()  (command "'.zoom" "1.5x"))
(defun c:+ ()  (command "'.zoom" "1.2x"))
(defun c:- ()  (command "'.zoom" "0.9x"))
(defun c:-- ()  (command "'.zoom" "0.5x"))
(defun c:--- ()  (command "'.zoom" "0.2x"))
(defun c:---- ()  (command "'.zoom" "0.1x"))
(defun c:----- ()  (command "'.zoom" "0.05x"))
(defun c:------ ()  (command "'.zoom" "0.01x"))
;**********************************************************************
(defun c:goc ()
 (setvar "cmdecho" 0)
 ;(setq osm (getvar "osmode"))
 (or sc (setq sc 0.01))
 (setq sc (cond ((getreal (strcat "\nTi le: < " (rtos sc 2 2) " > :")))(sc)))
 (prompt "\n*****Chu y: Ty le hien tai la*****: ")(princ sc)
 ;(if (/= sc2 nil)(setq sc sc2))
 (command ".zoom" "e")
 ;(setq sspl (SSGET "c" '(10.5 20.25) '(10.5 27.5) (LIST(CONS 0 "lwpolyline"))));su dung khi ban ve co 1 cn o toa do co dinh
 ;(if (= th nil) (setq th (ssget "w" '(10.5 19.25 0) '(11.5 18.00 0) (list(cons 0 "TEXT")))))
 (command "zoom" "p")
 (if (and (= a nil)(/= sspl nil))(setq a (cdr(assoc 10 (entget (ssname sspl 0))))))
 (IF (= a nil)
(setq a (Getpoint "\n Chon mot diem lam chuan (co cao do):"))
(progn
  (setq kitu nil)
  (initget "Co Khong")
  (setq kitu (getkword "\n Ban co chon lai diem chuan khong?[Co/Khong]:<K>"))
  (If (= kitu "Co")(setq a (Getpoint "\n Chon lai diem lam chuan (co cao do):")))
  )
)
 ;(if (and(= nil g)(/= nil th)) (setq g (atof (cdr (ASSOC 1 (ENTGET (SSNAME th 0)))))))
 (IF (= nil g)
(progn
  (prompt "Khong co cao do tai vi tri can tim!")
  (setq g (Getreal "\n Nhap cao do diem chuan [bang ban phim/Chon tren man hinh]:<Chon>" ))
  (if (= nil g)
(progn
  (setq sscd (entsel "\n Moi ban chon cao do tren man hinh:"))
  (setq g (atof (cdr (assoc 1 (entget (car sscd))))))
  (prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:"))
  )
)
  )
(If(= kitu "Co")
  (progn
(setq g (Getreal "\n Nhap lai cao do diem chuan [bang ban phim/Chon tren man hinh]:<Chon>" ))
(if (= nil g)
  (progn
(setq sscd (entsel "\n Moi ban chon lai cao do tren man hinh:"))
(setq g (atof (cdr (assoc 1 (entget (car sscd))))))
(prompt (strcat "\n Cao do da chon:<"(rtos g 2 3) ">:"))
  )
  )
)
  )
)
 )

;;============Tinh cao do khi biet cao do diem chon lam c:goc====================
(defun c:tcd ()
 (PROMPT "\n(Lenh tinh toa do & K/C 1 diem bat ky)")
 (c:goc)
 (setq xa (* sc (car a)))
 (setq ya (* sc (cadr a)))
 (setq l1 xa)
 (setq l3 ya)
 (While
(setq b (Getpoint "\n Chon diem can tinh:"))
(setq xb (* sc (car B)))
(setq x (- xb xa))
(setq yb (* sc (cadr B)))
(setq y (+ g (- yb ya)))
(setq ypr (rtos y 2 3))
(setq l2 xb)
(setq l4 yb)
(setq dy (- l4 l3))
(setq l3 l4)
(setq l (- l2 l1))
(setq ypr1 (rtos L 2 3))
(setq l1 l2)
(Prompt "\nCao do diem vua chon:")  (princ (rtos y 2 3))
(Prompt "\nK/C x le:")  (princ (rtos l 2 3))
(Prompt " _ K/C x den diem goc:")  (princ (rtos x 2 3))
(if (= 0 l)
  (Prompt " _ Do doc doan vua chon: E%")
  (Progn
(setq dd (* 100 (/ dy l)))
(Prompt " _ Do doc doan vua chon:")(princ (rtos dd 2 3))(princ "%")
)
  )

;(setq pt2 (getpoint "\nDiem ghi cao do vua tinh duoc :"))
;(command "TEXT" pt2 "" "90" ypr)
;(setq pt3 (getpoint "\nDiem ghi K/C le vua tinh duoc :"))
;(command "TEXT" pt3 "" "90" ypr1)
;(setq a '(0 0 0) g 0)
(setq thchon (nentselp"\nChon text can thay the:"))
(if (/= nil thchon)
  (progn
(setq ens (car thchon))
(COMMAND "CHANGE" ens "" "" "" "" "" ""(rtos y 2 2))
(COMMAND "CHANGE" ens  "" "p" "c" "6" "")
)
  )
(princ)
)
 )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

thank anh rất nhiều.

thú thực là em chỉ biết sử dụng lisp nhưng ko hiểu về lisp . chỉ biết nó là công cụ hỗ trợ thôi .

em cung đang tìm hiểu về lisp nhưng ko có ai chỉ dạy và đang học mót từng tí .

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

Nhiều người nói giống bạn lắm. Nhưng đa số không ai bỏ ra nổi 1 tiếng 1 tuần để đọc qua nó, hoặc thậm chí hỏi những gì chưa biết. Diễn đàn có ai tiếc công trả lời đâu, chỉ tiếc khi có thêm 1 lời hứa hẹn.. :) Chúc bạn thành công, nếu có gì không hiểu đừng ngại hỏi :)

  • Vote tăng 1

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

vâng ok anh . có gì em hỏi ngay .

thế em dùn lisp này lại dính chưởng thêm cái phần như sau .

em gán dấu + là lệnh của líp cộng , - của líp trừ nhưng nó lại là zoom to nhỏ sau khi chạy líp thế em phải bỏ cái phần mà có dấu + và - trong líp ở cái chỗ

(defun c:e1 () (command "erase" "all" ""))
(defun c:+++++ ()  (command "'.zoom" "8x"))
(defun c:++++++ ()  (command "'.zoom" "16x"))
(defun c:++++ ()  (command "'.zoom" "4x"))
(defun c:+++ ()  (command "'.zoom" "2x"))
(defun c:++ ()  (command "'.zoom" "1.5x"))
(defun c:+ ()  (command "'.zoom" "1.2x"))
(defun c:- ()  (command "'.zoom" "0.9x"))
(defun c:-- ()  (command "'.zoom" "0.5x"))
(defun c:--- ()  (command "'.zoom" "0.2x"))
(defun c:---- ()  (command "'.zoom" "0.1x"))
(defun c:----- ()  (command "'.zoom" "0.05x"))
(defun c:------ ()  (command "'.zoom" "0.01x"))

nhưng nó lại vướng mấy câu lệnh đằng trước mà em ko hiểu rõ về ý nghĩa đằng trước mong anh chỉ cho em ý nghĩa và cách bỏ cái .mót dần dần anh chỉ cho em nhé .chỉ sợ anh ngại chỉ thôi .em thì ko ngại học đâu . em có cái tính chịu hkos và tìm tòi .

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

Ý bạn là đoạn này ?

(setvar "dimzin" 0)

(defun c:os () (setvar "osmode" 545))

;;;;;===============================

;; Silent load. (princ)

- Dòng : (setvar "dimzin" 0) dùng để gán giá trị 0 cho biến hệ thống Dimzin, ý nghĩa của biến này (và các biến khác) bạn sẽ tìm thấy trong Help của CAD

(ấn F1 :

AutoCAD 2008 Command Reference > System Variables > D System Variables > DIMZIN >)

 

- Dòng (defun c:os () (setvar "osmode" 545)) để tạo lệnh tắt mới Os, khi chạy lệnh này thì gán giá trị cho biến hệ thống Osmode = 545

(Vẫn cùng cấu trúc setvar)

 

- Dòng

 

;;;;;===============================

;; Silent load.

chỉ là ghi chú. Trong lisp, các chữ sau dấu ; sẽ được coi như là ghi chú, không ảnh hưởng tới code

 

- Dòng (princ) : không mần chi cả, chỉ in 1 ký tự xuống dòng

 

P/S : bạn nên chuyển sang mục Hướng dẫn lập trình hoặc Hỏi về Lisp để hỏi ^^

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  

×