找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 148|回复: 0

[分享] 使用ObjectARX插入图片

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-2-26 10:29:43 | 显示全部楼层 |阅读模式
  1. void InsertImage()
  2. {
  3.     ACHAR* szName = 采用T(“MyTest”);
  4.     ACHAR *fileName = 采用T(“C:\temp\newImage.jpeg”);
  5.     AcGePoint3d org(10,10,0);
  6.     AcDbDatabase *pDb =
  7.       acdbHostApplicationServices()->workingDatabase();
  8.      AcDbRasterImageDef* pImageDef = new AcDbRasterImageDef();
  9.      Acad::ErrorStatus es = pImageDef->setSourceFileName(fileName);
  10.      if(es != Acad::eOk)
  11.      {
  12.           delete pImageDef;
  13.           return;
  14.      }
  15.      es = pImageDef->load();
  16.      ASSERT(es == Acad::eOk);
  17.      AcDbObjectId dictID = AcDbRasterImageDef::imageDictionary(pDb);
  18.      if (dictID==AcDbObjectId::kNull)
  19.      {
  20.          es = AcDbRasterImageDef::createImageDictionary(pDb, dictID);
  21.          if(es!= Acad::eOk)
  22.          {
  23.               delete pImageDef;
  24.               ads采用printf(采用T(“nCould not create dictionaryn”));
  25.               return;
  26.          }
  27.      }
  28.      AcDbDictionary* pDict = NULL;
  29.      es = acdbOpenObject((AcDbObject*&)pDict,
  30.                                             dictID, AcDb::kForWrite);
  31.      if(es != Acad::eOk)
  32.      {
  33.           delete pImageDef;
  34.           ads采用printf(采用T(“nCould not open dictionaryn”));
  35.           return;
  36.      }
  37.      BOOL bExist = pDict->has(szName);
  38.      AcDbObjectId objID;
  39.      if (!bExist)
  40.      {
  41.           pDict->setAt(szName, pImageDef, objID);
  42.      }
  43.      else
  44.      {
  45.           pDict->getAt(szName,
  46.                     (AcDbObject*&)pImageDef,AcDb::kForWrite);
  47.           objID = pImageDef->objectId();
  48.      }
  49.      // close Dictionary and Definition.
  50.      pDict->close();
  51.      pImageDef->close();
  52.      AcDbRasterImage* pImage = new AcDbRasterImage;
  53.      es = pImage->setImageDefId(objID);
  54.      if (es != Acad::eOk)
  55.      {
  56.           delete pImage;
  57.           return;
  58.      }
  59.     AcDbObjectId modelId;
  60.     modelId = acdbSymUtil()->blockModelSpaceId(pDb);
  61.     AcDbBlockTableRecord *pBTRecord;
  62.     acdbOpenAcDbObject((AcDbObject*&)pBTRecord,
  63.                                     modelId, AcDb::kForWrite);
  64.      es = pBTRecord->appendAcDbEntity(pImage);
  65.      pBTRecord->close();
  66.      AcDbObjectId entID = pImage->objectId();
  67.      AcGePoint3d TempPoint3d(3.0, 0, 0);
  68.      AcGeVector3d LowerRightVector = TempPoint3d.asVector();
  69.      AcGePoint3d TempPoint3d2(0, 1.5, 0);
  70.      AcGeVector3d OnPlaneVector = TempPoint3d2.asVector();
  71.      if (pImage->setOrientation(org,
  72.                 LowerRightVector, OnPlaneVector) !=Adesk::kTrue)
  73.      {
  74.           ads采用printf(采用T(“nSet Orientation failed.”));
  75.           pImage->close();
  76.           return;
  77.      }
  78.      pImage->setDisplayOpt(AcDbRasterImage::kShow, Adesk::kTrue);
  79.      pImage->setDisplayOpt(AcDbRasterImage::kTransparent,
  80.                                                     Adesk::kTrue);
  81.     AcDbObjectPointer<AcDbRasterImageDefReactor>
  82.                                             rasterImageDefReactor;
  83.     // new it
  84.     rasterImageDefReactor.create();
  85.     // Set the entity to be its owner.
  86.     es = rasterImageDefReactor->setOwnerId(pImage->objectId());
  87.     // if ok
  88.     if (es == Acad::eOk)
  89.     {
  90.         AcDbObjectId defReactorId;
  91.         // assign the object an objectId
  92.         es = pDb->addAcDbObject(defReactorId,
  93.                             rasterImageDefReactor.object());
  94.         // if ok
  95.         if (es == Acad::eOk)
  96.         {
  97.             // set the image reactor id
  98.             pImage->setReactorId(defReactorId);
  99.             AcDbObjectPointer<AcDbRasterImageDef>
  100.                 rasterImagedef(pImage->imageDefId(),
  101.                                             AcDb::kForWrite);
  102.             // if ok
  103.             if (rasterImagedef.openStatus() == Acad::eOk)
  104.             {
  105.                 rasterImagedef->addPersistentReactor(defReactorId);
  106.             }
  107.         }
  108.     }
  109.      pImage->close();
  110. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 13:37 , Processed in 0.113826 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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