明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2280|回复: 7

[讨论] 为什么用entmod对mtext 的修改不起作用

[复制链接]
发表于 2014-9-20 18:43 | 显示全部楼层 |阅读模式
问题如标题。
在程序中,我想把图形中的多行文字mtext根据需要修改,但是到了entmod时,返回nil不知道怎么回事,请高手帮忙。。。
需要更新的内容为:TFH="I50G011022"
老的TFH返回的内容是:
((-1 . <图元名: 7eeb06a0>) (0 . "MTEXT") (330 . <图元名: 7eeadcc0>) (5 . "5D4") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "ZJ") (62 . 5) (6 . "Continuous") (100 . "AcDbMText") (10 121.286 184.99 0.0) (40 . 2.5) (41 . 35.5585) (71 . 4) (72 . 5) (1 . "{\\W0.9;I50G045008 I50G045007 I50G046008 I50G046007}") (7 . "宋体") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0) (42 . 33.1125) (43 . 7.5) (50 . 0.0) (73 . 2) (44 . 1.0) (90 . 2))

更新后的表:
(setq TFH_tab (subst (cons 1 TFH) (assoc '1 TFH_tab) TFH_tab))

内容为:
((-1 . <图元名: 7eeb06a0>) (0 . "MTEXT") (330 . <图元名: 7eeadcc0>) (5 . "5D4") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "ZJ") (62 . 5) (6 . "Continuous") (100 . "AcDbMText") (10 121.286 184.99 0.0) (40 . 2.5) (41 . 35.5585) (71 . 4) (72 . 5) (1 . "I50G011022") (7 . "宋体") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0) (42 . 33.1125) (43 . 7.5) (50 . 0.0) (73 . 2) (44 . 1.0) (90 . 2))

现在想用(entmod tfh_tab)更新,但是返回值为nil
求大侠帮忙。。。
感激不尽!!!
发表于 2014-9-20 21:36 | 显示全部楼层
你这样试一下:
(setq TFH_tab (entget(car(entsel))))
(setq TFH "I50G011022")
(setq TFH_tab (subst (cons 1 TFH) (assoc '1 TFH_tab) TFH_tab))
(entmod TFH_tab)
发表于 2014-9-20 23:03 | 显示全部楼层
(setq TFH_tab (subst (cons 1 TFH) (assoc '1 TFH_tab) TFH_tab))
1前面的撇号去掉!
 楼主| 发表于 2014-9-21 22:37 | 显示全部楼层
wangph朋友,程序是自动读取索引文件,然后自动更新,(entsel)不能用,不是手动选的。
Gu_xl朋友,我试试你的。有结果了回话。
 楼主| 发表于 2014-9-21 22:47 | 显示全部楼层
去掉还是不行,应该是带这个“‘”号的。。。
发表于 2014-9-22 03:11 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-9-22 03:50 编辑

虽然mtext的文本内容因为包含格式控制字符比较麻烦,但这是对于取它的内容来说
用(entmod(subst (cons 1 TFH) (assoc  1 TFH_tab) TFH_tab)不会不成功(除非TFH,TFH_tab的数据类型或者表的格式不对,但楼主给出的TFH_tab图元数据表TFH_tab和MEXT的文本内容TFH都没问题),但是它的特殊格式控制会丢失(仅此而已),至于(entmod ....)返回nil通常情况一是图元数据表格式不对(楼主这情况一属于这种),二是图元所在图层不可编辑(比如被锁定),楼主的问题原因最大可能在于没有对需要操作的图层进行解锁解冻
另外向楼主让我加深了对撇号的理解(以前习惯性的认为它只能加在表前边):撇号后边内容以字母开头的话会被转为sym(包括系统保护符号和系统函数比如'pi不再是pi值),如果是括号开头会被转为表而不是语句(函数),但对于数值类的常量不会被转换. 比如 (+'1'2)和(+ 1 2)是一样的,(strcat'"1" '"2")和(strcat"1" "2")结果也是一样的
发表于 2014-9-22 03:29 | 显示全部楼层
hanyu_gis 发表于 2014-9-21 22:47
去掉还是不行,应该是带这个“‘”号的。。。

带和不带都没区别
 楼主| 发表于 2014-9-23 14:21 | 显示全部楼层
谢谢朋友的关注。
现在问题还没有解决,我现在的解决方案是用command中引用 mtext解决,虽然可以实现,但是心里总是感觉别扭。
图层没有锁定,也没有关闭,是正常的图层,但就是返回nil 值。同entmak也不能生成,挺怪的。
对于text都可以,但对这人mtext 试了多次还是不成功。
如果大家有兴趣,我可以把程序上传,让大家看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 22:21 , Processed in 0.351873 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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