.NET
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Crash when Creating Raster Image

1 REPLY 1
Reply
Message 1 of 2
CSHodge
1099 Views, 1 Reply

Crash when Creating Raster Image

I know I'm missing something simple...here's my code:

Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = db.TransactionManager;
using (Transaction t = tm.StartTransaction())
{

// open the dictionary
Autodesk.AutoCAD.DatabaseServices.ObjectId imgDictID = RasterImageDef.GetImageDictionary(db);
DBDictionary imgDict;
if (imgDictID.OldId == 0)
{
imgDictID = RasterImageDef.CreateImageDictionary(db);
}


// create the raster image definition
RasterImageDef rasterDef = new RasterImageDef();
// rasterDef.SourceFileName = mapURL;
rasterDef.SourceFileName = "C:/ObjectARX 2007/samples/graphics/Render/background.jpg";
rasterDef.Load();

// test the image dictionary and the raster before going further
bool bTestLoad = rasterDef.IsLoaded;
Autodesk.AutoCAD.DatabaseServices.ObjectId TestImgDictID = RasterImageDef.GetImageDictionary(db);
imgDict = (DBDictionary)t.GetObject(imgDictID, OpenMode.ForWrite);


// add the raster definition to the dictionary iff it doesn't already exist
Autodesk.AutoCAD.DatabaseServices.ObjectId rasterDefID;
if (!imgDict.Contains("NewMap"))
{
rasterDefID = imgDict.SetAt("NewMap", rasterDef);
}
t.AddNewlyCreatedDBObject(rasterDef, true);

/* test */
bool bTestImage = imgDict.Contains("NewMap");

// everything is good up to this point...


// now add the REAL raster image reference
RasterImage rasterRef = new RasterImage();
rasterRef.ImageDefId = rasterDef.ObjectId;
// rasterRef.AssociateRasterDef(rasterDef); // crashes here if I use Associate
Autodesk.AutoCAD.DatabaseServices.ObjectId testRefID = rasterRef.ObjectId;
t.AddNewlyCreatedDBObject(rasterRef, false); // crashes here
testRefID = rasterRef.ObjectId;


t.Commit();

}
1 REPLY 1
Message 2 of 2
CSHodge
in reply to: CSHodge

Doh!

I forgot to add the entity to the database! Should have been:

// now add the REAL raster image reference
RasterImage rasterRef = new RasterImage();
rasterRef.ImageDefId = rasterDef.ObjectId;
Autodesk.AutoCAD.DatabaseServices.ObjectId testRefID = rasterRef.ObjectId;
BlockTable bt = (BlockTable)tm.GetObject(db.BlockTableId, OpenMode.ForRead, false);
BlockTableRecord btr = (BlockTableRecord)tm.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);
btr.AppendEntity(rasterRef);

tm.AddNewlyCreatedDBObject(rasterRef, true);
testRefID = rasterRef.ObjectId;

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk DevCon in Munich May 28-29th


Autodesk Design & Make Report

”Boost