本帖最后由 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
- )
|