public static void DetachRasterImage(LandRasterImage landRastr) { AcDb.Database curDb = AcApp.DocumentManager.MdiActiveDocument.Database; using (AcDb.Transaction tr = curDb.TransactionManager.StartTransaction()) { AcDb.RasterImageDef rasterDef; //bool bRasterDefCreated = false; AcDb.ObjectId imgDefId; AcDb.ObjectId imgDctID = AcDb.RasterImageDef.GetImageDictionary(curDb); if (imgDctID.IsNull) { imgDctID = AcDb.RasterImageDef.CreateImageDictionary(curDb); } AcDb.DBDictionary imgDict = tr.GetObject(imgDctID, AcDb.OpenMode.ForWrite) as AcDb.DBDictionary; if (imgDict.Contains(landRastr.ImageName)) { imgDefId = imgDict.GetAt(landRastr.ImageName); rasterDef = tr.GetObject(imgDefId, AcDb.OpenMode.ForWrite) as AcDb.RasterImageDef; if (rasterDef.IsLoaded) { rasterDef.Unload(true); imgDict.Remove(landRastr.ImageName); } } tr.Commit(); } }
private void leaderStyleHandler(string styleName, int scale) { _Db.DBDictionary mleaderStyleTable = _c.trans.GetObject(_c.db.MLeaderStyleDictionaryId, _Db.OpenMode.ForWrite) as _Db.DBDictionary; _Db.TextStyleTable txtStyleTable = _c.trans.GetObject(_c.db.TextStyleTableId, _Db.OpenMode.ForWrite) as _Db.TextStyleTable; if (!mleaderStyleTable.Contains(styleName)) { _Db.MLeaderStyle newStyle = new _Db.MLeaderStyle(); newStyle.Annotative = _Db.AnnotativeStates.False; newStyle.ArrowSize = 3.0; newStyle.ArrowSymbolId = _c.blockTable["_NONE"]; //newStyle.BlockColor=; //BYBLOCK newStyle.BlockConnectionType = _Db.BlockConnectionType.ConnectExtents; newStyle.BlockId = _Db.ObjectId.Null; newStyle.BlockRotation = 0; newStyle.BlockScale = new _Ge.Scale3d(1, 1, 1); newStyle.BreakSize = 0; newStyle.ContentType = _Db.ContentType.MTextContent; newStyle.DefaultMText = new _Db.MText(); newStyle.DoglegLength = 8; newStyle.DrawLeaderOrderType = _Db.DrawLeaderOrderType.DrawLeaderHeadFirst; newStyle.DrawMLeaderOrderType = _Db.DrawMLeaderOrderType.DrawLeaderFirst; newStyle.EnableBlockRotation = true; newStyle.EnableBlockScale = true; newStyle.EnableDogleg = false; newStyle.EnableFrameText = false; newStyle.EnableLanding = true; newStyle.FirstSegmentAngleConstraint = _Db.AngleConstraint.DegreesAny; newStyle.LandingGap = 1; newStyle.LeaderLineColor = _Cm.Color.FromColorIndex(_Cm.ColorMethod.None, 142); newStyle.LeaderLineType = _Db.LeaderType.StraightLeader; //newStyle.LeaderLineTypeId=; //BYBLOCK //newStyle.LeaderLineWeight=; //BYBLOCK newStyle.MaxLeaderSegmentsPoints = 2; newStyle.Scale = scale; newStyle.SecondSegmentAngleConstraint = _Db.AngleConstraint.DegreesAny; newStyle.TextAlignAlwaysLeft = false; newStyle.TextAlignmentType = _Db.TextAlignmentType.LeftAlignment; newStyle.TextAngleType = _Db.TextAngleType.HorizontalAngle; //newStyle.TextColor=; //BYBLOCK newStyle.TextHeight = 2.5; newStyle.TextStyleId = txtStyleTable["Stommest"]; newStyle.SetTextAttachmentType(_Db.TextAttachmentType.AttachmentBottomOfTopLine, _Db.LeaderDirectionType.LeftLeader); // Left attachment newStyle.SetTextAttachmentType(_Db.TextAttachmentType.AttachmentBottomOfTopLine, _Db.LeaderDirectionType.RightLeader); // Right attachment newStyle.PostMLeaderStyleToDb(_c.db, styleName); _c.trans.AddNewlyCreatedDBObject(newStyle, true); write("[OUTPUT] MLeader style '" + styleName + "' created"); } }
public static void ImportLayout(string layoutName, string filename) { // Get the current document and database _AcAp.Document acDoc = _AcAp.Application.DocumentManager.MdiActiveDocument; _AcDb.Database acCurDb = acDoc.Database; // Specify the layout name and drawing file to work with //string layoutName = "MAIN AND SECOND FLOOR PLAN"; //string filename = "C:\\AutoCAD\\Sample\\Sheet Sets\\Architectural\\A-01.dwg"; // Create a new database object and open the drawing into memory _AcDb.Database acExDb = new _AcDb.Database(false, true); acExDb.ReadDwgFile(filename, Autodesk.AutoCAD.DatabaseServices.FileOpenMode.OpenForReadAndAllShare, true, ""); // Create a transaction for the external drawing using (_AcDb.Transaction acTransEx = acExDb.TransactionManager.StartTransaction()) { // Get the layouts dictionary _AcDb.DBDictionary layoutsEx = acTransEx.GetObject(acExDb.LayoutDictionaryId, _AcDb.OpenMode.ForRead) as _AcDb.DBDictionary; // Check to see if the layout exists in the external drawing if (layoutsEx.Contains(layoutName) == true) { // Get the layout and block objects from the external drawing _AcDb.Layout layEx = layoutsEx.GetAt(layoutName).GetObject(_AcDb.OpenMode.ForRead) as _AcDb.Layout; _AcDb.BlockTableRecord blkBlkRecEx = acTransEx.GetObject(layEx.BlockTableRecordId, _AcDb.OpenMode.ForRead) as _AcDb.BlockTableRecord; // Get the objects from the block associated with the layout _AcDb.ObjectIdCollection idCol = new _AcDb.ObjectIdCollection(); foreach (_AcDb.ObjectId id in blkBlkRecEx) { idCol.Add(id); } // Create a transaction for the current drawing using (_AcDb.Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Get the block table and create a new block // then copy the objects between drawings _AcDb.BlockTable blkTbl = acTrans.GetObject(acCurDb.BlockTableId, _AcDb.OpenMode.ForWrite) as _AcDb.BlockTable; using (_AcDb.BlockTableRecord blkBlkRec = new _AcDb.BlockTableRecord()) { int layoutCount = layoutsEx.Count - 1; blkBlkRec.Name = "*Paper_Space" + layoutCount.ToString(); blkTbl.Add(blkBlkRec); acTrans.AddNewlyCreatedDBObject(blkBlkRec, true); acExDb.WblockCloneObjects(idCol, blkBlkRec.ObjectId, new _AcDb.IdMapping(), _AcDb.DuplicateRecordCloning.Ignore, false); // Create a new layout and then copy properties between drawings _AcDb.DBDictionary layouts = acTrans.GetObject(acCurDb.LayoutDictionaryId, _AcDb.OpenMode.ForWrite) as _AcDb.DBDictionary; using (_AcDb.Layout lay = new _AcDb.Layout()) { lay.LayoutName = layoutName; lay.AddToLayoutDictionary(acCurDb, blkBlkRec.ObjectId); acTrans.AddNewlyCreatedDBObject(lay, true); lay.CopyFrom(layEx); _AcDb.DBDictionary plSets = acTrans.GetObject(acCurDb.PlotSettingsDictionaryId, _AcDb.OpenMode.ForRead) as _AcDb.DBDictionary; // Check to see if a named page setup was assigned to the layout, // if so then copy the page setup settings if (lay.PlotSettingsName != "") { // Check to see if the page setup exists if (plSets.Contains(lay.PlotSettingsName) == false) { plSets.UpgradeOpen(); using (_AcDb.PlotSettings plSet = new _AcDb.PlotSettings(lay.ModelType)) { plSet.PlotSettingsName = lay.PlotSettingsName; plSet.AddToPlotSettingsDictionary(acCurDb); acTrans.AddNewlyCreatedDBObject(plSet, true); _AcDb.DBDictionary plSetsEx = acTransEx.GetObject(acExDb.PlotSettingsDictionaryId, _AcDb.OpenMode.ForRead) as _AcDb.DBDictionary; _AcDb.PlotSettings plSetEx = plSetsEx.GetAt(lay.PlotSettingsName).GetObject(_AcDb.OpenMode.ForRead) as _AcDb.PlotSettings; plSet.CopyFrom(plSetEx); } } } } } // Regen the drawing to get the layout tab to display acDoc.Editor.Regen(); // Save the changes made acTrans.Commit(); } } else { // Display a message if the layout could not be found in the specified drawing acDoc.Editor.WriteMessage("\nLayout '" + layoutName + "' could not be imported from '" + filename + "'."); } // Discard the changes made to the external drawing file acTransEx.Abort(); } // Close the external drawing file acExDb.Dispose(); }
public static void AttachRasterImage(LandRasterImage landRastr) { AcEd.Editor ed = AcApp.DocumentManager.MdiActiveDocument.Editor; //bool bRasterDefCreated = false; AcDb.Database curDb = AcApp.DocumentManager.MdiActiveDocument.Database; using (AcDb.Transaction tr = curDb.TransactionManager.StartTransaction()) { AcDb.RasterImageDef rasterDef; AcDb.ObjectId imgDefId; AcDb.ObjectId imgDctID = AcDb.RasterImageDef.GetImageDictionary(curDb); if (imgDctID.IsNull) { imgDctID = AcDb.RasterImageDef.CreateImageDictionary(curDb); } AcDb.DBDictionary imgDict = (AcDb.DBDictionary)tr.GetObject(imgDctID, AcDb.OpenMode.ForRead); if (imgDict.Contains(landRastr.ImageName)) { imgDefId = imgDict.GetAt(landRastr.ImageName); rasterDef = (AcDb.RasterImageDef)tr.GetObject(imgDefId, AcDb.OpenMode.ForWrite); if (rasterDef.IsLoaded) { //return; } } else { AcPApp.AcadApplication app = AcApp.AcadApplication as AcPApp.AcadApplication; AcPApp.AcadDocument doc = app.ActiveDocument; AcPDb.AcadModelSpace mSpace = doc.ModelSpace; AcPDb.AcadRasterImage ri = mSpace.AddRaster(landRastr.FileName, landRastr.InsertPoint.ToArray(), 1000, 0); ri.Name = landRastr.ImageName; ri.Transparency = true; ServiceCAD.CreateLayer(landRastr.Layer); ri.Layer = landRastr.Layer; ri.ImageHeight = 1000; ri.ImageWidth = 1000; tr.Commit(); return; } AcDb.BlockTable blkTbl = (AcDb.BlockTable)tr.GetObject(curDb.BlockTableId, AcDb.OpenMode.ForRead); AcDb.BlockTableRecord acBlkTblRec = (AcDb.BlockTableRecord)tr.GetObject(blkTbl[AcDb.BlockTableRecord.ModelSpace], AcDb.OpenMode.ForWrite); using (AcDb.RasterImage rasterImage = new AcDb.RasterImage()) { rasterImage.ImageDefId = imgDefId; AcGe.Vector3d width; AcGe.Vector3d height; AcGe.Matrix3d ucs = ed.CurrentUserCoordinateSystem; double size = 1000; width = new AcGe.Vector3d(size, 0, 0); height = new AcGe.Vector3d(0, size, 0); AcGe.Point3d insPt = landRastr.InsertPoint; AcGe.CoordinateSystem3d coordinateSystem = new AcGe.CoordinateSystem3d(insPt.TransformBy(ucs), width.TransformBy(ucs), height.TransformBy(ucs)); rasterImage.Orientation = coordinateSystem; rasterImage.Rotation = 0; rasterImage.ShowImage = true; acBlkTblRec.AppendEntity(rasterImage); tr.AddNewlyCreatedDBObject(rasterImage, true); rasterImage.AssociateRasterDef(rasterDef); } tr.Commit(); } }
public void AttachRasterImage() { // Get the current database and start a transaction AcDb.Database acCurDb; acCurDb = AcAp.Application.DocumentManager.MdiActiveDocument.Database; using (AcDb.Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) { // Define the name and image to use string strImgName = "5525"; string strFileName = "C:\\_Temp_\\5525.TIF"; AcDb.RasterImageDef acRasterDef; bool bRasterDefCreated = false; AcDb.ObjectId acImgDefId; // Get the image dictionary AcDb.ObjectId acImgDctID = AcDb.RasterImageDef.GetImageDictionary(acCurDb); // Check to see if the dictionary does not exist, it not then create it if (acImgDctID.IsNull) { acImgDctID = AcDb.RasterImageDef.CreateImageDictionary(acCurDb); } // Open the image dictionary AcDb.DBDictionary acImgDict = acTrans.GetObject(acImgDctID, AcDb.OpenMode.ForRead) as AcDb.DBDictionary; // Check to see if the image definition already exists if (acImgDict.Contains(strImgName)) { acImgDefId = acImgDict.GetAt(strImgName); acRasterDef = acTrans.GetObject(acImgDefId, AcDb.OpenMode.ForWrite) as AcDb.RasterImageDef; } else { // Create a raster image definition AcDb.RasterImageDef acRasterDefNew = new AcDb.RasterImageDef { // Set the source for the image file SourceFileName = strFileName }; acImgDict.UpgradeOpen(); acImgDefId = acImgDict.SetAt(strImgName, acRasterDefNew); // Load the image into memory acRasterDefNew.Load(); // Add the image definition to the dictionary ////acImgDict.UpgradeOpen(); ////acImgDefId = acImgDict.SetAt(strImgName, acRasterDefNew); acTrans.AddNewlyCreatedDBObject(acRasterDefNew, true); /***/ acRasterDef = acRasterDefNew; bRasterDefCreated = true; } // Open the Block table for read AcDb.BlockTable acBlkTbl; acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, AcDb.OpenMode.ForRead) as AcDb.BlockTable; // Open the Block table record Model space for write AcDb.BlockTableRecord acBlkTblRec; acBlkTblRec = acTrans.GetObject(acBlkTbl[AcDb.BlockTableRecord.ModelSpace], AcDb.OpenMode.ForWrite) as AcDb.BlockTableRecord; // Create the new image and assign it the image definition using (AcDb.RasterImage acRaster = new AcDb.RasterImage()) { acRaster.ImageDefId = acImgDefId; // Use ImageWidth and ImageHeight to get the size of the image in pixels (1024 x 768). // Use ResolutionMMPerPixel to determine the number of millimeters in a pixel so you // can convert the size of the drawing into other units or millimeters based on the // drawing units used in the current drawing. // Define the width and height of the image AcGe.Vector3d width; AcGe.Vector3d height; // Check to see if the measurement is set to English (Imperial) or Metric units if (acCurDb.Measurement == AcDb.MeasurementValue.English) { width = new AcGe.Vector3d((acRasterDef.ResolutionMMPerPixel.X * acRaster.ImageWidth) / 25.4, 0, 0); height = new AcGe.Vector3d(0, (acRasterDef.ResolutionMMPerPixel.Y * acRaster.ImageHeight) / 25.4, 0); } else { width = new AcGe.Vector3d(acRasterDef.ResolutionMMPerPixel.X * acRaster.ImageWidth, 0, 0); height = new AcGe.Vector3d(0, acRasterDef.ResolutionMMPerPixel.Y * acRaster.ImageHeight, 0); } // Define the position for the image AcGe.Point3d insPt = new AcGe.Point3d(52000.0, 56000.0, 100.0); // Define and assign a coordinate system for the image's orientation AcGe.CoordinateSystem3d coordinateSystem = new AcGe.CoordinateSystem3d(insPt, width * 2, height * 2); acRaster.Orientation = coordinateSystem; // Set the rotation angle for the image acRaster.Rotation = 0; // Add the new object to the block table record and the transaction acBlkTblRec.AppendEntity(acRaster); acTrans.AddNewlyCreatedDBObject(acRaster, true); // Connect the raster definition and image together so the definition // does not appear as "unreferenced" in the External References palette. /*AcDb.RasterImage.EnableReactors(true);*/ acRaster.AssociateRasterDef(acRasterDef); acRaster.ShowImage = true; acRaster.ColorIndex = 200; acRaster.ImageTransparency = true; acRaster.Orientation = new AcGe.CoordinateSystem3d(insPt, new AcGe.Vector3d(1000, 0, 0), new AcGe.Vector3d(0, 2000, 0)); if (bRasterDefCreated) { acRasterDef.Dispose(); } } // Save the new object to the database acTrans.Commit(); // Dispose of the transaction } }