明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2468|回复: 5

对象更新后原属性丢失,替换或插入当前日期,不完美

[复制链接]
发表于 2012-3-16 13:28 | 显示全部楼层 |阅读模式
自己写的代码,当替换文字为当前日期时,文字的字体及字高等属性丢失,求完善
希望替换后的字体与替换前的字体相同,如 (command "-style" "mystyle" "Times New Roman" 5 1 0 "N" "N")
;替换或插入当前日期
;2012年3月16日
(defun c:dt ()
  (setq os_mode (getvar "osmode"))
  (setq en1 (entsel "\n请选择日期"))
  (if (= nil en1);判断是否选择了对象,如果没有选择对象,则插入日期
    (progn
      (setq pt (getpoint "\n请输入插入点"))
      (setvar "osmode" 0)
      (setq rq (nth 6 (my_date)))
      (command "-style" "mystyle" "Times New Roman" 5 1 0 "N" "N")
      (command "-text" pt "" rq)
    )
    (progn
      (setq en1_data (entget (car en1)))
      (setq txtormtxt (cdr(assoc 0 en1_data)))
      (if (or (= txtormtxt  "MTEXT") (= txtormtxt "TEXT"));判断是否是TEXT或者MTEXT
(progn
   (setq oldtext (assoc 1 en1_data))
   (setq newtext (cons 1 (nth 6 (my_date))))
   (setq en1_data (subst newtext oldtext en1_data))
   (entmod en1_data)
)
(princ "\n请选择文字");如果选择的对象不是文本,提示选择文本
      )     ;end if
    )     ;end progn 2
  )     ;end if
  ;(entmod en1_data)
  (setvar "osmode" os_mode)
  (princ)
)
;|以下为自定函数,用于生成制图日期=================================================|;
(DEFUN MY_DATE (/ TMP Y M D H MINUTE SECOND NYR SFM TXT)
  (setq tmp    (rtos (getvar "cdate") 2 8)
y      (rtos (atof (substr tmp 1 4)) 2 0)
m      (rtos (atof (substr tmp 5 2)) 2 0)
d      (rtos (atof (substr tmp 7 2)) 2 0)
h      (rtos (atof (substr tmp 10 2)) 2 0)
minute (rtos (atof (substr tmp 12 2)) 2 0)
second (rtos (atof (substr tmp 14 2)) 2 0)
yr     (strcat m "-" d)
sfm    (strcat h ":" minute ":" second)
sf     (strcat h ":" minute)
txt    (strcat "日期:" y "年" m "月" d "日")
  )
  (LIST Y M D H MINUTE SECOND YR SFM TXT sf) ;返回10个值
)     ;EDN DEFUN MY_DATE
;|=================================================================================|;

点评

好东西,谢谢  发表于 2012-3-16 14:02
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-3-17 20:49 | 显示全部楼层
你的思路简单介绍一下
 楼主| 发表于 2012-3-18 16:58 | 显示全部楼层
本帖最后由 革天明 于 2012-3-18 17:00 编辑

可能是注释太少了,我再说明一下。
程序先要求点先一个TEXT或MTEXT,如果为真,使用DXF组码,将当前日期替换原有文字内容,只是替换了文字内容,但是新文字的字体并不是原来选择的TEXT或MTEXT样式
如果为否,要求指定一个点,在此点通过TEXT命令来插入当前日期,此时自定义了一个字体样式,使用了自定义字体
程序中使用了一个自定义函数,来返回日期这个字符串

发表于 2012-7-25 17:11 | 显示全部楼层
思路简单介绍一下
 楼主| 发表于 2012-7-25 17:24 | 显示全部楼层
cabinsummer 发表于 2012-3-17 20:49
你的思路简单介绍一下

两种情况:
一是图中原有一个TEXT或MTEXT,但文本内容任意,我使用修改DXF组码将当前日期如“7-25”这个字符串替换原TEXT或MTEXT对象的文本内容,此时对象的文字内容组码变成(1 . "7-25"),实现了我的目的。
二是图中没有要修改的对象,我就在一个点处插入一个TEXT,文字内容为“7-25”,这种情况下文字的字体根据我的设定 (command "-style" "mystyle" "Times New Roman" 5 1 0 "N" "N"),符合我的要求。
问题是:我使用第一种情况下,仅仅更新原有MTEX或TEXT的文字内容,其文字样式改变了!!!
(setq oldtext (assoc 1 en1_data))
   (setq newtext (cons 1 (nth 6 (my_date))))
   (setq en1_data (subst newtext oldtext en1_data))
   (entmod en1_data)
 楼主| 发表于 2012-7-25 17:33 | 显示全部楼层
本帖最后由 革天明 于 2012-7-25 17:35 编辑
cabinsummer 发表于 2012-3-17 20:49
你的思路简单介绍一下

差点忘了,这个问题我已经解决了,方法是修改文字内容后再次修改其文字样式

不知道为什么不更新文字样式就不行,

(setq oldstyle (assoc 7 en1_data))
(setq newstyle (cons 7 "mystyle"))
(setq en1_data (subst newstyle oldstyle en1_data))
(entmod en1_data)


您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-22 02:22 , Processed in 0.180288 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表