hn10183051 发表于 2020-3-11 22:50:16

循环退出出错,请大师们帮忙解决一下。

源码来自http://bbs.mjtd.com/forum.php?mod=viewthread&tid=172592&highlight=%C6%AB%D2%C6
自己修改了一点,程序能正常使用在高版本CAD退出时出现; 错误: 参数类型错误: VLA-OBJECT nil
在07版本测试没有问题,。
请大师们帮帮忙~~~~~~~~谢谢啦!!
(defun c:tt ()
(setq *error*_bak *error*)
(setq *error* *error*_non)
(setq osmode_bak (getvar "osmode"))
(setvar "osmode" 0)
(setvar 'cmdecho 0)
(vl-load-com)
(initget 2)
(setq getds (getreal "\n输入偏移距离<7.5>:"))
(if (not getds)
    (setq getds 7.5)
)
(initget "Q S F")
(setq
    nj-ppy (getkword
      "\n输入选项:[向内偏移(Q)/向外偏移(S)/双向偏移(F)]<Q>:"
    )
)
(if (not nj-ppy)
    (setq nj-ppy "Q")
)
(while
    (if (ssget ":s" '((0 . "Arc,Circle,Ellipse,*Line")))
      (vlax-for obj (vla-get-activeselectionset
      (vla-get-activedocument (vlax-get-acad-object))
      )

(cond
   ((= nj-ppy "Q")
    (vla-offset obj getds) ;内
   )
   ((= nj-ppy "S")
    (vla-offset obj (* getds -1)) ;外
   )
   ((= nj-ppy "F")
    (vla-offset obj getds) ;内
    (vla-offset obj (* getds -1)) ;外
   )
)
      )
      (vlax-release-object obj)
    )
   (setq clay (getvar "clayer"))
   (setq SS1 (ssget "p"))
   (if (= (tblsearch "layer" "中心线") nil)
       (entmake (list
    '(0 . "LAYER")
    '(100 . "AcDbSymbolTableRecord")
    '(100 . "AcDbLayerTableRecord")
    '(70 . 0)
    '(290 . 1)
    (cons 2 "中心线")
    (cons 62 1)
)
       )
       (setvar "clayer" "中心线")
   )
   (command "_change" ss1 "" "properties" "layer" "中心线" "")
)
(SETVAR "CLAYER" CLAY)
(setq *error* *error*_bak)
(setvar "osmode" osmode_bak)
(princ)
)

tryhi 发表于 2020-3-11 22:55:09

你不觉得你发少了*error*_non函数的代码吗?

bssurvey 发表于 2020-3-12 10:24:55

本帖最后由 bssurvey 于 2020-3-12 10:26 编辑

(while                                                   
   (if (ssget ":s" '((0 . "Arc,Circle,Ellipse,*Line")))   
    (vlax-for obj (vla-get-activeselectionset            
      (vla-get-activedocument (vlax-get-acad-object))   
   )                                                   
      (cond                                             
         ((= nj-ppy "Q")                                 
          (vla-offset obj getds) ;內                     
      )                                                
         ((= nj-ppy "S")                                 
          (vla-offset obj (* getds -1)) ;外               
      )                                                
         ((= nj-ppy "F")                                 
          (vla-offset obj getds) ;內                     
         (vla-offset obj (* getds -1)) ;外               
      )                                                
      )                                                   
    )                                                   
   ; (vlax-release-object obj)    這個是多餘的                        
)                                                      
页: [1]
查看完整版本: 循环退出出错,请大师们帮忙解决一下。