明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2667|回复: 16

请教一个难题,大侠才懂!!!

  [复制链接]
发表于 2003-9-25 10:22:00 | 显示全部楼层 |阅读模式
(setq ss (ssget '((0 . "LINE"))))
(setq nn 0)
(repeat (sslength ss)
(setq l1 (ssname ss nn))
上面循环到某个l1时,假设nn=7
(ssdel l1 ss)消除第8条直线
(setq nn (1+ nn))这时会不会跳到第10条直线去?
谢谢!!!
发表于 2003-9-25 12:50:00 | 显示全部楼层
为什么不自己试试呢?
不错,会,而且你的程序这样循环有问题,因为最后的nn可能会大于原来的(sslength ss)了
发表于 2003-9-25 15:27:00 | 显示全部楼层
我认为 第一行好像就有问题。此处需要交互式选择,我认为应该给定最好。
其二,ssdel  好像只能把某个实体从选择集中去除,而非删除。
最后,才是循环的问题,你去除了实体,当然选择集的长度就变了, repeat 循环次数是变化的
,导致出错!
发表于 2003-9-25 16:06:00 | 显示全部楼层
repeat循环次数是不变的,只是后来的nn会达到原来选择集内对象数目,而现在选择集已没有那么多对象,导致(ssname ss nn)出错。
看下面的程序,判断循环次数是否变化,选择4个以上对象
(defun c:test()
  (setq ss (ssget))
  (setq i 0)
  (repeat (sslength ss)
    (if (> (sslength ss) 0)(ssdel (ssname ss 0) ss))
    (if (> (sslength ss) 0)(ssdel (ssname ss 0) ss))
    (setq i (1+ i))
  )
)
发表于 2003-9-25 16:18:00 | 显示全部楼层
很对,这个  重复的次数 在进入循环时已确定! 执行一次后,不再作为循环语句执行。
 楼主| 发表于 2003-9-25 16:23:00 | 显示全部楼层
谢谢!!!
如果(setq l1 (ssname ss nn))
改为(command "erase" l1 "")
结果一样吗?
发表于 2003-9-25 16:37:00 | 显示全部楼层
ssdel是从选择集中"去除"你的ll
(command "erase" ll "")或(entdel ll)是将ll"代表"的实体给杀了.
发表于 2003-9-25 16:40:00 | 显示全部楼层
本帖最后由 作者 于 2003-9-26 9:45:08 编辑

不解其意,是将  ssdel  改成  erase  吧,用  entdel  也可以实现。
发表于 2003-9-25 16:49:00 | 显示全部楼层
其实用什么都好,问题是楼主到底是要做什么?
发表于 2003-9-25 16:54:00 | 显示全部楼层
我倒有这个ssget 的问题:
  好像可以这样写    (setq  ss (ssget  '(0 0)  ' ((0 . "LINE"))))
  意思是,通过 0,0 点的所有直线选择集 ,但是,只能返回 1个  ,用sslength 得到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 16:31 , Processed in 0.190936 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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