找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 463|回复: 4

[求助] 只加一个定义AcGeMatrix3d Pixel2Model_3D,为啥报错

[复制链接]
发表于 2020-7-27 19:39:28 | 显示全部楼层 |阅读模式

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

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

×
为啥我的程序里,如下所贴,只要加上“AcGeMatrix3d Pixel2Model_3D”这一句,运行就会报错呢

  1. void Test()
  2. {
  3.         Acad::ErrorStatus es;
  4.         struct resbuf *Rb1 = new resbuf;
  5.         Rb1->restype = 0;
  6.         Rb1->resval.rstring = L"TEXT";
  7.         Rb1->rbnext = NULL;
  8.         acutPrintf(L"选择需要添加遮罩的文本:");
  9.         ads_name Ss;
  10.         if (ads_ssget(NULL, NULL, NULL, Rb1, Ss) != RTNORM)
  11.         {
  12.                 return;
  13.         }
  14.         int32_t *n;//选择集总个数
  15.         ads_sslength(Ss, n);
  16.         ads_name Ent0;//当前实体名
  17.         for (int i = 0; i < *n; i++)
  18.         {
  19.                 ads_ssname(Ss, i, Ent0);
  20.                 CDcText Txt0;
  21.                 AcDbObjectId txtID;
  22.                 Txt0.getID(Ent0);
  23.                 Txt0.getPt(Txt0.Entity_ID);
  24.                 Txt0.getRotation(Txt0.Entity_ID);
  25.                 Txt0.getWH(Txt0.Entity_ID, 1.05);
  26.                 //遮罩点集合
  27.                 AcGePoint2dArray wipPts;
  28.                 //wipPts.append(Txt0.pt_leftlower);
  29.                 //wipPts.append(Txt0.pt_rightlower);
  30.                 //wipPts.append(Txt0.pt_rightupper);
  31.                 //wipPts.append(Txt0.pt_leftupper);
  32.                 //wipPts.append(Txt0.pt_leftlower);
  33.                 wipPts.append(AcGePoint2d(0, 0));
  34.                 wipPts.append(AcGePoint2d(10, 0));
  35.                 wipPts.append(AcGePoint2d(10, 10));
  36.                 wipPts.append(AcGePoint2d(0, 10));
  37.                 wipPts.append(AcGePoint2d(0, 0));

  38.                 AcDbWipeout::createImageDefinition();//初始化遮罩
  39.                 AcDbWipeout *pWipeout = new AcDbWipeout;
  40.                 pWipeout->createImageDefinition();
  41.                 pWipeout->setDatabaseDefaults();
  42.                 AcGePoint3d originPnt(0, 0, 0);
  43.                 AcGeVector3d Udirection(1, 0, 0);
  44.                 AcGeVector3d Vdirection(0, -1, 0);
  45.                 AcGeVector3d Zdirection(0, 0, 1);
  46.                 pWipeout->setOrientation(originPnt, Udirection, Vdirection);
  47.                 pWipeout->setDisplayOpt(AcDbRasterImage::kTransparent, Adesk::kTrue);
  48.                 pWipeout->setDisplayOpt(AcDbRasterImage::kShowUnAligned, Adesk::kTrue);
  49.                 pWipeout->setClipBoundaryToWholeImage();
  50.                 [color=Red]AcGeMatrix3d Pixel2Model_3D[/color];//创建像素到模型空间的转换
  51.                 pWipeout->getPixelToModelTransform(Pixel2Model_3D);
  52.                 Pixel2Model_3D.invert();
  53.                 AcGeMatrix2d Pixel2Model_2D;//创建像素到模型空间的转换
  54.                 double pixel2model_z = 0;
  55.                 Pixel2Model_2D = Pixel2Model_3D.convertToLocal(Zdirection , pixel2model_z);
  56.                 for ( i = 0; i < wipPts.length(); i++)
  57.                 {
  58.                         wipPts.at(i).transformBy(Pixel2Model_2D);
  59.                 }
  60.                 pWipeout->setClipBoundary(AcDbRasterImage::kPoly, wipPts);
  61.                 Post2Model(pWipeout);
  62.                 pWipeout->close();
  63.                 acutPrintf(L"x=%f\ty=%f\n", Txt0.Position.x, Txt0.Position.y);
  64.                 acutPrintf(L"W=%f\tH=%f\n", Txt0.txtW, Txt0.txtH);
  65.                 acutPrintf(L"Rotation=%f\n", Txt0.Rotation);
  66.                 acutPrintf(L"%f,%f\t%f,%f\n", Txt0.pt_leftlower.x, Txt0.pt_leftlower.y, Txt0.pt_rightupper.x, Txt0.pt_rightupper.y);
  67.         }
  68.         delete Rb1;
  69. }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-7-28 00:10:24 | 显示全部楼层
试试把

  •                 pWipeout->setDisplayOpt(AcDbRasterImage::kTransparent, Adesk::kTrue);
  •                 pWipeout->setDisplayOpt(AcDbRasterImage::kShowUnAligned, Adesk::kTrue);



放到下面这个前面去:


pWipeout->setClipBoundary(AcDbRasterImage::kPoly, wipPts);

不行,就把上面两行代码改成:pMyWipeout->setDisplayOpt(AcDbRasterImage::kClip, Adesk::kTrue);

上面代码最好加个判断,看看返回值:
es = pWipeout->setClipBoundary(AcDbRasterImage::kPoly, wipPts);
if (es == eOk)
{
    .....
}

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

使用道具 举报

 楼主| 发表于 2020-7-28 11:51:37 | 显示全部楼层

谢谢大神,已经解决了哈

点评

把最后解决的代码帖下吧,留个痕吧 说明改了哪个地方  详情 回复 发表于 2020-7-28 17:59
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2020-7-28 17:59:59 | 显示全部楼层
DCMZ 发表于 2020-7-28 11:51
谢谢大神,已经解决了哈

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

使用道具 举报

 楼主| 发表于 2020-7-28 18:03:14 | 显示全部楼层
XDSoft 发表于 2020-7-28 17:59
把最后解决的代码帖下吧,留个痕吧
说明改了哪个地方

大神,我找到原因了,其实不是转换顺序的问题,是指针的问题。
我的指针申请了,忘记delete了,后来我直接给他申请到堆里,然后删除,就可以了哈。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-10 00:21 , Processed in 0.190502 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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