练习 修改属性块

分类:lisp函数 | 标签: lisp   属性块   属性值  
2009-02-07 08:45 阅读(?)评论(0)

练习 修改属性块的属性值.lsp


;;;=================================================================*
;;;      通用函数                                                   *
;;;功能:获取属性块中全部的属性名称                                 *
;;;参数: EN -----包含属性的块的图元名称                            *
;;;返回:返回属性名称列表。                                         *
;;;日期:zml84 于 2009-09-19                                        *
(defun ZL-INSERT-GETattname (EN / lst E TEST ENt attname)
    (setq lst '()
	  E EN
	  TEST t
    )
    (while (and	TEST
		(setq E (entnext E))
	   )
	(setq ENT (entget E))
	(cond
	    ;;
	    ((not (= (cdr (assoc 0 ENT)) "ATTRIB"))
	     (setq TEST NIL)
	    )
	    ;;
	    ((= "SEQEND" (cdr (assoc 0 ENT)))
	     (setq TEST NIL)
	    )
	    ;;
	    (t
	     (setq attname (cdr (assoc 2 ENT))
		   lst	   (cons attname lst)
	     )
	    )
	) ;_结束cond
    )
    ;;返回
    lst
)
;;;=================================================================*
;;;      通用函数                                                   *
;;;功能:属性块中属性值的获取                                       *
;;;参数:     EN -----包含属性的块的图元名称                        *
;;;      AttName -----属性名称                                      *
;;;返回:成功则返回结果;否则返回nil                                *
;;;日期:zml84 于 2009-08-11                                        *
(defun ZL-INSERT-gETATTVALUE (EN ATTNAME  / RETURN E TEST ENT)
    (setq E EN
	  RETURN NIL
	  TEST t
    )
    (while (and	TEST
		(setq E (entnext E))
	   )
	(setq ENT (entget E))
	(cond
	    ;;
	    ((not (= (cdr (assoc 0 ENT)) "ATTRIB"))
	     (setq TEST NIL)
	    )
	    ;;
	    ((= "SEQEND" (cdr (assoc 0 ENT)))
	     (setq TEST NIL)
	    )
	    ;;
	    ((= (cdr (assoc 2 ENT)) ATTNAME)   	      	
	     (setq RETURN (cdr (assoc 1 ENT)))
	     (setq TEST NIL)
	    )
	) ;_结束cond
    )
    ;;返回
    RETURN
)

;;;=================================================================*
;;;      通用函数                                                   *
;;;功能:属性块中属性值的修改                                       *
;;;参数:     EN -----包含属性的块的图元名称                        *
;;;      AttName -----属性名称                                      *
;;;        Value -----修改为的值                                    *
;;;返回:T表示修改成功;否则返回nil                                 *
;;;日期:zml84 于 2009-02-05                                        *
(defun ZL-INSERT-SETATTVALUE (EN ATTNAME VALUE / RETURN E TEST ENT)
    (setq E EN
	  RETURN NIL
	  TEST t
    )
    (while (and	TEST
		(setq E (entnext E))
	   )
	(setq ENT (entget E))
	(cond
	    ;;
	    ((not (= (cdr (assoc 0 ENT)) "ATTRIB"))
	     (setq TEST NIL)
	    )
	    ;;
	    ((= "SEQEND" (cdr (assoc 0 ENT)))
	     (setq TEST NIL)
	    )
	    ;;
	    ((= (cdr (assoc 2 ENT)) ATTNAME)
	     (setq ENT (subst
			   (cons 1 VALUE)
			   (assoc 1 ENT)
			   ENT
		       )
	     )
	     (entmod ENT)
	     (entupd EN)
	     (setq RETURN t)
	    )
	) ;_结束cond
    )
    ;;返回
    RETURN
)

;;;=============================================*
;;;测试                                         *
;;;                                             *
(defun C:TT (/ SS)
    (if	(setq SS (entsel "\n点取要修改的属性块: "))
	(princ
	    (ZL-INSERT-SETATTVALUE (car SS) "height" "123456789")
	)
    )
    (princ)
)
;;;=============================================*


  最后修改于 2012-01-08 14:20    阅读(?)评论(0)
 
表  情:
加载中...
 

请各位遵纪守法并注意语言文明