试试这个:
(defun C:test (/ vc scs hv wh i l nss ss tssi)
;;; JDiala 10-23-13 ;;;
;;;; Cadtutor.net ;;;;;
(setq vc (getvar 'viewctr)
scs (getvar 'screensize)
hv (/ (getvar 'viewsize) 2.)
wh (* hv (/ (car scs) (cadr scs)))
l nil
nss (ssadd)
)
(mapcar
(function
(lambda (x)
(repeat
(setq i
(sslength
(setq tss
(ssget "_W"
(list (- (car vc) wh) (- (cadr vc) hv) 0.0)
(list (+ (car vc) wh) (+ (cadr vc) hv) 0.0)
(list (cons 0 (if (= (car x) "INSERT") "INSERT" (car x)))
(if (= (car x) "INSERT")
(cons 2 (cadr x))
(cons 8 (cadr x))
)
)
)
)
)
)
(ssadd (ssname tss (setq i (1- i))) nss)
)
)
)
(progn
(setq ss (ssget ))
(repeat (setq i (sslength ss))
(setq i (1- i)
e (ssname ss i))
(cond
( (= l nil)
(if (= "INSERT" (cdr (assoc 0 (entget e))))
(setq l (cons (list "INSERT" (cdr (assoc 2 (entget e)))) l))
(setq l (cons (list (cdr (assoc 0 (entget e))) (cdr (assoc 8 (entget e)))) l ))
)
)
( (not
(member
(if (= "INSERT" (cdr (assoc 0 (entget e))))
(list "INSERT" (cdr (assoc 2 (entget e))))
(list (cdr (assoc 0 (entget e))) (cdr (assoc 8 (entget e))))
) l
)
)
(if (= "INSERT" (cdr (assoc 0 (entget e))))
(setq l (cons (list "INSERT" (cdr (assoc 2 (entget e)))) l))
(setq l (cons (list (cdr (assoc 0 (entget e))) (cdr (assoc 8 (entget e)))) l ))
)
)
(t (setq l l))
)
)
)
)
(command "_.isolateobjects" nss "")
) 好吧,这很奇怪。我再次测试了那段旧代码,它仍然有效。对不起,我很痛苦。我不知道我哪里出错了。我更改了:
为了满足我的需要:
非常感谢你。在我看来,这比内置功能要好。通过这种方式,您可以最大化并执行此操作,或者在特定区域中工作,而无需取消选择超出需要的内容。
荣誉。 非常感谢pselect正在工作。 你应该感谢的是jdiala jdiala先生的上述代码与cad 2006完美结合。
请你解释一下下面代码部分的功能好吗
8 我认为这是打字错误,如果有人问我,我会将“_C”改为“_W”,并对结果感到满意。。。 甚至没有C或W代码是正确的。但我需要理解代码的功能。我的意思是它如何过滤正确的
窗口内的对象minv和maxv
请解释一些LISP专家。
注意:我不是lisp专家。
我使用了图形的最大范围,即extmin和extmax变量。由于选项“_C”将仅选择屏幕上可见的内容,因此我选择的2个点是否在屏幕之外并不重要。
要获得完整的解释,请阅读此。。。
来自lisp专家Lee Mac 谢谢你的夸奖,尽管我也在向别人学习
下面是编写程序的另一种方法:
注:上述内容与动态块参考不兼容。 李代码不错。你负责UCS和ctab,这是我没有考虑的。再次从你身上吸取教训。非常感谢。
页:
1
[2]