Addition of image as background into DWG
How to add an image as a background in DWG
Issue: How to add an image as a background in DWG.
Tips: To do this, create a CadRasterImageDef object for the background image, create a CadRasterImage object to insert the background for the drawing, add a CadRasterImage object to the drawing objects, create a CadBaseObject CadBaseObject and add it to cadImage.Objects, process everything via CadBlockTableObject.
Example:
CadRasterImageDef rasterImageDef = new CadRasterImageDef("background.jpg", 0, 0); | |
rasterImageDef.ObjectHandle = "RefID"; | |
rasterImageDef.SoftOwner = cadImage.Layouts["Model"].BlockTableRecordHandle; | |
rasterImageDef.FileName = "background.jpg"; | |
// inserts RasterImage inside DWG, requires fixes for CadBlockEntity.cs | |
CadRasterImage rasterImage = new CadRasterImage(rasterImageDef, | |
new Cad3DPoint(2700, 1300, 0), new Cad3DPoint(0.5, 0, 0), new Cad3DPoint(0, 0.5, 0)); | |
rasterImage.ObjectHandle = newObjectID; | |
rasterImage.LayerName = "0"; | |
rasterImage.ImageDefReference = "RefID"; | |
rasterImage.DisplayFlags = 1; | |
rasterImage.InsertionPoint.X = 2700; | |
rasterImage.InsertionPoint.Y = 1300; | |
rasterImage.UVector.X = 0.5; | |
rasterImage.VVector.Y = 0.5; | |
List<CadBaseEntity> entities = new List<CadBaseEntity>(cadImage.Entities); | |
// order doesn't matter but it is good idea to make is synchronized with below | |
// entities.Insert(0, rasterImage); // add to the beginning to fill image with background, entities will be above | |
entities.Add(rasterImage); | |
cadImage.Entities = entities.ToArray(); | |
List<CadBaseObject> objects = new List<CadBaseObject>(cadImage.Objects); | |
objects.Add(rasterImageDef); | |
cadImage.Objects = objects.ToArray(); | |
CadBlockTableObject blockTableObjectReference = null; | |
CadBlockEntity cadBlockEntity = null; | |
foreach (CadBlockTableObject tableObject in cadImage.BlocksTables) | |
{ | |
if (string.Equals(tableObject.HardPointerToLayout, cadImage.Layouts["Model"].ObjectHandle)) | |
{ | |
blockTableObjectReference = tableObject; | |
break; | |
} | |
} | |
if (blockTableObjectReference != null && cadImage.BlockEntities.ContainsKey(blockTableObjectReference.BlockName)) | |
{ | |
cadBlockEntity = cadImage.BlockEntities[blockTableObjectReference.BlockName]; | |
} | |
List<CadBaseEntity> blockEntities = new List<CadBaseEntity>(cadBlockEntity.Entities); | |
blockEntities.Insert(0, rasterImage); // add to the beginning to fill image with background, entities will be above | |
cadBlockEntity.Entities = blockEntities.ToArray(); |