[已解決]關於Lisp程式在08版和10版上執行的問題
2 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
[已解決]關於Lisp程式在08版和10版上執行的問題
這是我們公司之前的工程師(已離職)開發的CAD外掛程式
不過目前因為CAD版本轉換的關係, 程式上遇到很多問題不知道該如何解決...
小弟又是CAD的初學者, 根本無從著手
以下是程式碼, 因為實在看不懂, 也不知道從何著手...
另外再放上兩個附件, 08版和10版執行後的狀況...
▼在08版可以正常叫出圖框
▼在10版就會出現" ** 需要重生,無法透通。"
不過目前因為CAD版本轉換的關係, 程式上遇到很多問題不知道該如何解決...
小弟又是CAD的初學者, 根本無從著手
以下是程式碼, 因為實在看不懂, 也不知道從何著手...
另外再放上兩個附件, 08版和10版執行後的狀況...
(or setup_boxi(load"setups"))
(chku drawtime "drawtime")
(setq oce (getvar "cmdecho") ;store current cmdecho value
oldly (getvar "clayer") ;store current layer
oldblp(getvar "blipmode") ;store current blipmode value
oadi (getvar"ATTDIA")
#tp 0 ;box type
)
(setq oer *error* ;store AutoLisp error routine
*error* seterr) ;temporarily replace it
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setvar "attdia" 0)
(initget (+ 1 2 4)) ;no null input, negative or zero values
;(menucmd "s=setup1")
(setq b (*(/ (getint "\n繪圖比例: ") 100.)
_cacdrunit
)
file(open (getpath "setup" 2) "r")
cx 5);defun loop test value
;(menucmd "s=setup2")
(while (= cx 5)
(prompt (strcat "\n目前圖框類別為 < " (itoa #tp) " >..."))
(initget 5 "T")
(setq cx (getint "\n類別(T)/A(0)平/A(1)平/A(2)平/A(3)平/A0直(6)/A1直(7)/A2直(8)/A3直(9): "))
(while (= cx "T")
(if(setq x0(getint(strcat "\n使用圖框類別 <"(itoa #tp)">: ")))(setq #tp x0))
(prompt (strcat "\n目前圖框類別為 < " (itoa #tp) " >"))
(initget 5 "T")
(setq cx(getint "\n類別(T)/A(0)平/A(1)平/A(2)平/A(3)平/A0直(6)/A1直(7)/A2直(8)/A3直(9): "))
)
;defun x0 & y0 to decide view block x,y scale, x1,y1 for limits
(if (< cx 4)
(progn
(repeat (1+ (* 2 cx)) (setq h0 (atof (read-line file))))
(setq v0 (atof (read-line file)))
)
(and (> cx 5) (< cx 10)
(repeat (+ 1 (* 2 (- 9 cx))) (setq h0 (atof (read-line file))))
(setq v0 (atof (read-line file)))
)
)
(cond
((and (>= cx 0)(< cx 4))
(setq x0 (* h0 b) y0 (* v0 b) x1 (* x0 1.05) y1 (* y0 1.05))
)
((and (> cx 5)(< cx 10))
(setq x0 (* v0 b) y0 (* h0 b) x1 (* x0 1.05) y1 (* y0 1.05))
)
(setq cx 5)
)
);end loop of while
(setvar "USERI2" (1+ cx))
(close file)
(setq g (/ (+ 10 (atoi (rtos x1))) 20)) ;settting grid distance in g
(if (< g 1) ;if grid distance small than 1
(or
(and (> x1 15) (setq g 1))
(and (> x1 8) (setq g 0.5))
(and (> x1 4) (setq g 0.25))
(and (> x1 1.5) (setq g 0.1))
(and (> x1 0.8) (setq g 0.25))
(setq g 0.2)
)
) ;end if
(if (> cx 5)
(setq p (list 0 y0))
(setq p '(0 0))
)
(command "_-layer" "s" "0" "")
(if (= cx 10)
(progn(menucmd "s=x")(menucmd "s=s"))
(setup_boxi p b cx #tp)
)
(setvar "LTSCALE" b)
(command "_limits" "0,0" (list x1 y1))
(setq p (/ b _cacdrunit)
x1(tblnext "DIMSTYLE" 0)
x0(getvar "DIMSTYLE")
)
(while x1
(setq y1(cdr(assoc 2 x1)))
(command "_dim" "_restore" y1 "_dimscale" p "_save" y1 "_y" "_exit")
(setq x1(tblnext "DIMSTYLE"))
)
(command "_dim" "_restore" x0 "_exit"
"_'zoom" "_a" "_-layer" "_s" oldly "" "_view" "_s" "_all")
(setvar "textsize" (* b 0.7)) ;setting text hight
(setvar "snapunit" (list g g)) ;settting grid distance
(setvar "cmdecho" oce) ;restore previous value of cmdecho
(setvar "blipmode" oldblp) ;restore previous blipmode value
(setq *error* oer ;restore previous error handler
seterr nil
oce (if (> _cacdrunit 10) "公分" "公尺")
)
(prompt (strcat "\n\n規劃:\t單位: " oce ", 比例: 1/" (rtos(/(* 100 b)_cacdrunit)) ", 格點間距: " (rtos g) oce) )
(princ)
▼在08版可以正常叫出圖框
▼在10版就會出現" ** 需要重生,無法透通。"
ss_andy_ss 在 周五 21 12月 - 17:40 作了第 1 次修改
ss_andy_ss- 一般會員
- 文章總數 : 11
年齡 : 39
來自 : 台中市
職業 : 維修工程師
愛好 : 運動
個性 : 好奇
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4415
威望值 : 6
注冊日期 : 2012-12-12
回復: [已解決]關於Lisp程式在08版和10版上執行的問題
改成這樣試試看 >>
(command "_dim" "_restore" x0 "_exit"
"_zoom" "_a" "_-layer" "_s" oldly "" "_view" "_s" "_all")
(command "_dim" "_restore" x0 "_exit"
"_zoom" "_a" "_-layer" "_s" oldly "" "_view" "_s" "_all")
回復: [已解決]關於Lisp程式在08版和10版上執行的問題
測試過後已可以正常執行, 感謝大大幫忙~
另外請問一下是因為CAD版不同所產生的差別嗎?
多謝~
另外請問一下是因為CAD版不同所產生的差別嗎?
多謝~
____________________________________________________________________________________
努力不斷的追求卓越,成功自然會找上門來!
ss_andy_ss- 一般會員
- 文章總數 : 11
年齡 : 39
來自 : 台中市
職業 : 維修工程師
愛好 : 運動
個性 : 好奇
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4415
威望值 : 6
注冊日期 : 2012-12-12
回復: [已解決]關於Lisp程式在08版和10版上執行的問題
嗯~~是版本不同所造成的問題.
不同的版本在某些指令上會有些微的差異, 例如某些指令的選項, 或是新增功能, 甚至系統變數和功能表都會不一樣.
因此我們在寫程式時最好能依不同版本做適當的處置.
下方語法可以取得AutoCAD版本
(GETVAR "ACADVER")
不同的版本在某些指令上會有些微的差異, 例如某些指令的選項, 或是新增功能, 甚至系統變數和功能表都會不一樣.
因此我們在寫程式時最好能依不同版本做適當的處置.
下方語法可以取得AutoCAD版本
(GETVAR "ACADVER")
pizg 在 周四 27 12月 - 16:36 作了第 1 次修改
回復: [已解決]關於Lisp程式在08版和10版上執行的問題
所以在其他CAD版本我還要另外做測試才可以了
繼續鑽研去, 感謝大大的指導喔~
繼續鑽研去, 感謝大大的指導喔~
____________________________________________________________________________________
努力不斷的追求卓越,成功自然會找上門來!
ss_andy_ss- 一般會員
- 文章總數 : 11
年齡 : 39
來自 : 台中市
職業 : 維修工程師
愛好 : 運動
個性 : 好奇
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 4415
威望值 : 6
注冊日期 : 2012-12-12
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章