找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 493|回复: 2

[讨论]:帮忙看看这段代码,问题出在那里?

[复制链接]
发表于 2006-5-26 22:40:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
这段代码在R14执行下毫无问题,可是在cad2004下就经常出现死循环(其他版本似乎也是一样的,没太用心测试)。
在p0点此只有一个实体et时候没问题,一旦有多个实体时候,r14没问题,cad2004就循环死了。

  1.   [FONT=courier new]
  2. ;;; 匹配点选对象
  3. (defun chengs_ssgetPoint (p0 filter_list / et i result ss ss2)
  4.         (chengs_error)
  5.         (setq result (ssadd))
  6.         (setq chengs_entdel (ssadd))
  7.         ;(while (setq ss (ssget p0 filter_list))
  8.         (while (setq ss (ssget p0))
  9.                 (setq et (ssname ss 0))
  10.                 (setq ss2 (ssget "P" filter_list))
  11.                 (if ss2
  12.                         (ssadd (ssname ss2 0) result)
  13.                 ) ; endif
  14.                 (ssadd et chengs_entdel)
  15.                 ;(redraw et 2)
  16.                 (entdel et)
  17.         ) ; endwhile

  18.         (setq i 0)
  19.         (while (setq et (ssname chengs_entdel i))
  20.                 (setq i (1+ i))
  21.                 ;(redraw et 1)
  22.                 (entdel et)
  23.         ) ; endwhile
  24.         (setq chengs_entdel nil)
  25.         (if (> (sslength result) 0)
  26.                 result
  27.                 nil
  28.         )
  29. )
  30. ;;; endfun chengs_ssgetpoint
  31.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1915个

财富等级: 堆金积玉

发表于 2006-5-27 00:04:57 | 显示全部楼层
我在2004下试了一下,选择了多条线,没有死循环!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-27 10:50:17 | 显示全部楼层
并不是所有都会,随便新建一个.dwg没什么问题,
可是在工作中,dwg文件大小单位为M,有N个布局的情况下,很容易在陷入死循环中,while()前后加个princ 1,princ 2就能知道,是这个while的问题。
原本是采用redraw来隐藏实体,可是2004下经常不买帐,才改用entdel来实现,虽然比redraw要好点,可是还是出现问题。

原本在r14下工作中没问题,可是因为工作原因,需要在布局下绘图,才用2004,经常出现这个问题,太多程序用了这个函数,俺都头疼。。。。。

很简陋的方法就是只能把其他需要过滤的东东,自己先把他隐藏起来,程序才能得以顺利执行。

比如这个程序:

  1.   [FONT=courier new]
  2. (defun c:zdz ( / arg lay ln1 ln1_ss p0 x)
  3.         (chengs_error)
  4.         (chengs_getvar)
  5.         (chengs_fun "chengs_ctbl")
  6.         (setq x (/ chengs_ctbl 100.0))
  7.         (setq p0 (getpoint "\n 选择插入点: "))
  8.         (setq arg (getangle p0 "\n 插入角度 : "))
  9.         (if (null arg) (setq arg 0))
  10.         (setq ln1_ss (chengs_ssgetPoint p0 (list (cons 0 "*LINE")) ))
  11.         (if ln1_ss
  12.                 (progn
  13.                         (setq ln1 (ssname ln1_ss 0))
  14.                         (setq lay (cdr(assoc 8 (entget ln1))))
  15.                         (setvar "clayer" lay)
  16.                 ) ;endthen
  17.         );endif
  18.         (setq arg (chengs_pi2r arg))
  19.         (if p0
  20.                 (command ".insert" "./dwg/zdz.dwg" p0 x x arg)
  21.         )
  22.         (chengs_setvar)
  23. );endfun
  24.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 23:27 , Processed in 0.201827 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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