找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1422|回复: 11

[求助]:AcDbText的问题

[复制链接]
发表于 2002-10-15 10:49:24 | 显示全部楼层 |阅读模式

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

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

×
我想在一个已有实体存在的.dwg文件中添加Text,如下实现:
  AcGePoint3d insertionPoint=AcGePoint3d(800,0,0);
   AcDbText *pText1=new AcDbText(insertionPoint,"Node",AcDbObjectId::kNull,50,0);
   appendEntityToDB(pText1);//将实体添加到当前数据库

运行之后怎么看不到阿,应该是没有问题的,在其他情况中都没有问题阿。
是怎么回事呢?请大虾指点一下了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-10-15 12:00:18 | 显示全部楼层
首先问你你的appendEntityToDB()函数是向当前DATABASE(workingDatabase)添加实体吗?
如果是,你能确定你的那个DWG是当前数据库(workingDatabase)吗?
还有,你的pText1->close()了吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-15 12:09:01 | 显示全部楼层
这个你看有用吗?

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//| 函数名:                        文字输出
//|                                        MakeText()
//|                                               
//| 输入参数:                ads_point pt                                基点坐标
//|                                        AcDb::TextHorzMode hm                水平对齐方式
//|                                        AcDb::TextVertMode vm                垂直对齐方式
//|                                        char* Testr                                        输出的文字
//|                                        char* Style                                        文字样式
//|                                        char* laname                                层名
//|                                        double th                                        字高
//|                                        double Scale                                字宽比递率
//|                                        int color                                        颜色
//|                                        double angle                                角度
//|                                        struct resbuf *xData                附加扩展数据
//|                                        BOOL draw                                        是否绘制
//| 返回:                        AcDbObjectId
//| 说明:                        略
//|                                       
//| 举例:                        略
//|
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
AcDbObjectId MakeText(ads_point pt,AcDb::TextHorzMode hm, AcDb::TextVertMode vm,char* Testr,char* Style,
                        char* laname,double th,double Scale,int color,double angle,struct resbuf *xData,BOOL draw)
{

        AcGePoint3d ptt;
        AcDbObjectId styleId;
        AcDbObjectId entityId;

        if (draw) {

                AcDbTextStyleTable *pTextStyleTbl;
                ptt.set(pt[0],pt[1],0.0);

                if (acdbHostApplicationServices()->workingDatabase()->
                        getTextStyleTable(pTextStyleTbl,AcDb::kForRead) != Aced::eOk) {
                        ads_printf("\n错误:无法打开块表!\n");
                        pTextStyleTbl->close();
                        return 0;
                }

                if (pTextStyleTbl->getAt(Style,styleId) != Acad::eOk) {
                /*  ads_printf("\n警告:指定的字体样式无效!\n");
                        pTextStyleTbl->close();
                        return 0;*/
                }

                if (pTextStyleTbl->close() != Acad::eOk) {

                        ads_printf("\n错误:无法关闭文字样式表!\n");
                        return 0;

                }

                AcGePoint3d loText(pt[0],pt[1],0.0);                //文字定位点

                AcDbText *pText = new AcDbText(loText,Testr,styleId,th,angle);

                AcDbBlockTable *pBlockTable;

                if (acdbHostApplicationServices()->workingDatabase()->
                        getBlockTable(pBlockTable,AcDb::kForRead) != Acad::eOk) {

                        ads_printf("\n错误:打开模型空间块表出错!\n");
                        pText->close();
                        return 0;

                }

                AcDbBlockTableRecord *pBlockRecord;
                if (pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockRecord,
                        AcDb::kForWrite) != Acad::eOk) {
                        ads_printf("\n错误:获取模型空间块表出错!\n");
                        pBlockTable->close();
                        pText->close();
                        return 0;
                }

                if (pBlockTable->close() != Acad::eOk) {
                        ads_printf("\n错误:无法关闭块表!\n");
                        pText->close();
                        return 0;
                }
                if (pText->setHorizontalMode(hm) != Acad::eOk) {pText->close();return 0;}        //设定文字水平对齐方式
                if (pText->setVerticalMode(vm) != Acad::eOk) {pText->close();return 0;}                //设定文字垂直对齐方式
                if (pText->setAlignmentPoint(ptt) != Acad::eOk) {pText->close();return 0;}        //设定基点坐标
                if (pText->setLayer(laname) != Acad::eOk) {pText->close();return 0;}                //所在层
                if (pText->setColorIndex(color) != Acad::eOk) {pText->close();return 0;}        //颜色
                if (pText->setWidthFactor(Scale)!= Acad::eOk) {pText->close();return 0;}        //设定文字比例
               
                if (pBlockRecord->appendAcDbEntity(entityId,pText) != Acad::eOk) {
                        ads_printf("\n错误:填加文字实体出错!\n");
                        pText->close();
                        return 0;
                }

                if (pBlockRecord->close() != Acad::eOk) {
                        ads_printf("\n错误:无法关闭符号表!\n");
                        pText->close();
                        return 0;

                }

                //===========加扩展数据===========
                if (pText->upgradeOpen() != Acad::eOk) {

                /*        ads_printf("\n错误:实体(文字 ID=%d)无法填加扩展数据!\n",entityId);
                        pText->close();
                        return 0;        */
                }

                if (pText->setXData(xData) != Acad::eOk){

                        ads_printf("\n警告: 实体(文字 ID=%d)添加扩展数据时出错!\n",entityId);
                }
                //================================
                pText->close();

        }
        else {

        }
        return entityId;

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

使用道具 举报

发表于 2002-10-15 12:24:48 | 显示全部楼层
应该是没有close
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-15 16:06:46 | 显示全部楼层
close在appendEntityToDb中实现了,我觉得可能的原因是那个图形的某些属性的设置
导致不能加入,我将该图中所有实体拷贝到另外一个当中,不过拷贝后的图层没有原来
的那么多了,结果是可以看到加入后的Text的,由于刚刚接触,不知道什么具体原因,
希望大虾多多指点,谢谢了先!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-15 17:24:06 | 显示全部楼层
最初由 zhouyf 发布
[B]close在appendEntityToDb中实现了,我觉得可能的原因是那个图形的某些属性的设置
导致不能加入,我将该图中所有实体拷贝到另外一个当中,不过拷贝后的图层没有原来
的那么多了,结果是可以看到加入后的Text的,由?.. [/B]


你把文字样式ID设置输入一下,别用kNull,看看。

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-15 17:24:39 | 显示全部楼层
最初由 kfx2002 发布
[B]这个你看有用吗?

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//| 函数名:                        文字输出
//|                                        MakeText()
//|                                               
//| 输入参数:                ads_point ... [/B]


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

使用道具 举报

 楼主| 发表于 2002-10-16 17:15:15 | 显示全部楼层
XD,你说的把文字样式ID设置输入一下是怎么设置啊,
那个参数是AcDbObjectId型的,不知道怎么设置。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-16 17:47:03 | 显示全部楼层
最初由 zhouyf 发布
[B]XD,你说的把文字样式ID设置输入一下是怎么设置啊,
那个参数是AcDbObjectId型的,不知道怎么设置。 [/B]


就是ACAD中已经有的“文字样式定义”,你可以用当前的设置,也可以指定一个存在的。

获得当前的文字样式,用:


  1. [FONT=courier new]
  2. AcDbDatabase::textstyle Function AcDbObjectId

  3. textstyle() const;

  4. Returns the object ID of the TextStyle specified by the current TEXTSTYLE value of the database.

  5. See the System Variables section of the AutoCAD Command Reference for information on TEXTSTYLE.

  6. [/FONT]


如果获得其他的存在的,你可以打开“文字样式表”-AcDbTextStyleTable然后用getAt方法获得指定样式的ObjectId
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2002-10-17 09:32:06 | 显示全部楼层

  1. [FONT=courier new]
  2. //创建字体类型
  3. void CDtmCreateMain::createTextStyle(char *styleName,char* fontName,char* bigFontName,double textSize,double xScale,double obliqueAngle,double trPercent)
  4. {
  5.         AcDbTextStyleTable *pTextStyleTable;

  6.     acdbHostApplicationServices()->workingDatabase()
  7.         ->getSymbolTable(pTextStyleTable, AcDb::kForRead);
  8.         AcDbTextStyleTableRecord *pRecord;
  9.         pTextStyleTable->getAt(ACDB_MODEL_SPACE,pRecord,
  10.                 AcDb::kForWrite);

  11.         if (!pTextStyleTable->has(styleName)){
  12.                 AcDbObjectId recId;
  13.         pTextStyleTable->close();
  14.                 acdbHostApplicationServices()->workingDatabase()
  15.                         ->getSymbolTable(pTextStyleTable, AcDb::kForWrite);
  16.                 pRecord = new AcDbTextStyleTableRecord();
  17.                 pRecord->setName(styleName);
  18.                 pRecord->setFileName(fontName);
  19.                 pRecord->setBigFontFileName(bigFontName);
  20.                 pRecord->setTextSize(textSize);
  21.                 pRecord->setXScale(xScale);
  22.                 pRecord->setObliquingAngle(obliqueAngle);
  23.                 pRecord->setPriorSize(trPercent);
  24.                 pTextStyleTable->add(recId,pRecord);
  25.                 pRecord->close();
  26.         }

  27.         pTextStyleTable->close();

  28.         return;
  29. }

  30. //注记文字
  31. AcDbObjectId CDtmCreateMain::createText(AcGePoint3d pt,CString strText,char *pStyleName,double Height,double rotation,char *pLayerName,AcDb::TextVertMode vMode,AcDb::TextHorzMode hMode)
  32. {
  33.         AcDbTextStyleTable *pTextStyleTable;
  34.         AcDbObjectId objId,styleId;
  35.         char text[255];

  36.     acdbHostApplicationServices()->workingDatabase()
  37.         ->getSymbolTable(pTextStyleTable, AcDb::kForRead);

  38.         if (!pTextStyleTable->has(pStyleName)){
  39.                 pTextStyleTable->close();
  40.                 createTextStyle(pStyleName,"romanc.shx","hzdx.shx",Height,1.0,0.0,1.0);
  41.             acdbHostApplicationServices()->workingDatabase()
  42.                     ->getSymbolTable(pTextStyleTable, AcDb::kForRead);
  43.         }
  44.         if (pTextStyleTable->has(pStyleName)){
  45.                 pTextStyleTable->getAt(pStyleName,styleId,Adesk::kFalse);
  46.                 //创建文字
  47.                 AcDbBlockTable *pBlockTable;
  48.                 acdbHostApplicationServices()->workingDatabase()
  49.                         ->getSymbolTable(pBlockTable,AcDb::kForRead);
  50.                 AcDbBlockTableRecord *pSpace;
  51.                 pBlockTable->getAt(ACDB_MODEL_SPACE,pSpace,AcDb::kForWrite);
  52.                 pBlockTable->close();

  53.             strcpy(text,strText);
  54.                 AcDbText *pText = new
  55.                         AcDbText(pt,text,styleId,Height,rotation);
  56.                 pText->setLayer(pLayerName);
  57.                 pText->setVerticalMode(vMode);
  58.                 pText->setHorizontalMode(hMode);
  59.                 pText->setAlignmentPoint(pt);
  60.                 pSpace->appendAcDbEntity(objId,pText);
  61.                 pText->close();
  62.                 pSpace->close();
  63.                 pBlockTable->close();
  64.         }

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-17 11:16:59 | 显示全部楼层
最初由 stoneball 发布
[B][CODE]

//创建字体类型
void CDtmCreateMain::createTextStyle(char *styleName,char* fontName,char* bigFontName,double textSize,double xScale,double obliqueAngle,double trPercent)
{... [/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 17:45 , Processed in 0.460587 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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