找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7347|回复: 10

[求助]:用getGeomExtents取包围盒时总是返回eInvalidExtents怎么办啊

[复制链接]
发表于 2006-8-18 11:56:39 | 显示全部楼层 |阅读模式

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

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

×
我想取得文本串的包围盒,从而得到它的宽度,从前面的帖子得知用GetGeomExtents函数可以,但是为什么我取的时候总是返回eInvalidExtents呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-8-18 12:03:38 | 显示全部楼层
那再这样试试看
AcDbMText* pTex;
  AcGePoint3dArray pts;
  pTex->getBoundingPoints(pts);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-18 13:09:56 | 显示全部楼层
最初由 RedCAD 发布
[B]那再这样试试看
AcDbMText* pTex;
  AcGePoint3dArray pts;
  pTex->getBoundingPoints(pts); [/B]


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

使用道具 举报

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

使用道具 举报

发表于 2006-8-20 18:01:41 | 显示全部楼层
下面的例子是用 getgeomExtents做的,可以用来得到 object  的 maxPoint  和 minPoint
不过你的是text,可以考虑用 textbox来做
void HYT1()
{
        ads_name en;
        ads_point pt;
        if(acedEntSel("\nSpecify a object:",en,pt)!=RTNORM)
                return;
        AcDbObjectId eId;
        acdbGetObjectId(eId,en);
        AcDbEntity *pEnt;
        acdbOpenAcDbEntity(pEnt,eId,AcDb::kForRead);
        AcDbExtents exts;
        if(pEnt->getGeomExtents(exts)!=Acad::eOk)
        {
                acutPrintf("\n**Error on get the extents point...");
                pEnt->close();
                return;
        }
        acutPrintf("\nThe maxPoint=%f,%f",exts.maxPoint()[X],exts.maxPoint()[Y]);
        acutPrintf("\nThe minPoint=%f,%f",exts.minPoint()[X],exts.minPoint()[Y]);
        pEnt->close();
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2006-8-21 13:56:55 | 显示全部楼层
to4楼:
    您的方法好像可以,我按照ObjectArx的帮助文档给的例子可以做出来,方法是手工选择某个文本,然后进行处理,可是在我自己的程序中不是手动选取的,是遍历所有实体,然后操作,代码如下
        //前面操作略
        AcDbBlockTableRecordIterator *pBlkTblRcdItr;
        pBlkTblRcd->newIterator(pBlkTblRcdItr);
        AcDbEntity *pEnt;
        for (pBlkTblRcdItr->start(); !pBlkTblRcdItr->done(); pBlkTblRcdItr->step())
        {
                pBlkTblRcdItr->getEntity(pEnt, AcDb::kForRead);
                AcDbObjectId iid;
                iid = pEnt->objectId();
                ads_name en;
                acdbGetAdsName(en, iid);
                textent =  acdbEntGet(en);
                ads_point lowleft, upright;
                if (acedTextBox(textent, lowleft, upright) != RTNORM)
                {
                        AfxMessageBox("error");
                }
        }

,可是执行到acedTextBox(textent, lowleft, upright)时返回的不是正确的结果,不知是为什么,期望您的指点,谢谢

to5楼,6楼:
  正如6楼所说,对于有些AcDbText来说得不到想要的结果,我分析了我的原因,可能是因为我的图中有自己定义的字体样式,由于我想不手动改变图的样式,而直接得到文本的包围盒,因此没有成功。谢谢5楼的回复,您的方法对于大多数来说是很方便,很适合的。

to all:
  我把我的图放在附件中了,哪位如果有时间请帮我看一下如何才能得到图中文本的包围盒,不胜感激。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2020-8-31 10:46:21 | 显示全部楼层
whqgame 发表于 2006-8-21 13:56
to4楼:
    您的方法好像可以,我按照ObjectArx的帮助文档给的例子可以做出来,方法是手工选择某个文本, ...

文字有两个 &的时候,acedTextBox有BUG, 下面代码一直在用。

float CADTextLength(TCHAR *str, double fonth, double fontwr, float *top,float *bottom)//求文字的实际长度  
{  //B&T:X&Y 有两个& CAD计算长度不对
    if(_tcslen(str) == 0) return (0.);  
    struct resbuf *list;  
    ads_point bl,rt;  

//        bl[0]=100;bl[1]=200;bl[2]=0;//跟起点坐标无关
    list = acutBuildList(RTDXF0,_T("text"),1,str,7,tssdslab.style25,40,fonth,41,fontwr,51,0.,71,0,NULL); //跟角度无关
  
    acedTextBox(list,bl,rt);  
    acutRelRb(list);  
  
    *top    = rt[1];//CAD实际字高 2.42308
        *bottom = bl[1];
    return rt[0]; //CAD字真实长度
}  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-8-31 10:48:47 | 显示全部楼层
whqgame 发表于 2006-8-21 13:56
to4楼:
    您的方法好像可以,我按照ObjectArx的帮助文档给的例子可以做出来,方法是手工选择某个文本, ...

文字有两个 &的时候,acedTextBox有BUG, 下面代码一直在用。

float CADTextLength(TCHAR *str, double fonth, double fontwr, float *top,float *bottom)//求文字的实际长度  
{  //B&T:X&Y 有两个& CAD计算长度不对
    if(_tcslen(str) == 0) return (0.);  
    struct resbuf *list;  
    ads_point bl,rt;  

//        bl[0]=100;bl[1]=200;bl[2]=0;//跟起点坐标无关
    list = acutBuildList(RTDXF0,_T("text"),1,str,7,tssdslab.style25,40,fonth,41,fontwr,51,0.,71,0,NULL); //跟角度无关
  
    acedTextBox(list,bl,rt);  
    acutRelRb(list);  
  
    *top    = rt[1];//CAD实际字高 2.42308
        *bottom = bl[1];
    return rt[0]; //CAD字真实长度
}  
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 18:12 , Processed in 0.378857 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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