Crash when Creating Raster Image

Crash when Creating Raster Image

Anonymous
Not applicable
1,196 Views
1 Reply
Message 1 of 2

Crash when Creating Raster Image

Anonymous
Not applicable
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();

}
0 Likes
1,197 Views
1 Reply
Reply (1)
Message 2 of 2

Anonymous
Not applicable
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;
0 Likes