Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 hakhoailang

hakhoailang

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 11 September 2011 - 03:25 PM

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)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  • 1

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 11 September 2011 - 03:35 PM

Mình chỉnh tiêu đề cho đúng form. Hy vọng lần sau bạn chú ý nhé
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 11 September 2011 - 03:43 PM

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)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#4 hakhoailang

hakhoailang

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 11 September 2011 - 07:16 PM

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

#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 11 September 2011 - 07:38 PM

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 :)
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 hakhoailang

hakhoailang

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 12 September 2011 - 09:23 AM

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

#7 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 12 September 2011 - 09:34 AM

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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC