本帖最后由 libo2000 于 2012-8-16 17:10 编辑
直接修改图元的'(60 . 1)和(vlax-put-property obj 'Visible 0)都能达到让图元隐藏的效果,
但是用vlax-put-property修改的图元,再(ssget point filter)点选的时候还是能选中该图元;
而直接修改'(60 . 1)的图元,再(ssget point filter)点选的时候无法选中该图元。
利用这个属性,可以很好的控制ssget点选目标。
大家都知道,用lisp直接修改天正图元很容易崩溃,而vlax-put-property修改却很正常。所以,这两者的差别就出来了。
想请教小,如何让(vlax-put-property obj 'Visible 0)的图元,ssget点选的时候无法选中它,即过滤掉他----无法用(not '(60 . 1))来过滤掉,虽然(entget)显示其‘(60 . 1)存在。
原代码如下:
 - (defun ssget_point (p0 filter_list)
- (setq ss (ssget p0)
- hides (ssadd)
- (setq NotHD (list '(-4 . "")))
- )
- (while ss
- (setq et (ssname ss 0))
- (if (ssget p0 filter_list)
- (progn
- (ssadd et result)
- (setq ss nil)
- ) ;endprogn
- (progn
- (if (not (assoc 60 (entget et)))
- (progn
- (ssadd et hides)
- (HideEnt et)
- ) ;endprogn
- )
- (setq ss (ssget p0 NotHD))
- ) ;endelse
- );endif
- ); endwhile
- (setq i 0)
- (while (setq et (ssname Hides i))
- (setq i (1+ i))
- (ShowEnt et)
- ) ; endwhile
- );endfun
- (defun HideEnt (et)
- (#change et 60 1)
- ;(chengs_PutTch et 'Visible 0) ;ssget pt的时候还是能搜索到
- )
- (defun ShowEnt (et)
- (#change et 60 0)
- ;(chengs_PutTch et 'Visible -1) ;ssget pt的时候还是能搜索到
- )
- (defun #change (ename assoc_num newdate)
- (setq edate (assoc assoc_num elist))
- (setq update (cons assoc_num newdate))
- (if edate
- (setq elist (subst
- update
- edate
- elist
- )
- )
- (setq elist (append
- elist
- (list update)
- )
- )
- )
- (entmod elist)
- )
|