[分享] 使用ObjectARX插入图片
void InsertImage(){
ACHAR* szName = 采用T(“MyTest”);
ACHAR *fileName = 采用T(“C:\temp\newImage.jpeg”);
AcGePoint3d org(10,10,0);
AcDbDatabase *pDb =
acdbHostApplicationServices()->workingDatabase();
AcDbRasterImageDef* pImageDef = new AcDbRasterImageDef();
Acad::ErrorStatus es = pImageDef->setSourceFileName(fileName);
if(es != Acad::eOk)
{
delete pImageDef;
return;
}
es = pImageDef->load();
ASSERT(es == Acad::eOk);
AcDbObjectId dictID = AcDbRasterImageDef::imageDictionary(pDb);
if (dictID==AcDbObjectId::kNull)
{
es = AcDbRasterImageDef::createImageDictionary(pDb, dictID);
if(es!= Acad::eOk)
{
delete pImageDef;
ads采用printf(采用T(“nCould not create dictionaryn”));
return;
}
}
AcDbDictionary* pDict = NULL;
es = acdbOpenObject((AcDbObject*&)pDict,
dictID, AcDb::kForWrite);
if(es != Acad::eOk)
{
delete pImageDef;
ads采用printf(采用T(“nCould not open dictionaryn”));
return;
}
BOOL bExist = pDict->has(szName);
AcDbObjectId objID;
if (!bExist)
{
pDict->setAt(szName, pImageDef, objID);
}
else
{
pDict->getAt(szName,
(AcDbObject*&)pImageDef,AcDb::kForWrite);
objID = pImageDef->objectId();
}
// close Dictionary and Definition.
pDict->close();
pImageDef->close();
AcDbRasterImage* pImage = new AcDbRasterImage;
es = pImage->setImageDefId(objID);
if (es != Acad::eOk)
{
delete pImage;
return;
}
AcDbObjectId modelId;
modelId = acdbSymUtil()->blockModelSpaceId(pDb);
AcDbBlockTableRecord *pBTRecord;
acdbOpenAcDbObject((AcDbObject*&)pBTRecord,
modelId, AcDb::kForWrite);
es = pBTRecord->appendAcDbEntity(pImage);
pBTRecord->close();
AcDbObjectId entID = pImage->objectId();
AcGePoint3d TempPoint3d(3.0, 0, 0);
AcGeVector3d LowerRightVector = TempPoint3d.asVector();
AcGePoint3d TempPoint3d2(0, 1.5, 0);
AcGeVector3d OnPlaneVector = TempPoint3d2.asVector();
if (pImage->setOrientation(org,
LowerRightVector, OnPlaneVector) !=Adesk::kTrue)
{
ads采用printf(采用T(“nSet Orientation failed.”));
pImage->close();
return;
}
pImage->setDisplayOpt(AcDbRasterImage::kShow, Adesk::kTrue);
pImage->setDisplayOpt(AcDbRasterImage::kTransparent,
Adesk::kTrue);
AcDbObjectPointer<AcDbRasterImageDefReactor>
rasterImageDefReactor;
// new it
rasterImageDefReactor.create();
// Set the entity to be its owner.
es = rasterImageDefReactor->setOwnerId(pImage->objectId());
// if ok
if (es == Acad::eOk)
{
AcDbObjectId defReactorId;
// assign the object an objectId
es = pDb->addAcDbObject(defReactorId,
rasterImageDefReactor.object());
// if ok
if (es == Acad::eOk)
{
// set the image reactor id
pImage->setReactorId(defReactorId);
AcDbObjectPointer<AcDbRasterImageDef>
rasterImagedef(pImage->imageDefId(),
AcDb::kForWrite);
// if ok
if (rasterImagedef.openStatus() == Acad::eOk)
{
rasterImagedef->addPersistentReactor(defReactorId);
}
}
}
pImage->close();
}
页:
[1]