明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 647|回复: 3

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

[复制链接]
发表于 2020-3-11 22:50 | 显示全部楼层 |阅读模式
源码来自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)
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-3-11 22:55 | 显示全部楼层
你不觉得你发少了*error*_non函数的代码吗?
发表于 2020-3-12 10:24 | 显示全部楼层
本帖最后由 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)    這個是多餘的                        
  )                                                      

点评

谢谢,我试试,好像把while注解掉就没有问题了~  发表于 2020-3-12 11:37
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-6-13 19:51 , Processed in 0.167170 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表