Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

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

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

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

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

(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

 

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.

.....

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ô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

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

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)

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
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 :")))
y_scl (* 1000 (/ 1 (getreal "Ti le cao :")))
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 :")))
vf (* 1000 (/ 1 (getreal "Ti le cao :")))
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!

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

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

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.

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ô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"

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

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.

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

Mình muốn hỏi các bạn một tý.

Vốn là trong lisp mình có dùng lệnh CAL. Nếu không load trước file chứa lệnh này nó sẽ báo không biết lệnh.

Ví dụ ngày xưa dùng cad2002 mình làm thế này chạy tốt

 

(if (and (null (type cal)) (findfile "geomcal.arx")) (arxload (findfile "geomcal.arx")))

 

Nhưng khi lên cad2013 nó dấu lệnh cal ở đâu không rõ. Các bạn có thể chỉ cho mình cách load lệnh này một cách nhanh gọn nhẹ nhé.

Cám ơn các bạn nhiều

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

Mình muốn hỏi các bạn một tý.

Vốn là trong lisp mình có dùng lệnh CAL. Nếu không load trước file chứa lệnh này nó sẽ báo không biết lệnh.

Ví dụ ngày xưa dùng cad2002 mình làm thế này chạy tốt

 

(if (and (null (type cal)) (findfile "geomcal.arx")) (arxload (findfile "geomcal.arx")))

 

Nhưng khi lên cad2013 nó dấu lệnh cal ở đâu không rõ. Các bạn có thể chỉ cho mình cách load lệnh này một cách nhanh gọn nhẹ nhé.

Cám ơn các bạn nhiều

 "geomcal.arx" được đổi thành  "geomcal.crx"

 

 

(or (and (setq tmp (findfile "geomcal.arx")) (arxload tmp nil))
      (and (setq tmp (findfile "geomcal.crx")) (arxload tmp nil))
)
  • 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

Cám ơn bạn rất nhiều. Mình biết đuôi arx ý nói đến ObjectArx, còn đuôi crx nói về cái gì vậy bạn.

Có cách nào gọi ngầm lệnh  CAL mà không phải load kg, lỡ sau này nó lại đổi thành zrx thì khổ.

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

Hình như dòng (command "cal" "1+2") thì phải. Nó sẽ gọi lệnh cal lên cho mình.

  • 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

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

×