乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 144|回复: 9

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

[复制链接]

15

主题

35

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 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条直线去?
谢谢!!!
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-9-25 12:50:00 | 显示全部楼层
为什么不自己试试呢?
不错,会,而且你的程序这样循环有问题,因为最后的nn可能会大于原来的(sslength ss)了
回复

使用道具 举报

76

主题

595

帖子

10

银币

中流砥柱

Rank: 25

铜币
899
发表于 2003-9-25 15:27:00 | 显示全部楼层
我认为 第一行好像就有问题。此处需要交互式选择,我认为应该给定最好。
其二,ssdel  好像只能把某个实体从选择集中去除,而非删除。
最后,才是循环的问题,你去除了实体,当然选择集的长度就变了, repeat 循环次数是变化的
,导致出错!
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 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))
  )
)
回复

使用道具 举报

76

主题

595

帖子

10

银币

中流砥柱

Rank: 25

铜币
899
发表于 2003-9-25 16:18:00 | 显示全部楼层
很对,这个  重复的次数 在进入循环时已确定! 执行一次后,不再作为循环语句执行。
回复

使用道具 举报

15

主题

35

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
95
发表于 2003-9-25 16:23:00 | 显示全部楼层
谢谢!!!
如果(setq l1 (ssname ss nn))
改为(command "erase" l1 "")
结果一样吗?
回复

使用道具 举报

26

主题

345

帖子

11

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
448
发表于 2003-9-25 16:37:00 | 显示全部楼层
ssdel是从选择集中"去除"你的ll
(command "erase" ll "")或(entdel ll)是将ll"代表"的实体给杀了.
回复

使用道具 举报

76

主题

595

帖子

10

银币

中流砥柱

Rank: 25

铜币
899
发表于 2003-9-25 16:40:00 | 显示全部楼层

不解其意,是将  ssdel  改成  erase  吧,用  entdel  也可以实现。
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-9-25 16:49:00 | 显示全部楼层
其实用什么都好,问题是楼主到底是要做什么?
回复

使用道具 举报

76

主题

595

帖子

10

银币

中流砥柱

Rank: 25

铜币
899
发表于 2003-9-25 16:54:00 | 显示全部楼层
我倒有这个ssget 的问题:
  好像可以这样写    (setq  ss (ssget  '(0 0)  ' ((0 . "LINE"))))
  意思是,通过 0,0 点的所有直线选择集 ,但是,只能返回 1个  ,用sslength 得到。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-6 08:31 , Processed in 0.767101 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表