Đến nội dung


Hình ảnh
- - - - -

Kỹ năng nâng cấp lệnh AutoCAD bằng lisp


  • Please log in to reply
7 replies to this topic

#1 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 20 September 2007 - 02:21 PM

Trong quá trình sử dụng lệnh AutoCAD, nhiều lúc chúng ta muốn hiệu chỉnh một thứ nho nhỏ của lệnh CAD. Nếu có một chút kiến thức Lisp, rất dễ để làm điều này.

Đầu tiên, xin đề cập đến 1 kiến thức cơ bản nhất, đó là thêm 1 tên lệnh.
Hãy nghiên cứu ví dụ dưới đây:
(defun c:q() (command ".line"))
mã lệnh trên định nghĩa một lệnh tên là Q, gọi lại lệnh gốc LINE của AutoCAD.

tiếp theo, chúng ta thử hình dung ta cần vẽ một đoạn thẳng dài 105, nghiêng góc 30 độ. Lệnh CAD sẽ là:
Command: line
Specify first point:
Specify next point or [Undo]: @105<30
Specify next point or [Undo]:[/b]
Chúng ta sẽ đưa nó vào lisp:
(defun c:q()
(command ".line") ; dong 1
(command pause) ; dong 2
(command "@105<30") ; dong 3
(command "") ; dong 4
)

Dòng đầu tiên là gọi lệnh line, dòng thứ 2 là chờ người dùng pick điểm, dòng thứ 3 là nhập giá trị @105<30, dòng thứ 4 là nhấn enter. Như vậy, chúng ta đã 'bó' một tập lệnh thành một lệnh lisp.

với kỹ năng tạo bó lệnh, chúng ta có thể định nghĩa rất nhiều hàm mở rộng cho CAD.
Ví dụ:
(defun c:zz () (command ".zoom" ".6x")) ;;: lệnh zoom out
(defun c:dh () (command ".dimstyle" "r" "" pause)) ;; lệnh gán dim style của đối tượng được chọn thành dimstyle hiện hành
(defun c:du () (command ".dimstyle" "apply" pause)) ;; lệnh update dim style hiện hành cho các dimstyle đối tượng được chọn.
.....
  • 0

#2 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 21 September 2007 - 04:50 PM

Tôi chế lại lệnh EXTEND và TRIM cho các CAD đời cũ nhìn cho giống CAD2007.
Bà con nào thấy thích thì xài cho vui!
Tất nhiên không giống hoàn toàn được!!


(DEFUN C:exn ( )
(Prompt "\nChon doi tuong dich den")
(Setq dichkeodai (Ssget))
(setq a (getpoint "\nDiem thu nhat: "))
(setq b (getcorner a"\nDiem thu hai: "))
(setq c (list (car a) (cadr :unsure:))
(setq d (list (car :unsure: (cadr a)))
(command ".extend" dichkeodai "" "f" a b c d b c a d "" "")

(while (setq ab (getpoint "\nDiem thu nhat<Enter de ket thuc>: "))
(setq bb (getcorner ab"\nDiem thu hai: "))
(setq cb (list (car ab) (cadr bb)))
(setq db (list (car bb) (cadr ab)))
(command ".extend" dichkeodai "" "f" ab bb cb db bb cb ab db "" "")

)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(DEFUN C:trn ( )
(Prompt "\nChon doi tuong cat")
(Setq dichkeodai (Ssget))
(setq a (getpoint "\nDiem thu nhat: "))
(setq b (getcorner a"\nDiem thu hai: "))
(setq c (list (car a) (cadr :unsure:))
(setq d (list (car :) (cadr a)))
(command ".trim" dichkeodai "" "f" a b c d b c a d "" "")

(while (setq ab (getpoint "\nDiem thu nhat<Enter de ket thuc>: "))
(setq bb (getcorner ab"\nDiem thu hai: "))
(setq cb (list (car ab) (cadr bb)))
(setq db (list (car bb) (cadr ab)))
(command ".trim" dichkeodai "" "f" ab bb cb db bb cb ab db "" "")
)
(princ)
)


Lệnh là EXN và TRN
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3 pdhuy

pdhuy

    biết pan

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

Đã gửi 21 September 2007 - 05:23 PM

Mình có 1 lips CD chạy trong cad14 thì được nhưng chạy sang cad 2004-2006 thì không được. Nhờ Nguyên Hoàng và các các bạn giúp với. Có thể các lệnh tại Lips này không tương thích với các cad đời cao sao ?. xin cám ơn diễn đàn!

;HUONG DAN: BAN CO THE NHAP SO LIEU TRUC TIEP HOAC NHAP TU FILE
; VI DU FILE SO LIEU:
; cu li le cao do ten coc
;
; 0 12
; 5 15 "CC1"
; 4 12.5 "ND1"
;
(defun C:CD(/ kw)
(textpage)
(prompt" **********************************************\n")
(prompt" ** **\n")
(prompt" ** CHUONG TRINH PDhuy **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" **********************************************\n")
(initget "1 2")
(setq kw (getkword "\n\n\nGo 1 de nhap truc tiep\nGo 2 de nhap tu file\n"))
(if (= kw "1") (cd1))
(if (= kw "2") (cd2))
(command "cmdecho" "0")
)
;****************************************************************************
(defun storevar ()
(setq lupre (getvar "luprec")
colr (getvar "cecolor")
osnp (getvar "osmode")
F8 (getvar "orthomode")
cly (getvar "clayer")
)
)
(defun restorevar ()
(setvar "luprec" lupre)
(setvar "cecolor" colr)
(setvar "osmode" osnp)
(setvar "orthomode" F8)
(setvar "clayer" cly)
)
(defun Romans (h)
(command "style" "Romans" "Romans" h "1.0" "0" "N" "N" "N")
)
(defun Vhcor (h)
(command "style" "Vhcour" ".Vncourier NewH" h "1.0" "0" "N" "N" "N")
)
(defun VNSou (h)
(command "style" "VNSou" ".VNSouthernH" h "1.0" "0" "N" "N" "N")
)
(defun romanc(h)
(command "style" "romanc" "romanc" h "1.0" "0" "N" "N" "N")
)
(defun frm (point x y)
(list (+ (car point) x) (+ (cadr point) y))
)
;****************************************************************************
(defun CD1 (/ x_scl y_scl pt1)
(graphscr)
(setq x_scl (* 1000 (/ 1 (getreal "Ti le dai <1/?>:")))
y_scl (* 1000 (/ 1 (getreal "Ti le cao <1/?>:")))
mss (getreal "Cao do mat so sanh <m>:")
pt1 (getpoint "Diem dau cat doc:")
ptA pt1
cdo1 (getreal "\nCao do <m>:")
pt2 (list (car pt1) (- (cadr pt1) (* (- cdo1 mss) y_scl)))
)
(storevar)
(command
"luprec" "1"
"colour" "3"
"style" "ROMANS" "ROMANS" "2.5" "0.75" "0" "N""N""N"
"osnap" "none"
"text" "ml" (list (-(car pt2) 32) (-(cadr pt2) 5)) "0" "GROUND LEVEL"
"text" "ml" "@0,-7.5" "0" "DISTANCE"
"text" "mc" "@40,7.5" "90" (rtos cdo1)
"line" pt2 "@-45,0" "@0,-15" "@40,0" pt2 ""
"line" "@0,-10""@-45,0"""
"colour" "250"
"line" pt2 pt1""
)
(initget 1 "Y N")
(while (setq cll (* x_scl (getreal "\n\nCu li le <m>:")))
(progn
(setq
cdo2 (getreal "Cao do <m>:")
cdo12 (* (- cdo2 cdo1) y_scl)
ptB (list (+ (car ptA) cll) (+ (cadr ptA) cdo12))
ptC (list (car ptB) (cadr pt2))
)
(romans 2.5)
(command
"undo" "m"
"colour" "5"
"line" ptA ptB ""
"colour""250"
"line" ptB ptC ""
"colour" "2"
"line" "@0,-10" "@0,-5"""
"extend" "l" "" "f" (list (-(car ptC) cll 1)(cadr ptC))"@-5,-21" "" ""
"text" "mc" "@0,10" "90" (rtos cdo2)
"text" "mc" (list (-(car ptC)(/ cll 2)) (-(cadr ptC) 12.5)) "0" (rtos (/ cll x_scl))
)
(setq tt (strcase(getstring "Undo (Yes or No):<N>")))
(if (/= tt "Y")
(setq ptA ptB cdo1 cdo2)
(command "undo" "b")
);if
)
)
(restorevar)
(prin1)
)

;*****************************************************************************
(defun CD2 (/ file line hf vf level pt0 pt1 pt2 y1 y2 ST TH $ mark1 mark2 mark3)
(graphscr)
(setq file nil line nil hf nil level nil pt0 nil pt1 nil pt2 nil y1 nil
y2 nil mark1 nil mark2 nil mark3 nil)
(setq file (getstring "\nTen file so lieu:"))
(while (not (findfile file))
(prompt"\nTen file sai!")
(setq file (getstring "\nTen file so lieu:"))
)
(setq file (open file "r")
hf (* 1000 (/ 1 (getreal "Ti le dai <1/?>:")))
vf (* 1000 (/ 1 (getreal "Ti le cao <1/?>:")))
level (getreal "Cao do mat so sanh <m>:")
ST (getreal "Ly trinh diem dau<m>:")
TH (getreal "Chieu cao text:")
pt1 (getpoint "Chon diem dau:")
$ command
)
(setq line (read-line file)
line (read (strcat "(" line ")"))
y1 (nth 1 line)
pt0 (frm pt1 0 (* (- level y1) vf))
mark1 (nth 2 line)
mark2 (nth 3 line)
mark3 (nth 4 line)
)
(storevar)
(Romans TH)
($
"blipmode" "off"
"colour" "8"
"osnap" "none"
"luprec" "1"
"line" pt1 pt0 ""
"colour" "2"
"insert" "TH" (frm pt0 -5 (- y1 level)) "1" "1" "0"
"line" pt0 "@0,-95" ""
"line" (frm pt0 -60 0) "@0,-95" ""
"colour" "3"
"text" "mc" (frm pt0 1 -35) "90" (rtos y1)
"text" "mc" "@0,-15" "90" (rtos ST)
)
(Vhcor 3.0)
($ "text" "ml" (frm pt0 -40 -15) "0" "S¬ häa" )
(VNSou 2.0)
($
"text" "ml" "@-15,-20" "0" "cao ®é ®iÓm ®o <m>"
"text" "ml" "@0,-7.5" "0" "kho¶ng c¸ch ®iÓm ®o <m>"
"text" "ml" "@0,-7.5" "0" "kho¶ng c¸ch céng dån <m>"
"text" "ml" "@0,-7.5" "0" "gãc - kho¶ng c¸ch gãc"
)
(if (/= mark1 nil) ($ "text" "mc" (frm pt0 5 -18.5) "0" mark1) )
(if (/= mark2 nil) ($ "text" "mc" (frm pt0 5 -58.5) "0" mark2) )
(if (/= mark3 nil) ($ "insert" mark3 (frm pt0 0 -15) "1" "1" "0") )
(while (/= (setq line (read-line file)) nil)
(if (/= line nil)
(progn
(setq
line (read (strcat "(" line ")")))
(setq x (* (nth 0 line) hf)
y2 (nth 1 line)
pt2 (frm pt1 x (* (- y2 y1) vf))
ST (+ ST (nth 0 line))
mark1 (nth 2 line)
mark2 (nth 3 line)
mark3 (nth 4 line)
)
(Romans 1.5)
($
"colour" "5"
"line" pt1 pt2 ""
"colour" "8"
"line" pt2 (frm pt2 0 (* (- level y2) vf)) ""
"colour" "2"
"line" "@0,-40" "@0,-5" ""
"text" "mc" "@0,10" "90" (rtos y2)
"text" "mc" "@0,-15" "90" (rtos ST)
"text" "mc" (frm pt1 (/ x 2) (-(* (- level y1) vf) 42.5)) "0" (rtos (/ x hf))
)
(Vhcor 1.5)
(if (/= mark1 nil)
($
"text" "mc" (frm pt2 0 (-(* (- level y2) vf) 18.5)) "0" mark1
)
)
(if (/= mark2 nil)
($
"text" "mc" (frm pt2 0 (-(* (- level y2) vf) 58.5)) "0" mark2
)
)
(if (/= mark3 nil)
($
"insert" mark3 (frm pt2 0 (-(* (- level y2) vf) 15)) "1" "1" "0"
)
)

(setq pt1 pt2 y1 y2)
);progn
);if
);while
($
"line" (frm pt2 12 (* (- level y2) vf)) "@0,-30" (frm pt0 -60 -30) ""
"colour" "1"
"line" (frm pt2 12 (* (- level y2) vf)) "@0,-15" (frm pt0 0 -15) ""
"colour" "2"
"line" (frm pt2 12 (* (- level y2) vf)) "@0,-95" ""
"line" (frm pt2 12 (* (- level y2) vf)) (frm pt0 -60 0) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 40)) (frm pt0 -60 -40) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 45)) (frm pt0 -60 -45) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 55)) (frm pt0 -60 -55) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 60)) (frm pt0 -60 -60) ""


)
(close file)
(restorevar)
(prin1)
(prin1)
)
;******************************************************************************
(princ "\nStart with C:CD")
(prin1)

  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 21 September 2007 - 05:49 PM

Mình có 1 lips CD chạy trong cad14 thì được nhưng chạy sang cad 2004-2006 thì không được. Nhờ Nguyên Hoàng và các các bạn giúp với. Có thể các lệnh tại Lips này không tương thích với các cad đời cao sao ?. xin cám ơn diễn đàn!


;HUONG DAN: BAN CO THE NHAP SO LIEU TRUC TIEP HOAC NHAP TU FILE
; VI DU FILE SO LIEU:
; cu li le cao do ten coc
;
; 0 12
; 5 15 "CC1"
; 4 12.5 "ND1"
;
(defun C:CD(/ kw)
(textpage)
(prompt" **********************************************\n")
(prompt" ** **\n")
(prompt" ** CHUONG TRINH PDhuy **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" **********************************************\n")
(initget "1 2")
(setq kw (getkword "\n\n\nGo 1 de nhap truc tiep\nGo 2 de nhap tu file\n"))
(if (= kw "1") (cd1))
(if (= kw "2") (cd2))
(command "cmdecho" "0")
)
;****************************************************************************
(defun storevar ()
(setq lupre (getvar "luprec")
colr (getvar "cecolor")
osnp (getvar "osmode")
F8 (getvar "orthomode")
cly (getvar "clayer")
)
)
(defun restorevar ()
(setvar "luprec" lupre)
(setvar "cecolor" colr)
(setvar "osmode" osnp)
(setvar "orthomode" F8)
(setvar "clayer" cly)
)
(defun Romans (h)
(command "style" "Romans" "Romans" h "1.0" "0" "N" "N" "N")
)
(defun Vhcor (h)
(command "style" "Vhcour" ".Vncourier NewH" h "1.0" "0" "N" "N" "N")
)
(defun VNSou (h)
(command "style" "VNSou" ".VNSouthernH" h "1.0" "0" "N" "N" "N")
)
(defun romanc(h)
(command "style" "romanc" "romanc" h "1.0" "0" "N" "N" "N")
)
(defun frm (point x y)
(list (+ (car point) x) (+ (cadr point) y))
)
;****************************************************************************
(defun CD1 (/ x_scl y_scl pt1)
(graphscr)
(setq x_scl (* 1000 (/ 1 (getreal "Ti le dai <1/?>:")))
y_scl (* 1000 (/ 1 (getreal "Ti le cao <1/?>:")))
mss (getreal "Cao do mat so sanh :")
pt1 (getpoint "Diem dau cat doc:")
ptA pt1
cdo1 (getreal "\nCao do :")
pt2 (list (car pt1) (- (cadr pt1) (* (- cdo1 mss) y_scl)))
)
(storevar)
(command
"luprec" "1"
"colour" "3"
"style" "ROMANS" "ROMANS" "2.5" "0.75" "0" "N""N""N"
"osnap" "none"
"text" "ml" (list (-(car pt2) 32) (-(cadr pt2) 5)) "0" "GROUND LEVEL"
"text" "ml" "@0,-7.5" "0" "DISTANCE"
"text" "mc" "@40,7.5" "90" (rtos cdo1)
"line" pt2 "@-45,0" "@0,-15" "@40,0" pt2 ""
"line" "@0,-10""@-45,0"""
"colour" "250"
"line" pt2 pt1""
)
(initget 1 "Y N")
(while (setq cll (* x_scl (getreal "\n\nCu li le :")))
(progn
(setq
cdo2 (getreal "Cao do :")
cdo12 (* (- cdo2 cdo1) y_scl)
ptB (list (+ (car ptA) cll) (+ (cadr ptA) cdo12))
ptC (list (car ptB) (cadr pt2))
)
(romans 2.5)
(command
"undo" "m"
"colour" "5"
"line" ptA ptB ""
"colour""250"
"line" ptB ptC ""
"colour" "2"
"line" "@0,-10" "@0,-5"""
"extend" "l" "" "f" (list (-(car ptC) cll 1)(cadr ptC))"@-5,-21" "" ""
"text" "mc" "@0,10" "90" (rtos cdo2)
"text" "mc" (list (-(car ptC)(/ cll 2)) (-(cadr ptC) 12.5)) "0" (rtos (/ cll x_scl))
)
(setq tt (strcase(getstring "Undo (Yes or No):")))
(if (/= tt "Y")
(setq ptA ptB cdo1 cdo2)
(command "undo" "b")
);if
)
)
(restorevar)
(prin1)
)

;*****************************************************************************
(defun CD2 (/ file line hf vf level pt0 pt1 pt2 y1 y2 ST TH $ mark1 mark2 mark3)
(graphscr)
(setq file nil line nil hf nil level nil pt0 nil pt1 nil pt2 nil y1 nil
y2 nil mark1 nil mark2 nil mark3 nil)
(setq file (getstring "\nTen file so lieu:"))
(while (not (findfile file))
(prompt"\nTen file sai!")
(setq file (getstring "\nTen file so lieu:"))
)
(setq file (open file "r")
hf (* 1000 (/ 1 (getreal "Ti le dai <1/?>:")))
vf (* 1000 (/ 1 (getreal "Ti le cao <1/?>:")))
level (getreal "Cao do mat so sanh :")
ST (getreal "Ly trinh diem dau:")
TH (getreal "Chieu cao text:")
pt1 (getpoint "Chon diem dau:")
$ command
)
(setq line (read-line file)
line (read (strcat "(" line ")"))
y1 (nth 1 line)
pt0 (frm pt1 0 (* (- level y1) vf))
mark1 (nth 2 line)
mark2 (nth 3 line)
mark3 (nth 4 line)
)
(storevar)
(Romans TH)
($
"blipmode" "off"
"colour" "8"
"osnap" "none"
"luprec" "1"
"line" pt1 pt0 ""
"colour" "2"
"insert" "TH" (frm pt0 -5 (- y1 level)) "1" "1" "0"
"line" pt0 "@0,-95" ""
"line" (frm pt0 -60 0) "@0,-95" ""
"colour" "3"
"text" "mc" (frm pt0 1 -35) "90" (rtos y1)
"text" "mc" "@0,-15" "90" (rtos ST)
)
(Vhcor 3.0)
($ "text" "ml" (frm pt0 -40 -15) "0" "S¬ häa" )
(VNSou 2.0)
($
"text" "ml" "@-15,-20" "0" "cao ®é ®iÓm ®o "
"text" "ml" "@0,-7.5" "0" "kho¶ng c¸ch ®iÓm ®o "
"text" "ml" "@0,-7.5" "0" "kho¶ng c¸ch céng dån "
"text" "ml" "@0,-7.5" "0" "gãc - kho¶ng c¸ch gãc"
)
(if (/= mark1 nil) ($ "text" "mc" (frm pt0 5 -18.5) "0" mark1) )
(if (/= mark2 nil) ($ "text" "mc" (frm pt0 5 -58.5) "0" mark2) )
(if (/= mark3 nil) ($ "insert" mark3 (frm pt0 0 -15) "1" "1" "0") )
(while (/= (setq line (read-line file)) nil)
(if (/= line nil)
(progn
(setq
line (read (strcat "(" line ")")))
(setq x (* (nth 0 line) hf)
y2 (nth 1 line)
pt2 (frm pt1 x (* (- y2 y1) vf))
ST (+ ST (nth 0 line))
mark1 (nth 2 line)
mark2 (nth 3 line)
mark3 (nth 4 line)
)
(Romans 1.5)
($
"colour" "5"
"line" pt1 pt2 ""
"colour" "8"
"line" pt2 (frm pt2 0 (* (- level y2) vf)) ""
"colour" "2"
"line" "@0,-40" "@0,-5" ""
"text" "mc" "@0,10" "90" (rtos y2)
"text" "mc" "@0,-15" "90" (rtos ST)
"text" "mc" (frm pt1 (/ x 2) (-(* (- level y1) vf) 42.5)) "0" (rtos (/ x hf))
)
(Vhcor 1.5)
(if (/= mark1 nil)
($
"text" "mc" (frm pt2 0 (-(* (- level y2) vf) 18.5)) "0" mark1
)
)
(if (/= mark2 nil)
($
"text" "mc" (frm pt2 0 (-(* (- level y2) vf) 58.5)) "0" mark2
)
)
(if (/= mark3 nil)
($
"insert" mark3 (frm pt2 0 (-(* (- level y2) vf) 15)) "1" "1" "0"
)
)

(setq pt1 pt2 y1 y2)
);progn
);if
);while
($
"line" (frm pt2 12 (* (- level y2) vf)) "@0,-30" (frm pt0 -60 -30) ""
"colour" "1"
"line" (frm pt2 12 (* (- level y2) vf)) "@0,-15" (frm pt0 0 -15) ""
"colour" "2"
"line" (frm pt2 12 (* (- level y2) vf)) "@0,-95" ""
"line" (frm pt2 12 (* (- level y2) vf)) (frm pt0 -60 0) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 40)) (frm pt0 -60 -40) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 45)) (frm pt0 -60 -45) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 55)) (frm pt0 -60 -55) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 60)) (frm pt0 -60 -60) ""


)
(close file)
(restorevar)
(prin1)
(prin1)
)
;******************************************************************************
(princ "\nStart with C:CD")
(prin1)

Bạn sửa chữ colour thành color là chạy ngon!
  • 0

#5 pdhuy

pdhuy

    biết pan

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

Đã gửi 21 September 2007 - 07:26 PM

Bạn sửa chữ colour thành color là chạy ngon!


Tớ chạy trong lấy dữ liệu trong file lotepat như sau:
0 84
40 86
43 81 "G1" "P=46.12" "P"
40 85 "G2" "T=47.22" "T"
37 86 "G3" "T=27.45" "T"
37 87 "G4" "T=17.08" "T"
39 84 "G5" "T=12.03" "T"
41 82 "G6" "P=32.13" "P"

đặt tên file 2.txt

khi chạy báo lỗi



Command:
Start with C:CD
Command:
Command: cd **********************************************
** **
** CHUONG TRINH PDhuy **
** **
** **
** **
** **
** **
** **
** **
**********************************************



Go 1 de nhap truc tiep
Go 2 de nhap tu file
2
Ten file so lieu:c:\2.txt
Ti le dai <1/?>:5000
Ti le cao <1/?>:500
Cao do mat so sanh <m>:00
Ly trinh diem dau<m>:00
Chieu cao text:1.5
Chon diem dau:; error: cannot apply special form: COMMAND
  • 0

#6 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 22 September 2007 - 08:46 AM

Lỗi mà bạn nêu là do lệnh:
($ ....
gây nên.
Mặc dù trước đó đã có lệnh gán $ bằng command. Nhưng với các autocad đời sau này thì việc đặt như vậy là không được phép.

Bạn chỉ cần sửa ($ thành (command là chương trình chạy được.
Tuy nhiên, chương trình cần một ký hiệu block tên là TH thì chương trình mới chạy được.
  • 0

#7 pdhuy

pdhuy

    biết pan

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

Đã gửi 22 September 2007 - 12:24 PM

Tôi đã sửa nhưng vẫn không chạy được tôi post lips và file số liệu nhờ bác xem giúp thank bac

;HUONG DAN: BAN CO THE NHAP SO LIEU TRUC TIEP HOAC NHAP TU FILE
; VI DU FILE SO LIEU:
; cu li le cao do ten coc
;
; 0 12
; 5 15 "CC1"
; 4 12.5 "ND1"
;
(defun C:CD(/ kw)
(textpage)
(prompt" **********************************************\n")
(prompt" ** **\n")
(prompt" ** CHUONG TRINH PDhuy **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" ** **\n")
(prompt" **********************************************\n")
(initget "1 2")
(setq kw (getkword "\n\n\nGo 1 de nhap truc tiep\nGo 2 de nhap tu file\n"))
(if (= kw "1") (cd1))
(if (= kw "2") (cd2))
(command "cmdecho" "0")
)
;****************************************************************************
(defun storevar ()
(setq lupre (getvar "luprec")
colr (getvar "cecolor")
osnp (getvar "osmode")
F8 (getvar "orthomode")
cly (getvar "clayer")
)
)
(defun restorevar ()
(setvar "luprec" lupre)
(setvar "cecolor" colr)
(setvar "osmode" osnp)
(setvar "orthomode" F8)
(setvar "clayer" cly)
)
(defun Romans (h)
(command "style" "Romans" "Romans" h "1.0" "0" "N" "N" "N")
)
(defun Vhcor (h)
(command "style" "Vhcour" ".Vncourier NewH" h "1.0" "0" "N" "N" "N")
)
(defun VNSou (h)
(command "style" "VNSou" ".VNSouthernH" h "1.0" "0" "N" "N" "N")
)
(defun romanc(h)
(command "style" "romanc" "romanc" h "1.0" "0" "N" "N" "N")
)
(defun frm (point x y)
(list (+ (car point) x) (+ (cadr point) y))
)
;****************************************************************************
(defun CD1 (/ x_scl y_scl pt1)
(graphscr)
(setq x_scl (* 1000 (/ 1 (getreal "Ti le dai <1/?>:")))
y_scl (* 1000 (/ 1 (getreal "Ti le cao <1/?>:")))
mss (getreal "Cao do mat so sanh <m>:")
pt1 (getpoint "Diem dau cat doc:")
ptA pt1
cdo1 (getreal "\nCao do <m>:")
pt2 (list (car pt1) (- (cadr pt1) (* (- cdo1 mss) y_scl)))
)
(storevar)
(command
"luprec" "1"
"colour" "3"
"style" "ROMANS" "ROMANS" "2.5" "0.75" "0" "N""N""N"
"osnap" "none"
"text" "ml" (list (-(car pt2) 32) (-(cadr pt2) 5)) "0" "GROUND LEVEL"
"text" "ml" "@0,-7.5" "0" "DISTANCE"
"text" "mc" "@40,7.5" "90" (rtos cdo1)
"line" pt2 "@-45,0" "@0,-15" "@40,0" pt2 ""
"line" "@0,-10""@-45,0"""
"colour" "250"
"line" pt2 pt1""
)
(initget 1 "Y N")
(while (setq cll (* x_scl (getreal "\n\nCu li le <m>:")))
(progn
(setq
cdo2 (getreal "Cao do <m>:")
cdo12 (* (- cdo2 cdo1) y_scl)
ptB (list (+ (car ptA) cll) (+ (cadr ptA) cdo12))
ptC (list (car ptB) (cadr pt2))
)
(romans 2.5)
(command
"undo" "m"
"color" "5"
"line" ptA ptB ""
"color""250"
"line" ptB ptC ""
"color" "2"
"line" "@0,-10" "@0,-5"""
"extend" "l" "" "f" (list (-(car ptC) cll 1)(cadr ptC))"@-5,-21" "" ""
"text" "mc" "@0,10" "90" (rtos cdo2)
"text" "mc" (list (-(car ptC)(/ cll 2)) (-(cadr ptC) 12.5)) "0" (rtos (/ cll x_scl))
)
(setq tt (strcase(getstring "Undo (Yes or No):<N>")))
(if (/= tt "Y")
(setq ptA ptB cdo1 cdo2)
(command "undo" "b")
);if
)
)
(restorevar)
(prin1)
)

;*****************************************************************************
(defun CD2 (/ file line hf vf level pt0 pt1 pt2 y1 y2 ST TH command mark1 mark2 mark3)
(graphscr)
(setq file nil line nil hf nil level nil pt0 nil pt1 nil pt2 nil y1 nil
y2 nil mark1 nil mark2 nil mark3 nil)
(setq file (getstring "\nTen file so lieu:"))
(while (not (findfile file))
(prompt"\nTen file sai!")
(setq file (getstring "\nTen file so lieu:"))
)
(setq file (open file "r")
hf (* 1000 (/ 1 (getreal "Ti le dai <1/?>:")))
vf (* 1000 (/ 1 (getreal "Ti le cao <1/?>:")))
level (getreal "Cao do mat so sanh <m>:")
ST (getreal "Ly trinh diem dau<m>:")
TH (getreal "Chieu cao text:")
pt1 (getpoint "Chon diem dau:")
command command
)
(setq line (read-line file)
line (read (strcat "(" line ")"))
y1 (nth 1 line)
pt0 (frm pt1 0 (* (- level y1) vf))
mark1 (nth 2 line)
mark2 (nth 3 line)
mark3 (nth 4 line)
)
(storevar)
(Romans TH)
(command
"blipmode" "off"
"color" "8"
"osnap" "none"
"luprec" "1"
"line" pt1 pt0 ""
"color" "2"
"insert" "TH" (frm pt0 -5 (- y1 level)) "1" "1" "0"
"line" pt0 "@0,-95" ""
"line" (frm pt0 -60 0) "@0,-95" ""
"color" "3"
"text" "mc" (frm pt0 1 -35) "90" (rtos y1)
"text" "mc" "@0,-15" "90" (rtos ST)
)
(Vhcor 3.0)
(command "text" "ml" (frm pt0 -40 -15) "0" "S¬ häa" )
(VNSou 2.0)
(command
"text" "ml" "@-15,-20" "0" "cao ®é ®iÓm ®o <m>"
"text" "ml" "@0,-7.5" "0" "kho¶ng c¸ch ®iÓm ®o <m>"
"text" "ml" "@0,-7.5" "0" "kho¶ng c¸ch céng dån <m>"
"text" "ml" "@0,-7.5" "0" "gãc - kho¶ng c¸ch gãc"
)
(if (/= mark1 nil) (command "text" "mc" (frm pt0 5 -18.5) "0" mark1) )
(if (/= mark2 nil) (command "text" "mc" (frm pt0 5 -58.5) "0" mark2) )
(if (/= mark3 nil) (command "insert" mark3 (frm pt0 0 -15) "1" "1" "0") )
(while (/= (setq line (read-line file)) nil)
(if (/= line nil)
(progn
(setq
line (read (strcat "(" line ")")))
(setq x (* (nth 0 line) hf)
y2 (nth 1 line)
pt2 (frm pt1 x (* (- y2 y1) vf))
ST (+ ST (nth 0 line))
mark1 (nth 2 line)
mark2 (nth 3 line)
mark3 (nth 4 line)
)
(Romans 1.5)
(command
"color" "5"
"line" pt1 pt2 ""
"color" "8"
"line" pt2 (frm pt2 0 (* (- level y2) vf)) ""
"color" "2"
"line" "@0,-40" "@0,-5" ""
"text" "mc" "@0,10" "90" (rtos y2)
"text" "mc" "@0,-15" "90" (rtos ST)
"text" "mc" (frm pt1 (/ x 2) (-(* (- level y1) vf) 42.5)) "0" (rtos (/ x hf))
)
(Vhcor 1.5)
(if (/= mark1 nil)
(command
"text" "mc" (frm pt2 0 (-(* (- level y2) vf) 18.5)) "0" mark1
)
)
(if (/= mark2 nil)
(command
"text" "mc" (frm pt2 0 (-(* (- level y2) vf) 58.5)) "0" mark2
)
)
(if (/= mark3 nil)
(command
"insert" mark3 (frm pt2 0 (-(* (- level y2) vf) 15)) "1" "1" "0"
)
)

(setq pt1 pt2 y1 y2)
);progn
);if
);while
(command
"line" (frm pt2 12 (* (- level y2) vf)) "@0,-30" (frm pt0 -60 -30) ""
"color" "1"
"line" (frm pt2 12 (* (- level y2) vf)) "@0,-15" (frm pt0 0 -15) ""
"color" "2"
"line" (frm pt2 12 (* (- level y2) vf)) "@0,-95" ""
"line" (frm pt2 12 (* (- level y2) vf)) (frm pt0 -60 0) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 40)) (frm pt0 -60 -40) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 45)) (frm pt0 -60 -45) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 55)) (frm pt0 -60 -55) ""
"line" (frm pt2 12 (- (* (- level y2) vf) 60)) (frm pt0 -60 -60) ""


)
(close file)
(restorevar)
(prin1)
(prin1)
)
;******************************************************************************
(princ "\nStart with C:CD")
(prin1)




file sl:

0 84
40 86
43 81 "G1" "P=46.12" "P"
40 85 "G2" "T=47.22" "T"
37 86 "G3" "T=27.45" "T"
37 87 "G4" "T=17.08" "T"
39 84 "G5" "T=12.03" "T"
41 82 "G6" "P=32.13" "P"
  • 0

#8 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 22 September 2007 - 01:43 PM

Ngoài lỗi thiếu 2 block có tên là T và P thì chương trình chạy tốt, chẳng có lỗi gì cả.

Nhắn bạn pdhuy: khi bạn đưa ra 1 chương trình, bạn phải hiểu rõ chương trình chạy như thế nào đã. Bạn không hiểu chương trình, tôi còn mù mờ hơn. Như thế chắc chắn không hiệu quả mà lại tốn nhiều công sức.
  • 0