明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1879|回复: 7

【求教】在一个CAD里调试好的程序换到另一个CAD里面就不能完美执行!

[复制链接]
发表于 2012-12-17 15:19 | 显示全部楼层 |阅读模式
问题如题,程序是在CAD2009为基础的天正道路软件上调试成功的,百试百灵,但是当我把程序加载到CAD2009和CAD2006时确不能完美运行了,不知是什么原因,特此请高手帮忙解决下。图片及源码如下:
1、这个程序主要的目的就是找到半径小于30的圆弧,并将它们的弧长统计后以表格形式写出(相同半径的圆弧,弧长相加后写出):

2、我在在CAD2009为基础的天正道路软件上运行结果:

3、问题出现,在CAD2009和CAD2006上运行结果:

4、以下是测试用图和源码:


最后,感谢QQ群里【KAIXIN】的热心帮助!在下新手+业余,期待指导,再次感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

关闭捕捉!  发表于 2012-12-17 15:54
发表于 2012-12-17 15:46 | 显示全部楼层
CAD2006中测试没问题,应该是运行前开了捕捉的问题
发表于 2012-12-17 15:56 | 显示全部楼层
程序在设计时欠考虑!
可以在程序开始时,先用变量取得系统变量osmode的值,再(setvar "osmode" 0)关闭捕捉,程序最后再将系统变量osmode的值还原。
发表于 2012-12-17 16:05 | 显示全部楼层
设:没有捕捉,2004没问题,不过程序有待简化!
  1. (princ "\n                   **********************Written by Cxg.**********************\n                   ********************Thanking for using!********************\n")
  2. (defun c:bs (/ pt1 pt2 pt3 pt4 pt5 pt6 pt1a pt5a pt2a ww hh ss n m en obj r l pt11 pt22 pt33 pt44 pt55 pt66 pt11a pt55a pt22a ssr ssl enr_1 objr_1 r_1 l_1 l_sub enr_2 objr_2)
  3.       (vl-load-com)
  4. (setq mkj (getvar 'OSMODE))        ;提取捕捉
  5. (setvar "osmode" 0)
  6.       (setq acadobj (vlax-get-acad-object))
  7.       (setq dwgobj (vla-get-activedocument acadobj))
  8.       (setq mspace (vla-get-modelspace dwgobj))
  9.       (setvar "cmdecho" 0)
  10. ;---------------------------------------------------------------------------
  11.       (setq pt11 (getpoint "\n插入统计表格左上角点:"))
  12.       (setq ww (getdist pt11 "\n列宽<50>:"))
  13.       (if (null ww) (setq ww 50.0))
  14.       (setq hh (getdist pt11 "\n行高<6>:"))
  15.       (if (null hh) (setq hh 6.0))
  16.       (setq pt1 (polar pt11 pi ww))
  17.       (setq pt2 (polar pt1 0 ww))
  18.       (setq pt3 (polar pt2 (* pi 1.5) hh))
  19.       (setq pt4 (polar pt1 (* pi 1.5) hh))
  20.       (setq pt5 (polar pt1 0 (* 0.5 ww)))
  21.       (setq pt6 (polar pt5 (* pi 1.5) hh))
  22.       (setq pt1a pt1 pt5a pt5 pt2a pt2)
  23.       (setq ss (ssget))
  24.       (prompt "\n选择道路边线:")
  25.       (if (null ss)
  26.         (progn
  27.             (alert "没有选择需要统计的对象!")
  28.             (exit)
  29.         )
  30.       )
  31.       (command "layer" "m" "边石统计" "c" "1" "" "")
  32.       (command "pline" pt4 pt3 "")
  33.       (command "text" "m" (inters pt1 pt6 pt4 pt5) 2.5 0 "半径(m)")
  34.       (command "text" "m" (inters pt5 pt3 pt2 pt6) 2.5 0 "弧长(m)")
  35.       (setq n 0 m 0)
  36.       (repeat (sslength ss)
  37.         (setq en (ssname ss n))
  38.         (setq obj (vlax-ename->vla-object en))
  39.         (if
  40.             (= (vla-get-objectname obj) "AcDbArc")
  41.             (if
  42.                 (< (vla-get-radius obj) 30)
  43.                 (progn
  44.                     (setq r (rtos (vla-get-radius obj) 2 1))
  45.                     (setq l (rtos (vla-get-arclength obj) 2 1))
  46.                     (setq pt1 pt4 pt5 pt6 pt2 pt3)
  47.                     (setq pt4 (polar pt1 (* pi 1.5) hh))
  48.                     (setq pt6 (polar pt5 (* pi 1.5) hh))
  49.                     (setq pt3 (polar pt2 (* pi 1.5) hh))
  50.                     (command "pline" pt4 pt3 "")
  51.                     (command "text" "m" (inters pt1 pt6 pt4 pt5) 2.5 0 r)
  52.                     (command "text" "m" (inters pt5 pt3 pt2 pt6) 2.5 0 l)
  53.                     (setq m (1+ m))
  54.                 )
  55.             )
  56.         )
  57.         (setq n (1+ n))
  58.     )
  59.     (setq ss (ssget "w" (polar pt1a (* pi 1.5) hh) pt6))
  60.     (if (null ss)
  61.             (progn
  62.                         (command "erase" "w" pt1a pt3 "")
  63.                         (alert "没有选择需要统计的对象!")
  64.                 (exit)
  65.         )
  66.     )
  67.     (command "pline" pt4 pt1a pt2a pt3 "")
  68.     (command "pline" pt5a pt6 "")
  69. ;---------------------------------------------------------------------------
  70.     (setq pt22 (polar pt11 0 ww))
  71.     (setq pt33 (polar pt22 (* pi 1.5) hh))
  72.     (setq pt44 (polar pt11 (* pi 1.5) hh))
  73.     (setq pt55 (polar pt11 0 (* 0.5 ww)))
  74.     (setq pt66 (polar pt55 (* pi 1.5) hh))
  75.     (setq pt11a pt11 pt55a pt55 pt22a pt22)
  76.     (command "text" "m" (inters pt11 pt66 pt44 pt55) 2.5 0 "半径(m)")
  77.     (command "text" "m" (inters pt55 pt33 pt22 pt66) 2.5 0 "弧长(m)")
  78.     (command "pline" pt44 pt33 "")
  79.     (setq ssr (ssget "w" (polar pt1a (* pi 1.5) hh)  pt6))
  80.     (while ssr
  81.       (setq ssr (ssget "w" (polar pt1a (* pi 1.5) hh)  pt6))
  82.       (if ssr
  83.               (progn
  84.                   (setq ssl (ssget "w" (polar pt5a (* pi 1.5) hh)  pt3))
  85.                   (setq enr_1 (ssname ssr 0))
  86.                   (setq objr_1 (vlax-ename->vla-object enr_1))
  87.                   (setq enl_1 (ssname ssl 0))
  88.                   (setq  objl_1 (vlax-ename->vla-object enl_1))
  89.                   (setq r_1 (vla-get-TextString objr_1) l_1 (vla-get-TextString objl_1))
  90.                   (setq l_sub (atof l_1))
  91.                   (vla-delete objr_1)
  92.                   (vla-delete objl_1)
  93.                   (setq a 1)
  94.                   (repeat (- (sslength ssr) 1)
  95.                           (setq enr_2 (ssname ssr a))
  96.                           (setq objr_2 (vlax-ename->vla-object enr_2))
  97.                           (setq enl_2 (ssname ssl a))
  98.                           (setq objl_2 (vlax-ename->vla-object enl_2))
  99.                           (if
  100.                                   (= r_1 (vla-get-TextString objr_2))
  101.                                   (progn
  102.                                           (setq l_sub (+ l_sub (atof (vla-get-TextString objl_2))))
  103.                                           (vla-delete objr_2)
  104.                                           (vla-delete objl_2)
  105.                                   )
  106.                           )
  107.                           (setq a (1+ a))
  108.                   )
  109.                   (setq pt11 pt44 pt55 pt66 pt22 pt33)
  110.                   (setq pt44 (polar pt11 (* pi 1.5) hh))
  111.                   (setq pt66 (polar pt55 (* pi 1.5) hh))
  112.                   (setq pt33 (polar pt22 (* pi 1.5) hh))
  113.                   (command "pline" pt44 pt33 "")
  114.                   (command "text" "m" (inters pt11 pt66 pt44 pt55) 2.5 0 r_1)
  115.                   (command "text" "m" (inters pt55 pt33 pt22 pt66) 2.5 0 (rtos l_sub 2 1))
  116.                   )
  117.                 )
  118.         )
  119.     (command "pline" pt44 pt11a pt22a pt33 "")
  120.     (command "pline" pt55a pt66 "")
  121.     (command "erase" "w" pt1a pt3 "")
  122.     (command "zoom" "w" (polar pt11a (* 0.75 pi) 10) (polar pt33 (* 1.75 pi) 10) "")
  123.     (command "PEDIT" "m" (polar pt11a 0 1) (polar pt44 0 1) "" "j" "" "")
  124. (setvar "osmode" mkj)
  125.     (princ)
  126. )
  127. ;---------------------------------------------------------------------------------------------
 楼主| 发表于 2012-12-17 16:09 | 显示全部楼层
zyhandw 发表于 2012-12-17 15:56
程序在设计时欠考虑!
可以在程序开始时,先用变量取得系统变量osmode的值,再(setvar "osmode" 0)关闭捕捉 ...

果然高手!十分感谢!!!!
 楼主| 发表于 2012-12-17 16:11 | 显示全部楼层
【KAIXIN】 发表于 2012-12-17 16:05
设:没有捕捉,2004没问题,不过程序有待简化!

嗯   程序的确该减肥   十分感谢!!!
发表于 2012-12-17 16:11 | 显示全部楼层
changxingge 发表于 2012-12-17 16:09
果然高手!十分感谢!!!!

呵呵,见笑了,一点点小经验而已
 楼主| 发表于 2012-12-17 16:12 | 显示全部楼层
感谢G版指点,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 05:06 , Processed in 0.386413 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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