Jef!,你的回复是我收到的最好的回复!
当然,我会把你加入学分!
也许你已经注意到了,我从你那里得到了第一个例子——编写代码似乎并不难:
实际上,这个例程是我的更大的(selecion filter例程)的一小部分,所以它的信息将是这样的(我希望每个人都在学分中感到高兴):
- (defun c:test ( / SelectedFirst ent layername sset sspos e)
- ;Jef! 2016-02-25
- (vl-load-com)
- (setvar 'errno 0)
- (if (setq SelectedFirst (ssget "_I"))
- (sssetfirst nil nil);required
- )
- (while (not (and (setq ent (car(entsel "\nSelect an object of the required layer: ")))
- (setq layername (cdr (assoc 8 (entget ent))))
- )
- )
- (cond
- ( (= 52 (getvar 'errno))
- (princ "\nYou must select an object.")
- )
- ( (null ent)
- (princ "\nYou missed, try again.")
- )
- )
- )
- (princ (strcat "\nLayername to filter "" layername "" " ))
- (princ "\nSelect objects to filter and press enter OR press enter right away to filter all: \n")
- (if (not (setq sset (ssget (list (cons 8 layername)))))
- (setq sset (ssget "_X" (list (cons 8 layername) (cons 410 (getvar 'ctab)))))
- )
- (if SelectedFirst
- (progn
- (setq sspos (sslength SelectedFirst))
- (while (setq e (ssname SelectedFirst (setq sspos (1- sspos))))
- (ssadd e sset)
- )
- )
- )
- (sssetfirst nil sset)
- (vla-Regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport)
- (princ)
- )
我刚刚发布了其中的一部分,以澄清我的问题-因为它对我很重要。
整个程序仍在进行中,完成后我会发布。
我不是一个英俊的程序员,但我一点一点地学习,我擅长从其他代码/示例中组装东西。
是的,李·麦克无处不在(在每一段代码中),即使你没有预料到。我还从他那里学到了errno变量(和许多其他东西)
最后,对我来说唯一重要的是最后一个例程(因为我们都是ACAD用户/起草者)。如果不是全部,至少我是!
我可能会重读你的帖子几次(因为编码很难),但你发布的最终结果正是我想要的!
编辑:
我读得越多,我就越明白我问的问题有多复杂(嗯,回答得慢或没有回答都证实了这一点)。
好吧,用一个例子来回答你的感受(这是对的):
1、运行例程
2.选择实体以存储其层(将其命名为layer1)
3、按该层过滤对象
4.现在过滤后,用户保留该选择
5、重新运行例程
6.根据实体类型选择要存储的实体(假设这是一个圆)
7、按该实体类型过滤对象
8.选择包含第1层上的实体和圆形实体(无论层如何)
该方法提供了过滤选择的无限堆叠,其中包含各种对象。
下一种可能是隔离/擦除/另存为新的SELSET/etc。。。最后的选择和其他程序。
这就是整个概念。。。
谢谢你,杰夫! |