AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[已解決]關於Lisp程式在08版和10版上執行的問題

上一篇主題 下一篇主題 向下

[已解決]關於Lisp程式在08版和10版上執行的問題

發表 由 ss_andy_ss 于 2012-12-21, 07:10

這是我們公司之前的工程師(已離職)開發的CAD外掛程式
不過目前因為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 在 2012-12-21, 09:40 作了第 1 次修改
avatar
ss_andy_ss
一般會員
一般會員

文章總數 : 11
年齡 : 32
來自 : 台中市
職業 : 維修工程師
愛好 : 運動
個性 : 好奇
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 1826
威望值 : 6
注冊日期 : 2012-12-12
男 雙子座 牛

回頂端 向下

回復: [已解決]關於Lisp程式在08版和10版上執行的問題

發表 由 pizg 于 2012-12-21, 09:03

改成這樣試試看 >>

(command "_dim" "_restore" x0 "_exit"
"_zoom" "_a" "_-layer" "_s" oldly "" "_view" "_s" "_all")
avatar
pizg
高級會員
高級會員

文章總數 : 253
年齡 : 52
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電腦
個性 : 隨和
使用年資 : 20↑
使用版本 : 2010
積分 : 10
經驗值 : 4087
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

回頂端 向下

回復: [已解決]關於Lisp程式在08版和10版上執行的問題

發表 由 ss_andy_ss 于 2012-12-21, 09:37

測試過後已可以正常執行, 感謝大大幫忙~
另外請問一下是因為CAD版不同所產生的差別嗎?
多謝~
avatar
ss_andy_ss
一般會員
一般會員

文章總數 : 11
年齡 : 32
來自 : 台中市
職業 : 維修工程師
愛好 : 運動
個性 : 好奇
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 1826
威望值 : 6
注冊日期 : 2012-12-12
男 雙子座 牛

回頂端 向下

回復: [已解決]關於Lisp程式在08版和10版上執行的問題

發表 由 pizg 于 2012-12-27, 02:09

嗯~~是版本不同所造成的問題.
不同的版本在某些指令上會有些微的差異, 例如某些指令的選項, 或是新增功能, 甚至系統變數和功能表都會不一樣.
因此我們在寫程式時最好能依不同版本做適當的處置.
下方語法可以取得AutoCAD版本
(GETVAR "ACADVER")


pizg 在 2012-12-27, 08:36 作了第 1 次修改
avatar
pizg
高級會員
高級會員

文章總數 : 253
年齡 : 52
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電腦
個性 : 隨和
使用年資 : 20↑
使用版本 : 2010
積分 : 10
經驗值 : 4087
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

回頂端 向下

回復: [已解決]關於Lisp程式在08版和10版上執行的問題

發表 由 ss_andy_ss 于 2012-12-27, 07:44

所以在其他CAD版本我還要另外做測試才可以了 不會吧
繼續鑽研去, 感謝大大的指導喔~
avatar
ss_andy_ss
一般會員
一般會員

文章總數 : 11
年齡 : 32
來自 : 台中市
職業 : 維修工程師
愛好 : 運動
個性 : 好奇
使用年資 : 新手初學
使用版本 : 新手初學
經驗值 : 1826
威望值 : 6
注冊日期 : 2012-12-12
男 雙子座 牛

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章