找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2856|回复: 14

[求助] 用ads改文字内容失败?

[复制链接]

已领礼包: 5060个

财富等级: 富甲天下

发表于 2016-4-25 10:17:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. BOOL chgEntDxf1(ads_name ent, wchar_t * str)   
  2. {
  3.   struct resbuf *rbTargEnt;   // resbuf to hold ent data   
  4.   struct resbuf *rbTrav;      // resbuf to traverse linked list   
  5.   struct resbuf *tmp;
  6.   int rc;                     // Return code
  7.   wchar_t *sp2;
  8.   
  9.   rbTargEnt = acdbEntGet(ent);   
  10.   if(!rbTargEnt)   
  11.   {   
  12.     acutPrintf(_T("\nacdbEntGet失败. "));   
  13.     return FALSE;
  14.   }   

  15.   rbTrav = rbTargEnt;

  16.   while(rbTrav)   
  17.   {   
  18.     switch(rbTrav->restype)   
  19.     {   
  20.     case 1 : // 更改文字内容
  21.       //_tcscpy( rbTrav->resval.rstring,str);   

  22.       tmp = acutBuildList(RTSTR, str, 0);
  23.       sp2 = rbTrav->resval.rstring;
  24.       rbTrav->resval.rstring = tmp->resval.rstring;
  25.       tmp->resval.rstring = sp2;
  26.       acutRelRb(tmp);
  27.       break;   
  28.     }

  29.     rbTrav = rbTrav->rbnext;   

  30.   }//while   

  31.   rc = acdbEntMod(rbTargEnt);   
  32.   if(rc != RTNORM)   
  33.   {   
  34.     acutPrintf(_T("\n更改dxf组码1失败,可能是对象图层锁定"));   
  35.   }  

  36.   //清理resbuf
  37.   if(rbTargEnt)   
  38.   {   
  39.     acutRelRb(rbTargEnt);   
  40.   }   
  41.   return TRUE;
  42. }
复制代码
先是直接_tcscpy( rbTrav->resval.rstring,str);   改lisp值,errno系统变量为2 Invalid entity or selection set name
有人说直接改dxf1组码的值会很危险,必须新建resbuf*,但errno系统变量仍然为2 Invalid entity or selection set name。



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-4-25 11:15:43 | 显示全部楼层
怎么还用ADS呢? 都面向对象这么多年了,用ARX改文字实体内容几行代码就行

AcDbText::setTextString Function
Acad::ErrorStatus
setTextString(
const ACHAR* unnamed);
unnamedInput null-terminated text string (256 byte max)
This function makes a copy of newText and uses the copy as the text string to display. The string must be a standard null-terminated string and cannot be more than 256 bytes long (not including the null terminator).
Unicode, multicode, and the AutoCAD special characters (%%d, %%p, etc.) are supported in the same fashion as they are when entering a text string at the AutoCAD command line for the text or dtext commands.
The text string is used for DXF group code 1.
Returns Acad::eOk if successful or Acad::eInvalidInput if the data passed in is not acceptable.

点评

当然是有理由才用,开始的时候是用AcDbText,后来又加上判断AcDbMText,现在发现修改天正文字没有接口,不止是天正单行文字,连天正多行文字、标注标高、索引图名、箭头引注等都是可以改dxf1组码来修改。而天正2004  详情 回复 发表于 2016-4-25 14:37
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2016-4-25 14:37:54 | 显示全部楼层
XDSoft 发表于 2016-4-25 11:15
怎么还用ADS呢? 都面向对象这么多年了,用ARX改文字实体内容几行代码就行

AcDbText::setTextString Fun ...

当然是有理由才用,开始的时候是用AcDbText,后来又加上判断AcDbMText,现在发现修改天正文字没有接口,不止是天正单行文字,连天正多行文字、标注标高、索引图名、箭头引注等都是可以改dxf1组码来修改。而天正2004和T20数据结果完全不同,用面向对象的方法根本行不通或者很难做。

点评

你用LISP entmod函数可以修改天正实体?  详情 回复 发表于 2016-4-25 14:56
这种还是不要猜了,自定义时就没想让你再改,下个版本可能就变了,开发时远离自定义实体操作  详情 回复 发表于 2016-4-25 14:44
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-4-25 14:44:23 来自手机 | 显示全部楼层
xinxirong 发表于 2016-4-25 14:37
当然是有理由才用,开始的时候是用AcDbText,后来又加上判断AcDbMText,现在发现修改天正文字没有接口, ...

这种还是不要猜了,自定义时就没想让你再改,下个版本可能就变了,开发时远离自定义实体操作
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-4-25 14:56:18 | 显示全部楼层
xinxirong 发表于 2016-4-25 14:37
当然是有理由才用,开始的时候是用AcDbText,后来又加上判断AcDbMText,现在发现修改天正文字没有接口, ...

你用LISP entmod函数可以修改天正实体?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2016-4-25 15:02:08 | 显示全部楼层
本帖最后由 xinxirong 于 2016-4-25 15:07 编辑

是啊,天正单行文字多行文字都可以。前提是已经加载天正插件tch_kernal.arx 修改天正文字.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2016-4-25 15:32:20 | 显示全部楼层
试了一下在32位的cad中可以,在x64下2010和2013确实崩溃了。但一般平时都是用2004-2008画图比较多,大不了在x64下就用回面向对象编辑。

点评

这种单行文字都做自定义实体够恶心的。他不给你提供接口编辑你就不编辑它好了。  详情 回复 发表于 2016-4-25 15:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-4-25 15:43:01 | 显示全部楼层
xinxirong 发表于 2016-4-25 15:32
试了一下在32位的cad中可以,在x64下2010和2013确实崩溃了。但一般平时都是用2004-2008画图比较多,大不了 ...

这种单行文字都做自定义实体够恶心的。他不给你提供接口编辑你就不编辑它好了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2016-4-25 15:51:37 | 显示全部楼层
现在的问题是我连普通的单行文字都修改不了,acdbEntMod返回-5003

点评

普通的单行文字,为什么还用ADS写,不用AcDbText下面的方法?  详情 回复 发表于 2016-4-25 15:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-4-25 15:58:08 | 显示全部楼层
xinxirong 发表于 2016-4-25 15:51
现在的问题是我连普通的单行文字都修改不了,acdbEntMod返回-5003

普通的单行文字,为什么还用ADS写,不用AcDbText下面的方法?

点评

当然是有原因的,ads比较通用嘛,比如文字、多行文字、标注、等都可以修改组码1来修改内容。  详情 回复 发表于 2016-9-9 08:34
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2016-4-25 16:54:38 | 显示全部楼层
这不是说了吗,32位的cad还是可以修改天正文字,64位的把它屏蔽掉就好了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2016-4-26 11:00:27 | 显示全部楼层
原来是太久没关机了,重启一下连64位的都可以修改天正文字了。

点评

还能这样  详情 回复 发表于 2016-4-26 11:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-4-26 11:06:01 | 显示全部楼层
xinxirong 发表于 2016-4-26 11:00
原来是太久没关机了,重启一下连64位的都可以修改天正文字了。

还能这样:P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2016-4-26 13:03:49 | 显示全部楼层
        //Lock当前文档
        AcApDocument *pDoc=acDocManager->curDocument();
        acDocManager->lockDocument(pDoc,AcAp::kWrite);



        //UnLock当前文档
        acDocManager->unlockDocument(pDoc);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

 楼主| 发表于 2016-9-9 08:34:49 | 显示全部楼层
newer 发表于 2016-4-25 15:58
普通的单行文字,为什么还用ADS写,不用AcDbText下面的方法?

当然是有原因的,ads比较通用嘛,比如文字、多行文字、标注、等都可以修改组码1来修改内容。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 18:27 , Processed in 0.512830 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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