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

[討論]請問為什麼LISP有時候可執行,有時候不行

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

[討論]請問為什麼LISP有時候可執行,有時候不行

發表 由 hendry 于 2015-05-07, 14:46

請問大家
有沒有寫了一個LISP,在測試的時候作動正常
但實際再圖面運作的時候,卻會出現問題

我發生的情況如下
我為了繪圖方便,我參考網路上的作品
自己寫了一個小LISP,因為公司有PIP的問題,不知道能不能弄出來,如果可以明天會補上
大致功能為,選擇一條聚合線(其實本來想用畫的,再用entlast取出,但無奈一直出錯)
然後在聚合線的線段坐標上插入圖塊,分起點,終點,中間的部分就判斷是轉90度,或45度插入對應的圖塊
再用副線連接圖塊和圖塊

目前有遇到幾個問題
有時候再選擇聚合線的時候,狀況列會出現 nil,我明明有選到
此時這條聚合線,複製到圖面上的其他地方,還是選不到,不停的出現 nil
但如果用描的再劃一次聚合線(完全一樣的聚合線),新劃的那一條,就可以用了 =  =

或是再空白處很正常,但在非空白處,就會出現執行到一半的現象
可能有3個彎頭圖塊,只插入了1個,就中斷了

目前以上為最大的2個問題,畢竟我每天中午少半小時睡覺,寫了快一個月,如果後來不能用,我應該會噢死

目前尚未解決的小問題有,劃45度的時候,彎頭和彎頭之間不知道怎麼用副線銜接
終點的時候,副線線段會有過短的問題

另外因為我是參考網路上的文件自學的lisp,說真的真的寫的非常的傷眼
我為了判斷線段是往上下左右,用了超級多的if,大概有40個吧......弄到後來自己很痛苦

以上如果各位前輩,有空的時候,請幫忙解答一下,小弟感激不盡

LSP如下
如果有需要請自取,但寫的不怎樣就是了
代碼:
[code]
;快速EXH ae hendry ;
(defun c:AE(/ pmodec par1 sss SS1 typ1L IF1 typ1 typ2 pl pldate plone nr PTXY1 PTXY2 pt_x1 pt_x2 pt_y1 pt_y2 pt_xL pt_xLo PTXYLO PTXY)
 
 (setq pmodec (getvar "osmode"))
 (setvar "osmode" 0)
 (setq par1 (getvar "CMDECHO"))
 (setvar "CMDECHO" 0)
; (command "ORTHO" "ON")                       ;正交 on 打開,off 關閉
 (command "INSERT""EXH-LISP""0,0""""""")
 (command "ERASE" "L" "")
 (IF (= SS2 nil)(setq SS2 0))
 (setq SS1 (getint(strcat "輸入EXH尺寸(單位cm):<"(itoa SS2)">")))  ;要求1實數
 ;(prompt (strcat "<"(itoa SS2)">"))
 (if(= SS1 nil)
   (setq SS1 SS2)
 )
 (setq SS2 SS1)
 (setq typ1L SS1) ;縮減長度
 (setq IF1 0)
  ;-----------起點種類---------------;
 (setq typ1 (getint "\n選擇起點種類(預設順T) : (1)順T (2)90上 (3)90下 (4)盲板 :"));輸入實數
 (if (= typ1 nil)(setq typ1 1))
 (if (AND(/= typ1 1)(/= typ1 2)(/= typ1 3)(/= typ1 4))(setq typ1 1))
 (if (= typ1 1)
       (progn
  (setq typ1 "EX-順TLISP")
(setq typ1L(* typ1L 0.75))
  ))
 (if (= typ1 2)
       (progn
  (setq typ1 "EX-90ULISP")
  ))
 (if (= typ1 3)
       (progn
  (setq typ1 "EX-90DLISP")
  ))
 (if (= typ1 4)
       (progn
  (setq typ1 "EX-FLGLISP")
(setq typ1L 0)
  ))
  ;-------------------------------------;
  ;--------------起點種類---------------;
 (setq typ2 (getint "\n選擇終種類(預設90上) : (1)90上 (2)90下 :"));輸入實數
 (if (= typ2 nil)(setq typ2 1))
 (if (AND(/= typ2 1)(/= typ2 2))(setq typ2 1))
 (if (= typ2 1)
       (progn
  (setq typ2 "EX-90ULISP")
  ))
 (if (= typ2 2)
       (progn
  (setq typ2 "EX-90DLISP")
  ))
 
  ;--------------------------;
 (setq pl (car (entsel "\n請選取聚合線 : ")));取聚合線圖元名稱 <圖元名稱: 7efaba18>
 ;(setq Pl(entlast));最後畫的一個圖元
 (setq pldate(entget pl)) ;聚合線資料串列
 (setq plone(car pldate)) ;聚合線第一個元素 (-1 . <圖元名稱: 7100ca38>)
 (setq PTXY1 (cdr(assoc 10 pldate))) ;第1個點座標
 (setq PTXY2 (cdr(nth 18 pldate)))   ;第2個點座標
 (setq pt_x1 (car PTXY1))           ;第1個點座標 car 求x座標
 (setq pt_y1 (cadr PTXY1))          ;第1個點座標cadr 求y座標
 (setq pt_x2 (car PTXY2))           ;第2個點座標 car 求x座標
 (setq pt_y2 (cadr PTXY2))          ;第2個點座標cadr 求y座標

 (if(and
            (> pt_x2 pt_x1)
            (= pt_y2 pt_y1)    
    )
    (progn
   (setq pt_xL (+ pt_x1 typ1L))
   (setq pt_xLo (- pt_x2 SS1))
   (setq PTXYL (LIST pt_xL pt_y1))
   (setq PTXYLO (LIST pt_xLO pt_y2))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")

    (command "INSERT"typ1 PTXY1 SS1"""270") ;插入開始,名稱,基準點,x比例,y比例,旋轉
    (setq sss 1)));右
 (if(and
            (= pt_x2 pt_x1)
            (> pt_y2 pt_y1)    
    )
    (progn
   (setq pt_YL (+ pt_y1 typ1L))
   (setq pt_YLo (- pt_y2 SS1))
   (setq PTXYL (LIST pt_x1 pt_yL))
   (setq PTXYLO (LIST pt_x2 pt_YLO))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")        
    (command "INSERT"typ1 PTXY1 SS1"""") ;插入開始,名稱,基準點,x比例,y比例,旋轉
    (setq sss 3)));上
 (if(and
            (< pt_x2 pt_x1)
            (= pt_y2 pt_y1)    
    )
    (progn
   (setq pt_xL (- pt_x1 typ1L))
   (setq pt_xLo (+ pt_x2 SS1))
   (setq PTXYL (LIST pt_xL pt_y1))
   (setq PTXYLO (LIST pt_xLO pt_y2))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")  
    (command "INSERT"typ1 PTXY1 SS1"""90") ;插入開始,名稱,基準點,x比例,y比例,旋轉
    (setq sss 2)));左
 (if(and
            (= pt_x2 pt_x1)
            (< pt_y2 pt_y1)    
    )
    (progn
   (setq pt_YL (- pt_y1 typ1L))
   (setq pt_YLo (+ pt_y2 SS1))
   (setq PTXYL (LIST pt_x1 pt_yL))
   (setq PTXYLO (LIST pt_x2 pt_YLO))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")  
    (command "INSERT"typ1 PTXY1 SS1"""180") ;插入開始,名稱,基準點,x比例,y比例,旋轉
    (setq sss 4)));下
 (
 while plone
 (setq nr (car plone))
 (if (= nr 10)
     (progn
(setq IF1(+ IF1 1))
(setq PTXY (cdr plone))
       (setq pt_x (cadr plone))                                                ;x座標
       (setq pt_y (caddr plone))                                               ;y座標
     )
 )
    (if (> IF1 2)
 (progn
   ;→↗→&→↘→  ;↗↑&↘↓
   (IF(AND ;→↗
(= sss 1)
(> pt_y pt_yold)
(> pt_x pt_xold)
)
   (progn
   (setq pt_xL (- pt_x (* SS1 0.292893219)))
   (setq pt_yL (- pt_y (* SS1 0.292893219)))
   (setq pt_xLo (+ pt_xold (* SS1 0.292893219)))
   (setq pt_yLo (+ pt_yold (* SS1 0.292893219)))
   (setq PTXYL (LIST pt_xL pt_yL))
   (setq PTXYLO (LIST pt_xLo pt_yLo))
           (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""180") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 180) ;180↗                              
   ))
   (IF(AND ;↗→
(= sss 180)
(= pt_y pt_yold)
(> pt_x pt_xold)
)
   (progn
   (setq pt_xL (- pt_x (* SS1 0.414213562)))
   (setq pt_xLo (+ pt_xold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""0") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 1)                              
   ))                            
   (IF(AND ;↗↑
(= sss 180)
(> pt_y pt_yold)
(= pt_x pt_xold)
)
   (progn
           (setq pt_yL (- pt_y (* SS1 0.414213562)))
   (setq pt_yLo (+ pt_yold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""225") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 3)                              
   ))  
   (IF(AND ;→↘
(= sss 1)
(< pt_y pt_yold)
(> pt_x pt_xold)
)
   (progn
   (setq pt_xL (- pt_x (* SS1 0.292893219)))
   (setq pt_yL (+ pt_y (* SS1 0.292893219)))
   (setq pt_xLo (+ pt_xold (* SS1 0.292893219)))
   (setq pt_yLo (- pt_yold (* SS1 0.292893219)))
   (setq PTXYL (LIST pt_xL pt_yL))
   (setq PTXYLO (LIST pt_xLo pt_yLo))
           (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""315") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 315);315↘                          
   ))
   (IF(AND ;↘→
(= sss 315)
(= pt_y pt_yold)
(> pt_x pt_xold)
)
   (progn
   (setq pt_xL (- pt_x (* SS1 0.414213562)))
   (setq pt_xLo (+ pt_xold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""135") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 1)                              
   ))
   (IF(AND ;↘↓
(= sss 315)
(< pt_y pt_yold)
(= pt_x pt_xold)
)
   (progn
   (setq pt_yL (+ pt_y (* SS1 0.414213562)))
   (setq pt_yLo (- pt_yold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""270") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 4)                              
   ))
   ;                                      ;
   ;←↖←&←↙← &↖↑&↙↓
   (IF(AND ;←↙
(= sss 2)
(< pt_y pt_yold)
(< pt_x pt_xold)
)
   (progn
   (setq pt_xL (+ pt_x (* SS1 0.292893219)))
   (setq pt_yL (+ pt_y (* SS1 0.292893219)))
   (setq pt_xLo (- pt_xold (* SS1 0.292893219)))
   (setq pt_yLo (- pt_yold (* SS1 0.292893219)))
   (setq PTXYL (LIST pt_xL pt_yL))
   (setq PTXYLO (LIST pt_xLo pt_yLo))
           (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""0") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 0) ;↙0                              
   ))
   (IF(AND ;↙←
(= sss 0)
(= pt_y pt_yold)
(< pt_x pt_xold)
)
   (progn
   (setq pt_xL (+ pt_x (* SS1 0.414213562)))
   (setq pt_xLo (- pt_xold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""180") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 2)                              
   ))
   (IF(AND ;↙↓
(= sss 0)
(< pt_y pt_yold)
(= pt_x pt_xold)
)
   (progn
   (setq pt_yL (+ pt_y (* SS1 0.414213562)))
   (setq pt_yLo (- pt_yold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""45") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 4)                              
   ))    
   (IF(AND ;←↖
(= sss 2)
(> pt_y pt_yold)
(< pt_x pt_xold)
)
   (progn
   (setq pt_xL (+ pt_x (* SS1 0.292893219)))
   (setq pt_yL (- pt_y (* SS1 0.292893219)))
   (setq pt_xLo (- pt_xold (* SS1 0.292893219)))
   (setq pt_yLo (+ pt_yold (* SS1 0.292893219)))
   (setq PTXYL (LIST pt_xL pt_yL))
   (setq PTXYLO (LIST pt_xLo pt_yLo))
           (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""135") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 135); ↖
   ))
   (IF(AND ;↖←
(= sss 135)
(= pt_y pt_yold)
(< pt_x pt_xold)
)
   (progn
   (setq pt_xL (+ pt_x (* SS1 0.414213562)))
   (setq pt_xLo (- pt_xold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""315") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 2)                              
   ))
   (IF(AND ;↖↑
(= sss 135)
(> pt_y pt_yold)
(= pt_x pt_xold)
)
   (progn
           (setq pt_yL (- pt_y (* SS1 0.414213562)))
   (setq pt_yLo (+ pt_yold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""90") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 3)                              
   ))
   ;                                      ;
           ;↑↗↑&↑↖↑;
   (IF(AND ;↑↗
(= sss 3)
(> pt_y pt_yold)
(> pt_x pt_xold)
)
   (progn
   (setq pt_xL (- pt_x (* SS1 0.292893219)))
   (setq pt_yL (- pt_y (* SS1 0.292893219)))
   (setq pt_xLo (+ pt_xold (* SS1 0.292893219)))
   (setq pt_yLo (+ pt_yold (* SS1 0.292893219)))
   (setq PTXYL (LIST pt_xL pt_yL))
   (setq PTXYLO (LIST pt_xLo pt_yLo))
           (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""45") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 45) ;↗
   ))
   (IF(AND ;↗↑
(= sss 45)
(> pt_y pt_yold)
(= pt_x pt_xold)
)
   (progn
           (setq pt_yL (- pt_y (* SS1 0.414213562)))
   (setq pt_yLo (+ pt_yold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""225") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 3)                              
   ))
   (IF(AND ;↗→
(= sss 45)
(= pt_y pt_yold)
(> pt_x pt_xold)
)
   (progn
   (setq pt_xL (- pt_x (* SS1 0.414213562)))
   (setq pt_xLo (+ pt_xold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""0") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 1)                              
   ))
   (IF(AND ;↑↖
(= sss 3)
(> pt_y pt_yold)
(< pt_x pt_xold)
)
   (progn
   (setq pt_xL (+ pt_x (* SS1 0.292893219)))
   (setq pt_yL (- pt_y (* SS1 0.292893219)))
   (setq pt_xLo (- pt_xold (* SS1 0.292893219)))
   (setq pt_yLo (+ pt_yold (* SS1 0.292893219)))
   (setq PTXYL (LIST pt_xL pt_yL))
   (setq PTXYLO (LIST pt_xLo pt_yLo))
           (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""270") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 270) ;↖                          
   ))
   (IF(AND ;↖↑
(= sss 270)
(> pt_y pt_yold)
(= pt_x pt_xold)
)
   (progn
           (setq pt_yL (- pt_y (* SS1 0.414213562)))
   (setq pt_yLo (+ pt_yold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""90") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 3)                              
   ))
   (IF(AND ;↖←
(= sss 270)
(= pt_y pt_yold)
(< pt_x pt_xold)
)
   (progn
   (setq pt_xL (+ pt_x (* SS1 0.414213562)))
   (setq pt_xLo (- pt_xold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""315") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 2)                              
   ))
   ;                                      ;
   ;↓↙↓&↓↘↓;
   (IF(AND ;↓↙
(= sss 4)
(< pt_y pt_yold)
(< pt_x pt_xold)
)
   (progn
   (setq pt_xL (+ pt_x (* SS1 0.292893219)))
   (setq pt_yL (+ pt_y (* SS1 0.292893219)))
   (setq pt_xLo (- pt_xold (* SS1 0.292893219)))
   (setq pt_yLo (- pt_yold (* SS1 0.292893219)))
   (setq PTXYL (LIST pt_xL pt_yL))
   (setq PTXYLO (LIST pt_xLo pt_yLo))
           (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""225") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 225) ;↙
   ))
   (IF(AND ;↙↓
(= sss 225)
(< pt_y pt_yold)
(= pt_x pt_xold)
)
   (progn
   (setq pt_yL (+ pt_y (* SS1 0.414213562)))
   (setq pt_yLo (- pt_yold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""45") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 4)                              
   ))
   (IF(AND ;↙←
(= sss 225)
(= pt_y pt_yold)
(< pt_x pt_xold)
)
   (progn
   (setq pt_xL (+ pt_x (* SS1 0.414213562)))
   (setq pt_xLo (- pt_xold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""180") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 2)                              
   ))  
   (IF(AND ;↓↘
(= sss 4)
(< pt_y pt_yold)
(> pt_x pt_xold)
)
   (progn
   (setq pt_xL (- pt_x (* SS1 0.292893219)))
   (setq pt_yL (+ pt_y (* SS1 0.292893219)))
   (setq pt_xLo (+ pt_xold (* SS1 0.292893219)))
   (setq pt_yLo (- pt_yold (* SS1 0.292893219)))
   (setq PTXYL (LIST pt_xL pt_yL))
   (setq PTXYLO (LIST pt_xLo pt_yLo))
           (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""90") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 90); ↘
   ))
   (IF(AND ;↘↓
(= sss 90)
(< pt_y pt_yold)
(= pt_x pt_xold)
)
   (progn
   (setq pt_yL (+ pt_y (* SS1 0.414213562)))
   (setq pt_yLo (- pt_yold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""270") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 4)                              
   ))
   (IF(AND ;↘→
(= sss 90)
(= pt_y pt_yold)
(> pt_x pt_xold)
)
   (progn
   (setq pt_xL (- pt_x (* SS1 0.414213562)))
   (setq pt_xLo (+ pt_xold (* SS1 0.414213562)))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")  
   (command "INSERT""EXL-45ELISP"PTXYold SS1"""135") ;插入45彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 1)                              
   ))
   ;                                      ;
   
   (IF(AND                                      ;→↑
                  (= sss 1)
  (> pt_y pt_yold)
  (= pt_x pt_xold)
  )
   (progn
           (setq pt_yL (- pt_y SS1))
   (setq pt_yLo (+ pt_yold SS1))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-90ELISP"PTXYold SS1"""90") ;插入彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 3)))

   (IF(AND
  (= sss 1)                             ;→↓
  (< pt_y pt_yold)
  (= pt_x pt_xold)
  )
   (progn
   (setq pt_yL (+ pt_y SS1))
   (setq pt_yLo (- pt_yold SS1))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-90ELISP"PTXYold SS1"""180") ;插入彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 4)))

           (IF(AND                                       ;←↑
  (> pt_y pt_yold)
  (= pt_x pt_xold)
  (= sss 2)
  )
   (progn
           (setq pt_yL (- pt_y SS1))
   (setq pt_yLo (+ pt_yold SS1))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-90ELISP"PTXYold SS1"""0") ;插入彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 3)))
   
   (IF(AND                                       ;←↓
  (< pt_y pt_yold)
  (= pt_x pt_xold)
  (= sss 2)
  )
   (progn
   (setq pt_yL (+ pt_y SS1))
   (setq pt_yLo (- pt_yold SS1))
   (setq PTXYL (LIST pt_x pt_yL))
   (setq PTXYLO (LIST pt_xold pt_yLo))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-90ELISP"PTXYold SS1"""270") ;插入彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 4)))
   
   (IF(AND                                       ;↑→
  (> pt_x pt_xold)
  (= pt_y pt_yold)
                  (= sss 3)
  )
   (progn
   (setq pt_xL (- pt_x SS1))
   (setq pt_xLo (+ pt_xold SS1))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")      
   (command "INSERT""EXL-90ELISP"PTXYold SS1"""270") ;插入彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 1)))
   
   (IF(AND                                       ;↑←
  (< pt_x pt_xold)
  (= pt_y pt_yold)
                  (= sss 3)
  )
   (progn
   (setq pt_xL (+ pt_x SS1))
   (setq pt_xLo (- pt_xold SS1))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")      
   (command "INSERT""EXL-90ELISP"PTXYold SS1"""180");插入彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 2)))
   
   (IF(AND                                      ;↓→
  (> pt_x pt_xold)
  (= pt_y pt_yold)
                  (= sss 4)
  )
   (progn
   (setq pt_xL (- pt_x SS1))
   (setq pt_xLo (+ pt_xold SS1))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-90ELISP"PTXYold SS1"""0") ;插入彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 1)))
   
   (IF(AND                                      ;↓←
  (< pt_x pt_xold)
  (= pt_y pt_yold)
                  (= sss 4)
  )
   (progn
   (setq pt_xL (+ pt_x SS1))
   (setq pt_xLo (- pt_xold SS1))
   (setq PTXYL (LIST pt_xL pt_y))
   (setq PTXYLO (LIST pt_xLO pt_yold))
   (command"MLINE""J""z""s"SS1 PTXYLO PTXYL"")
   (command "INSERT""EXL-90ELISP"PTXYold SS1"""90") ;插入彎頭,名稱,基準點,x比例,y比例,旋轉
   (setq sss 2))))
);if判斷彎頭種類結束
           (IF (= nr 210)
     (progn
       (if (= SSS 1);→
       (command "INSERT"typ2 PTXY SS1"""90")) ;插入開始,名稱,基準點,x比例,y比例,旋轉
(if (= SSS 2);←
       (command "INSERT"typ2 PTXY SS1"""270")) ;插入開始,名稱,基準點,x比例,y比例,旋轉
(if (= SSS 3);↑
       (command "INSERT"typ2 PTXY SS1"""180")) ;插入開始,名稱,基準點,x比例,y比例,旋轉
(if (= SSS 4);↓
       (command "INSERT"typ2 PTXY SS1"""")) ;插入開始,名稱,基準點,x比例,y比例,旋轉
(if (or(= SSS 180)(= SSS 45));↗
       (command "INSERT"typ2 PTXY SS1"""135")) ;插入開始,名稱,基準點,x比例,y比例,旋轉
(if (or(= SSS 90)(= SSS 315));↘
       (command "INSERT"typ2 PTXY SS1"""45")) ;插入開始,名稱,基準點,x比例,y比例,旋轉
(if (or(= SSS 0)(= SSS 225));↙
       (command "INSERT"typ2 PTXY SS1"""315")) ;插入開始,名稱,基準點,x比例,y比例,旋轉
(if (or(= SSS 135)(= SSS 270));↖
       (command "INSERT"typ2 PTXY SS1"""225")) ;插入開始,名稱,基準點,x比例,y比例,旋轉
               ;←→↑↓↗↘↙↖
     )
   )
   (setq pt_xold pt_x)
   (setq pt_yold pt_y)
   (setq PTXYold PTXY)
   (setq pldate (cdr pldate))                   ;去第一個資料後的資料串列
   (setq plone(car pldate))                     ;(0 . "LWPOLYLINE")
 ); while結束
 (entdel pl)
 (command"redraw")
 (setvar "CMDECHO" par1)
 (setvar "osmode" pmodec)
 ;(setq pmodec nil)
 ;(grdraw zero zero1 1 2); 畫出一條暫時的線,起點,終點,顏色 亮顯
(gc)
);結束
(prompt "*************** <<AE>> *****************")
(prin1)

[/code]
附件
pic43603 (1).jpg 您無權下載這里的附件。(35 Kb) 下載 10 次
EXH-LISP.zip 您無權下載這里的附件。(55 Kb) 下載 10 次
avatar
hendry
一般會員
一般會員

文章總數 : 28
年齡 : 33
來自 : 台南
職業 : 建築相關
愛好 : 吃喝玩樂
個性 : 好學
使用年資 : 6
使用版本 : 2008
經驗值 : 1801
威望值 : 24
注冊日期 : 2013-04-24
男 巨蟹座 鼠

回頂端 向下

回復: [討論]請問為什麼LISP有時候可執行,有時候不行

發表 由 yakuei88 于 2015-08-10, 07:04

關於 [ 插入圖塊 ] 的 AutoLisp 程式,
一般都會以幻燈片影像檔的對話框,
點取圖塊, 插入圖檔來設計.
如果您對圖塊/幻燈片建立有概念,
可以參考阿貴寫的 IBSD_預覽幻燈片影像的插入圖塊程式 ,
來寫出您想要的插入圖塊的 AutoLisp 程式
avatar
yakuei88
一般會員
一般會員

文章總數 : 27
年齡 : 51
來自 : 高雄市
職業 : 雷射板金繪圖
愛好 : autolisp程式設計
個性 : 勤奮努力
使用年資 : 20年
使用版本 : 2012
經驗值 : 1530
威望值 : 42
注冊日期 : 2014-01-14
男 摩羯座 蛇

回頂端 向下

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


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