找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1495|回复: 6

[ARX程序]:求教晓东:如何获取实际文本(AcDbMText)的实际包围盒

[复制链接]
发表于 2004-4-12 16:40:13 | 显示全部楼层 |阅读模式

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

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

×
请教:为何getGeomExtents函数获取不到AcDbMText的实际包围盒?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-4-12 17:06:25 | 显示全部楼层
getBoundingPoints(

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

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-4-19 23:53:26 | 显示全部楼层

Re: [ARX程序]:求教晓东:如何获取实际文本(AcDbMText)的实际包围盒

最初由 zxb888 发布
[B]请教:为何getGeomExtents函数获取不到AcDbMText的实际包围盒? [/B]


给你贴段代码:

对于MTEXT需要炸开它求准确的包围盒:

[php]
    ....................
     AcDbVoidPtrArray array;
     AcRxClass* pDesc = pE->isA();
    if (pDesc==AcDbMText::desc())
        es=pE->explode(array);  
    if (es==Acad::eOk)
    {
       for(int i=0;i<array.length();i++)
       {
           AcDbExtents ext2;
           AcDbEntity* pPart = ((AcDbEntity*)(array));
           if((es=pPart->getTransformedCopy(xform,pCopy))==Acad::eOk)
           {
            es=pCopy->getGeomExtents(ext2);
            delete pCopy;
           }
           if (es!=Acad::eOk)
           {
               delete pPart;
               if (es==Acad::eNullExtents)
                   continue;
               else
                   break;
           }
           delete pPart;
           ext.addExt(ext2);
       }
     }
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-20 14:53:17 | 显示全部楼层

Re: Re: [ARX程序]:求教晓东:如何获取实际文本(AcDbMText)的实际包围盒

最初由 XDSoft 发布
[B]

给你贴段代码:

对于MTEXT需要炸开它求准确的包围盒:

[php]
    ....................
... [/B]


多谢晓东!我用另外的办法实现了!

另外,对与闭合的pline线,经拟合(F)后,如何求包围盒?
附图,是使用你的工具箱测量边界的结果:内圈是没有拟合的边界,外圈是经拟合(F)后的结果!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-4-20 15:40:31 | 显示全部楼层

Re: Re: Re: [ARX程序]:求教晓东:如何获取实际文本(AcDbMText)的实际包围盒

最初由 zxb888 发布
[B]

多谢晓东!我用另外的办法实现了!

另外,对与闭?.. [/B]


把你实现的代码贴论坛来吧,谢谢!

ACAD求包围盒实际上就是求“控制点”的最小外框,拟和后,你点下实体看夹点,夹点是在外面的(和SPLINE一样)。

1、把拟和的,去掉拟和,求求试试

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

使用道具 举报

 楼主| 发表于 2004-4-20 20:50:57 | 显示全部楼层
我的方法:

1 用getBoundingPoints包围合的四个点
2 用actualWidth获取文字的实际宽度
  用rotation获取角度
3 取getBoundingPoints返回的第一点和第三点,根据宽度和角度计算
其它二个点


  1.   [FONT=courier new]
  2.                     AcDbMText *pMText = NULL;
  3.                     pMText = AcDbMText::cast(pObj);
  4.                     if(pMText!=NULL)
  5.                     {    AcGePoint3dArray box;
  6.                         pMText->getBoundingPoints(box);
  7.                         
  8.                         double box_aw = pMText->actualWidth();         //获取宽度
  9.                         double ang1 = pMText->rotation();    //获取角度
  10.                         pMText->close();

  11.                         AcGePoint3d pt0, pt2, pt1, pt3;
  12.                         AcGePoint2d zpt0, zpt2, zypt0, zypt2;
  13.                         AcGeVector2d vypt0;
  14.                         pt0 = box[0];
  15.                         pt2 = box[2];
  16.             
  17.                         zpt0.set(pt0.x,    pt0.y);    //转为二维点,严格地,
  18. 应该先获取pt0, pt2, pt1, pt3点所在的平面,根据平面转换成二维点,
  19. 这里只是演示,
  20.                         zpt2.set(pt2.x,    pt2.y);    //
  21.                         zypt0 = zpt0;
  22.                         zypt2 = zpt2;
  23.                         vypt0.set(box_aw, 0);
  24.                         zpt0+=vypt0;
  25.                         zpt2+=vypt0;
  26.                         zpt0.rotateBy(ang1,zypt0);
  27.                         zpt2.rotateBy(ang1,zypt2);

  28.                         pt1.set(zpt0.x,zpt0.y,pt0.z);
  29.                         pt3.set(zpt2.x,zpt2.y,pt0.z);
  30.                         bkextents.addPoint(pt0);
  31.                         bkextents.addPoint(pt1);
  32.                         bkextents.addPoint(pt2);
  33.                         bkextents.addPoint(pt3);
  34.                     }  [/FONT]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 15:31 , Processed in 0.197408 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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