yhly555 发表于 2015-12-16 09:31:00

块分解后如何写入扩展数据

本帖最后由 yhly555 于 2015-12-17 08:11 编辑

存在问题:dwg图中红色块分解后如何写入扩展数据,白色块分解后却不能,不知道为什么?请高手帮忙,谢谢!;存在问题:dwg图中红色块分解后可以写入扩展数据,白色块分解后却不能,不知道为什么?请高手帮忙,谢谢!

(defun c:bn ()
(setq ss (ssget '((0 . "INSERT"))) Index 0)
(repeat (sslength ss)
    (setq Ename (ssname ss Index))
    (setq Index (1+ Index))
    (command "_EXPLODE" Ename)
    (princ (entlast))
    (TTEDIT (entlast) "AAA" (cons 1000 "写入的扩展数据" ) "ALL")      ;地块标志符
)
)

(vl-load-com)
;;;=============================================
;;;      通用函数   扩展数据的添加            
;;;参数:en       ----对象图元名            
;;;      app_name ----扩展应用名               
;;;      v1       ----值                        
;;;      STR      ----操作标识。含义如下:
;;;                     "DelOnly"删除指定应用名的扩展数据,不添加
;;;                     "DelAll" 删除所有应用名的扩展数据,不添加
;;;                     "Add"    不覆盖现有扩展数据,添加新的数据
;;;                     "Del"    删除指定应用名下的扩展数据,添加新的数据
;;;                     "All"    删除所有应用名下的扩展数据,添加新的数据
;;;日期:zml84 修改于 2013-07-18
(defun TTEDIT (EN APP_NAME V1 STR / ENL TMP TMP1 TMP2)
;;转换为大写
(setq STR (strcase STR))
;;
(cond
    ;;1.删除指定应用名的扩展数据
    ((= STR "DELONLY")
      (setq ENL (entget EN (list APP_NAME)))
      (if (assoc -3 ENL)
      (entmod (subst (list -3 (list APP_NAME)) (assoc -3 ENL) ENL)
      )
      )
    )
    ;;2.删除原来所有的扩展数据
    ((or (= STR "DELALL")
      (= STR "ALLDEL")
      )
      (setq ENL (entget EN (list "*")))
      (setq TMP (cdr (assoc -3 ENL)))
      ;;逐个删除
      (foreach N TMP
      (TTEDIT EN (car N) NIL "DELONLY")
      )
    )
    ;;3.不操作任何扩展数据(如果注册的是已有的也不覆盖)
    ((or (= STR "ADD")
      (= STR "")
      )
      (setq ENL (entget EN (list APP_NAME)))
      (setq TMP (cdr (assoc -3 ENL)))
      (setq TMP1 (cdr (assoc APP_NAME TMP)))
      (if TMP1
      (setq TMP2(append TMP1 (list V1))
          ENL(subst (list -3 (cons APP_NAME TMP2)) (assoc -3 ENL) ENL)
      )
      (setq ENL (append ENL (list (list -3 (list APP_NAME V1)))))
      )
      
      (regapp APP_NAME);;更新
      (entmod ENL)
    )
   
    ((= STR "DEL");;4.删除当前,添加新的数据      
      (TTEDIT EN APP_NAME NIL "DELONLY");;删除原来所有的扩展数据      
      (TTEDIT EN APP_NAME V1 "ADD");;添加新的数据
    )   
    ((= STR "ALL");;5.删除原来所有的扩展数据,添加新的数据      
      (TTEDIT EN NIL NIL "DELALL");;删除原来所有的扩展数据      
      (TTEDIT EN APP_NAME V1 "ADD");;添加新的数据
    )   
) ;_结束COND
)
页: [1]
查看完整版本: 块分解后如何写入扩展数据