/// <summary> /// Добавляем ObjectData-атрибуты к примитиву чертежа /// </summary> /// <param name="wid"> ObjectId примитива </param> /// <param name="wr"> Данные атрибутов </param> /// <param name="wTbl"> Таблица ObjectData </param> public void AddAttr(ObjectId wid, Data.MyRecord wr, Autodesk.Gis.Map.ObjectData.Table wTbl) { AppServ.Document acDoc = AppServ.Application.DocumentManager.MdiActiveDocument; using (AppServ.DocumentLock acLckDoc = acDoc.LockDocument()) { using (Transaction acTrans = acDoc.Database.TransactionManager.StartTransaction()) { using (Record odRecord = Record.Create()) { wTbl.InitRecord(odRecord); FieldDefinition fdef; Data.FieldValue fval; for (int i = 0; i < wTbl.FieldDefinitions.Count; i++) { fdef = wTbl.FieldDefinitions[i]; fval = wr.SearchField(fdef.Name); if (fval != null) { if (!fval.IsGeom) { odRecord[i].Assign(fval.GetString()); } } } wTbl.AddRecord(odRecord, wid); acTrans.Commit(); } } } }
public static void ShowFrameMenu() { AdeskAppSvr.Document doc = AdeskAppSvr.Application.DocumentManager.MdiActiveDocument; doc.SendStringToExecute("UCS W ", false, false, true);//make current coordinate system to be WCS AdeskAppSvr.DocumentLock docLock = doc.LockDocument(); DigitalSign mDigital = new DigitalSign(); AdeskAppSvr.Application.ShowModalDialog(mDigital); docLock.Dispose(); }
/// <summary> /// show form /// </summary> /// <param name="Sender"></param> /// <param name="e"></param> public static void ShowFrame(Object Sender, EventArgs e) { AdeskAppSvr.Document doc = AdeskAppSvr.Application.DocumentManager.MdiActiveDocument; doc.SendStringToExecute("UCS W ", false, false, true);//make current coordinate system to be WCS AdeskAppSvr.DocumentLock docLock = doc.LockDocument(); NewForm mDigital = new NewForm(); AdeskAppSvr.Application.ShowModalDialog(mDigital); docLock.Dispose(); }
public static void CrateExternalBlock() { Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; PromptSelectionOptions optSel = new PromptSelectionOptions(); PromptSelectionResult ProSelRes = ed.GetSelection(optSel); switch (ProSelRes.Status) { case PromptStatus.OK: //Set Block //Criate blockReference ObjectId objBlock = criarDefiniçãoDeBloco(ProSelRes.Value.GetObjectIds()); Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { try { Database dbAux = new Database(true, false); dbAux.SaveAs("C:\\teste1.dwg", DwgVersion.Current); Autodesk.AutoCAD.ApplicationServices.Document Doc = null; Doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.Open("C:\\teste1.dwg", false); ObjectIdCollection ids = new ObjectIdCollection(); ids.Add(objBlock); using (DocumentLock dl = Doc.LockDocument()) { IdMapping im = new IdMapping(); db.WblockCloneObjects( ids, Doc.Database.BlockTableId, im, DuplicateRecordCloning.MangleName, false ); } Doc.CloseAndSave("C:\\teste1.dwg"); } catch (System.Exception ex) { trans.Abort(); return; } } break; case PromptStatus.Cancel: //Command Canceled break; } }
public static void PlotRegion() { Ap.Document doc = cad.DocumentManager.MdiActiveDocument; if (doc == null || doc.IsDisposed) { return; } Ed.Editor ed = doc.Editor; Db.Database db = doc.Database; using (doc.LockDocument()) { Ed.PromptEntityOptions peo = new Ed.PromptEntityOptions( "\nSelect a region" ); peo.SetRejectMessage("\nIt is not a region." ); peo.AddAllowedClass(typeof(Db.Region), false); Ed.PromptEntityResult per = ed.GetEntity(peo); if (per.Status != Ed.PromptStatus.OK) { ed.WriteMessage("\nCommand canceled.\n"); return; } Db.ObjectId regionId = per.ObjectId; Microsoft.Win32.SaveFileDialog saveFileDialog = new Microsoft.Win32 .SaveFileDialog(); saveFileDialog.Title = "PDF file name"; saveFileDialog.Filter = "PDF-files|*.pdf"; bool?result = saveFileDialog.ShowDialog(); if (!result.HasValue || !result.Value) { ed.WriteMessage("\nCommand canceled."); return; } String pdfFileName = saveFileDialog.FileName; PlotRegion(regionId, "DWG To PDF.pc3", "ISO_A4_(210.00_x_297.00_MM)", pdfFileName); ed.WriteMessage("\nThe \"{0}\" file created.\n", pdfFileName); } }
public static ObjectId criarDefiniçãoDeBloco(ObjectId[] objIds) { string nomeBloco = "Teste1"; Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { try { Autodesk.AutoCAD.ApplicationServices.Document Doc = null; Doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; using (DocumentLock dl = Doc.LockDocument()) { //abrir tabela de blocos BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable; //verificar se o bloco já existe if (bt.Has(nomeBloco)) { return(bt[nomeBloco]); } BlockTableRecord novoBloco = new BlockTableRecord(); novoBloco.Name = nomeBloco; bt.UpgradeOpen(); bt.Add(novoBloco); trans.AddNewlyCreatedDBObject(novoBloco, true); foreach (ObjectId objId in objIds) { DBObject obj = trans.GetObject(objId, OpenMode.ForRead); Entity ent = (Entity)obj; Entity entClone = ent.Clone() as Entity; novoBloco.AppendEntity(entClone); trans.AddNewlyCreatedDBObject(entClone, true); } trans.Commit(); return(novoBloco.ObjectId); } } catch (System.Exception ex) { trans.Abort(); return(ObjectId.Null); } } }
// This code based on Kean Walmsley's article: // http://through-the-interface.typepad.com/through_the_interface/2007/10/plotting-a-wind.html public static void PlotRegion(Db.ObjectId regionId, String pcsFileName, String mediaName, String outputFileName) { if (regionId.IsNull) { throw new ArgumentException("regionId.IsNull == true"); } if (!regionId.IsValid) { throw new ArgumentException("regionId.IsValid == false"); } if (regionId.ObjectClass.Name != "AcDbRegion") { throw new ArgumentException("regionId.ObjectClass.Name != AcDbRegion"); } if (pcsFileName == null) { throw new ArgumentNullException("pcsFileName"); } if (pcsFileName.Trim() == String.Empty) { throw new ArgumentException("pcsFileName.Trim() == String.Empty"); } if (mediaName == null) { throw new ArgumentNullException("mediaName"); } if (mediaName.Trim() == String.Empty) { throw new ArgumentException("mediaName.Trim() == String.Empty"); } if (outputFileName == null) { throw new ArgumentNullException("outputFileName"); } if (outputFileName.Trim() == String.Empty) { throw new ArgumentException("outputFileName.Trim() == String.Empty"); } Db.Database previewDb = Hs.WorkingDatabase; Db.Database db = null; Ap.Document doc = cad.DocumentManager.MdiActiveDocument; if (doc == null || doc.IsDisposed) { return; } Ed.Editor ed = doc.Editor; try { if (regionId.Database != null && !regionId.Database.IsDisposed) { Hs.WorkingDatabase = regionId.Database; db = regionId.Database; } else { db = doc.Database; } using (doc.LockDocument()) { using (Db.Transaction tr = db.TransactionManager.StartTransaction()) { Db.Region region = tr.GetObject(regionId, Db.OpenMode.ForRead) as Db.Region; Db.Extents3d extends = region.GeometricExtents; Db.ObjectId modelId = Us.GetBlockModelSpaceId(db); Db.BlockTableRecord model = tr.GetObject(modelId, Db.OpenMode.ForRead) as Db.BlockTableRecord; Db.Layout layout = tr.GetObject(model.LayoutId, Db.OpenMode.ForRead) as Db.Layout; using (Pt.PlotInfo pi = new Pt.PlotInfo()) { pi.Layout = model.LayoutId; using (Db.PlotSettings ps = new Db.PlotSettings(layout.ModelType) ) { ps.CopyFrom(layout); Db.PlotSettingsValidator psv = Db.PlotSettingsValidator .Current; Gm.Point2d bottomLeft = Gm.Point2d.Origin; Gm.Point2d topRight = Gm.Point2d.Origin; region.GetVisualBoundary(0.1, ref bottomLeft, ref topRight); Gm.Point3d bottomLeft_3d = new Gm.Point3d(bottomLeft.X, bottomLeft.Y, 0); Gm.Point3d topRight_3d = new Gm.Point3d(topRight.X, topRight.Y, 0); Db.ResultBuffer rbFrom = new Db.ResultBuffer(new Db.TypedValue( 5003, 1)); Db.ResultBuffer rbTo = new Db.ResultBuffer(new Db.TypedValue( 5003, 2)); double[] firres = new double[] { 0, 0, 0 }; double[] secres = new double[] { 0, 0, 0 }; acedTrans(bottomLeft_3d.ToArray(), rbFrom.UnmanagedObject, rbTo.UnmanagedObject, 0, firres); acedTrans(topRight_3d.ToArray(), rbFrom.UnmanagedObject, rbTo.UnmanagedObject, 0, secres); Db.Extents2d extents = new Db.Extents2d( firres[0], firres[1], secres[0], secres[1] ); psv.SetZoomToPaperOnUpdate(ps, true); psv.SetPlotWindowArea(ps, extents); psv.SetPlotType(ps, Db.PlotType.Window); psv.SetUseStandardScale(ps, true); psv.SetStdScaleType(ps, Db.StdScaleType.ScaleToFit); psv.SetPlotCentered(ps, true); psv.SetPlotRotation(ps, Db.PlotRotation.Degrees000); // We'll use the standard DWF PC3, as // for today we're just plotting to file psv.SetPlotConfigurationName(ps, pcsFileName, mediaName); // We need to link the PlotInfo to the // PlotSettings and then validate it pi.OverrideSettings = ps; Pt.PlotInfoValidator piv = new Pt.PlotInfoValidator(); piv.MediaMatchingPolicy = Pt.MatchingPolicy.MatchEnabled; piv.Validate(pi); // A PlotEngine does the actual plotting // (can also create one for Preview) if (Pt.PlotFactory.ProcessPlotState == Pt.ProcessPlotState .NotPlotting) { using (Pt.PlotEngine pe = Pt.PlotFactory.CreatePublishEngine() ) { // Create a Progress Dialog to provide info // and allow thej user to cancel using (Pt.PlotProgressDialog ppd = new Pt.PlotProgressDialog(false, 1, true)) { ppd.set_PlotMsgString( Pt.PlotMessageIndex.DialogTitle, "Custom Plot Progress"); ppd.set_PlotMsgString( Pt.PlotMessageIndex.CancelJobButtonMessage, "Cancel Job"); ppd.set_PlotMsgString( Pt.PlotMessageIndex.CancelSheetButtonMessage, "Cancel Sheet"); ppd.set_PlotMsgString( Pt.PlotMessageIndex.SheetSetProgressCaption, "Sheet Set Progress"); ppd.set_PlotMsgString( Pt.PlotMessageIndex.SheetProgressCaption, "Sheet Progress"); ppd.LowerPlotProgressRange = 0; ppd.UpperPlotProgressRange = 100; ppd.PlotProgressPos = 0; // Let's start the plot, at last ppd.OnBeginPlot(); ppd.IsVisible = true; pe.BeginPlot(ppd, null); // We'll be plotting a single document pe.BeginDocument(pi, doc.Name, null, 1, true, // Let's plot to file outputFileName); // Which contains a single sheet ppd.OnBeginSheet(); ppd.LowerSheetProgressRange = 0; ppd.UpperSheetProgressRange = 100; ppd.SheetProgressPos = 0; Pt.PlotPageInfo ppi = new Pt.PlotPageInfo(); pe.BeginPage(ppi, pi, true, null); pe.BeginGenerateGraphics(null); pe.EndGenerateGraphics(null); // Finish the sheet pe.EndPage(null); ppd.SheetProgressPos = 100; ppd.OnEndSheet(); // Finish the document pe.EndDocument(null); // And finish the plot ppd.PlotProgressPos = 100; ppd.OnEndPlot(); pe.EndPlot(null); } } } else { ed.WriteMessage("\nAnother plot is in progress."); } } } tr.Commit(); } } } finally { Hs.WorkingDatabase = previewDb; } }