机械工程师 发表于 2014-8-8 14:32:41

本帖的程序设计为子程序为什么会用不了。

本帖最后由 机械工程师 于 2014-8-8 14:44 编辑

deloverlaptext.lsp
能正常执行删重字符,

以这个源代码为基础设计了子函数并调用,
deloverlaptextandreturntextsel.lsp
却不能使用,为什么?

命令: test
选择对象: 指定对角点: 找到 18 个
选择对象:; 错误: 参数类型错误: lselsetp nil
命令:
命令: test2
选择对象: 指定对角点: 找到 17 个
选择对象:
共删除2个文字对象。


vlide监视发现sssss运行过程会变成nil,似乎就是(entdel en2)被执行后就是nil了,但是我只是在其前面加了(setq sssss (ssdel en2 sssss))。sssss变成nil的原因究竟是什么?
返回删除图元 e1 后的选择集 ss。命令: (ssdel e3 ss) nil因为 e3 不是选择集 ss 的成员,所以函数返回 nil。

前面的(setq sssss ss),e3会不是sssss的成员?

wowan1314 发表于 2014-8-8 14:48:07

本帖最后由 wowan1314 于 2014-8-8 14:54 编辑

程序不会骗人撒! 说不是就不是啦!


SSSSS指向 ss   然后你把e3从SS删除! 所以sssss也没有E3

你可以吧SSSSS设置为SS的图元名表!
需要的时候再转为选择集!

springwillow 发表于 2014-8-8 15:51:56

这个问题我也遇到过,你用(setq ssss ss)就相当于一个人有两个名字而已,实际指的都是同一个选择集。如果是想要两个一模一样的选择集可以用(setq ss (ssget) ssss(ssget "P"))这样就获得两个一样的选择集,而不是一个人两个名字了。

机械工程师 发表于 2014-8-8 17:40:16

谢谢,
        (setq sssss (ssadd))
        (setq n (sslength ss))
        (setq i 0)
        (repeat n
                (setq sssss (ssadd (ssname ss i) sssss))
                (setq i (1+ i))
        )
这样处理解决了。
页: [1]
查看完整版本: 本帖的程序设计为子程序为什么会用不了。