/// <summary> /// 绘制断面、量表 /// </summary> /// <param name="db"></param> /// <param name="AnchorPoint"></param> public void PlotB(Database db, Point2d AnchorPoint) { int ScaleB = 50; using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable blockTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord ms = tr.GetObject(blockTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; DimStyleTable dst = (DimStyleTable)tr.GetObject(db.DimStyleTableId, OpenMode.ForRead); string blkname = string.Format("T321-C{0}L{1}", Columns, Layers); ObjectId blkRecId = blockTbl[blkname]; using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } tr.Commit(); } // 图名 TextPloter.PrintTitle(db, "标准横断面", AnchorPoint.Convert2D(0, 20 * ScaleB), ScaleB); }
public void Main() { //-------------------------------------------------------------------------------------- // 基本句柄 //-------------------------------------------------------------------------------------- Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; ObjectId paperSpace = db.CreatPaperSpace(); MOExcel.Application app = new MOExcel.Application(); MOExcel.Workbook wbook = app.Workbooks.Add(Type.Missing); MOExcel.Worksheet wsheet = (MOExcel.Worksheet)wbook.Worksheets[1]; //-------------------------------------------------------------------------------------- // 初始化桥梁列表 //-------------------------------------------------------------------------------------- Bridge TheBridge; System.Data.DataTable Parameters = new System.Data.DataTable(); string aa = BPublicFunctions.GetXPath("选择设计表", "参数表|*.xls"); if (aa == "") { return; } else { Parameters = BPublicFunctions.GetDataFromExcelByCom(true, aa); ed.WriteMessage("\n桥梁数据读取成功"); } var IDtoPolot = Parameters.AsEnumerable().Select(t => t.Field <int>("序号")).ToList(); //-------------------------------------------------------------------------------------- // 加载贝雷梁模型 //-------------------------------------------------------------------------------------- MyCommands.CADini(); string T321ModelFilePath = BPublicFunctions.GetCADPath("选择设计表", "模型|*.model"); Database sourceDb = new Database(false, true); try { sourceDb.ReadDwgFile(T321ModelFilePath, System.IO.FileShare.Read, true, ""); ObjectIdCollection blockIds = new ObjectIdCollection(); Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = sourceDb.TransactionManager; using (Transaction myT = tm.StartTransaction()) { // Open the block table BlockTable bt = (BlockTable)tm.GetObject(sourceDb.BlockTableId, OpenMode.ForRead, false); // Check each block in the block table foreach (ObjectId btrId in bt) { BlockTableRecord btr = (BlockTableRecord)tm.GetObject(btrId, OpenMode.ForRead, false); // Only add named & non-layout blocks to the copy list if (!btr.IsAnonymous && !btr.IsLayout) { blockIds.Add(btrId); } btr.Dispose(); } } IdMapping mapping = new IdMapping(); sourceDb.WblockCloneObjects(blockIds, db.BlockTableId, mapping, DuplicateRecordCloning.Replace, false); } catch (Autodesk.AutoCAD.Runtime.Exception ex) { ed.WriteMessage("\nError during copy: " + ex.Message); } sourceDb.Dispose(); //-------------------------------------------------------------------------------------- // 初始化绘图空间 //-------------------------------------------------------------------------------------- ed.WriteMessage("\n 环境初始化成功.\n"); //-------------------------------------------------------------------------------------- // 绘图 //-------------------------------------------------------------------------------------- string fsd = Path.Combine(Path.GetDirectoryName(T321ModelFilePath), "TK.dwg"); int conter = 0; foreach (int ii in IDtoPolot) { TheBridge = new Bridge(Parameters, ii); double dymax; Point2d AP = Point2d.Origin.Convert2D(-0.5 * TheBridge.Pieces * 3000, conter * -30000); Point2d CC = Point2d.Origin.Convert2D(0, conter * -30000); Point2d PlotB_AP = CC.Convert2D(30000); dymax = TheBridge.PlotA(db, AP); TheBridge.PlotB(db, PlotB_AP); conter++; // 套图框 db.XrefAttachAndInsert(fsd, paperSpace, Point3d.Origin.Convert3D(0, (ii - 1) * (-297), 0)); db.XrefAttachAndInsert(fsd, paperSpace, Point3d.Origin.Convert3D(420, (ii - 1) * (-297), 0)); // 图名图号注释 TextPloter.PrintNumTitle(db, Point3d.Origin.Convert3D(0, (ii - 1) * (-297), 0), TheBridge); TextPloter.PrintNote(db, Point3d.Origin.Convert3D(360, (ii - 1) * (-297) + 40, 0)); TextPloter.PrintNote2(db, Point3d.Origin.Convert3D(250 + 420, (ii - 1) * (-297) + 62, 0)); TextPloter.PrintFName(db, Point3d.Origin.Convert3D(0, (ii - 1) * (-297), 0), TheBridge); // 视口 using (Transaction tr = db.TransactionManager.StartTransaction()) { Layout lay = (Layout)tr.GetObject(paperSpace, OpenMode.ForWrite); Viewport vpA, vpB; var btr = (BlockTableRecord)tr.GetObject(lay.BlockTableRecordId, OpenMode.ForWrite); vpA = new Viewport(); btr.AppendEntity(vpA); tr.AddNewlyCreatedDBObject(vpA, true); vpA.On = true; vpA.GridOn = false; vpA.DrawMyViewport(1, Point3d.Origin.Convert3D(0, (ii - 1) * (-297)), CC.Convert2D(0, dymax + (8 - 0.5 * 247) * TheBridge.GetScaleA()), TheBridge.GetScaleA()); vpB = new Viewport(); btr.AppendEntity(vpB); tr.AddNewlyCreatedDBObject(vpB, true); vpB.On = true; vpB.GridOn = false; vpB.DrawMyViewport(1, Point3d.Origin.Convert3D(420, (ii - 1) * (-297)), PlotB_AP.Convert2D(90 * 50, -35 * 50), 50); tr.Commit(); } // 表格 TheBridge.PlotNumTB(db, Point2d.Origin.Convert2D(420 + 310, (ii - 1) * (-297) + 240)); TheBridge.PlotMatTB(db, Point2d.Origin.Convert2D(420 + 620, (ii - 1) * (-297) + 240)); break; } Marshal.ReleaseComObject(wbook); wbook = null; app.Workbooks.Close(); app.KillExcelApp(); }
/// <summary> /// 绘制平立面 /// </summary> /// <param name="db"></param> /// <param name="AnchorPoint"></param> public double PlotA(Database db, Point2d AnchorPoint, int ScaleA = 0) { Transaction tr = db.TransactionManager.StartTransaction(); BlockTable blockTbl = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord ms = tr.GetObject(blockTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; DimStyleTable dst = (DimStyleTable)tr.GetObject(db.DimStyleTableId, OpenMode.ForRead); if (ScaleA == 0) { ScaleA = GetScaleA(); } double dy = ScaleA * -50; // 立面图 ObjectId blkRecId = blockTbl["T321-1"]; ObjectId HLJJ = blockTbl["T321-HLJJ"]; ObjectId QMB = blockTbl["T321-QMB"]; ObjectId HL = blockTbl["T321-HL-C" + Columns.ToString()]; ObjectId T321PM = blockTbl["T321-2"]; ObjectId XZ = blockTbl["T321-XZ"]; ObjectId QZC1 = blockTbl["T321-QZ-C1"]; ObjectId QZC1R = blockTbl["T321-QZ-C1R"]; ObjectId QZC2 = blockTbl["T321-QZ-C2"]; ObjectId QZC2R = blockTbl["T321-QZ-C2R"]; ObjectId ZBC1 = blockTbl["T321-ZB-C1"]; ObjectId ZBC2 = blockTbl["T321-ZB-C2"]; ObjectId ZBC3 = blockTbl["T321-ZB-C3"]; ObjectId ZBC3L = blockTbl["T321-ZB-C3L"]; ObjectId ZCJ = blockTbl["T321-ZCJ-2"]; ObjectId KFLG = blockTbl["T321-KFLG"]; ObjectId QMB2 = blockTbl["T321-QMB-2"]; ObjectId JQXG = blockTbl["T321-JQXG"]; // 立面桁架 for (int i = 0; i < Pieces; i++) { for (int j = 0; j < Layers; j++) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(0 + i * 3000, 0 + j * 1500), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } if (IsEnhence && i != 0 && i != (Pieces - 1)) { if (j == 0) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(0 + i * 3000, 0 + j * 1500 - 100), JQXG)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } else if (j == Layers - 1) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(0 + i * 3000, 0 + j * 1500 + 1500), JQXG)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } } if (j == 0) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(1413 + i * 3000, 328), HLJJ)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(1413 + i * 3000, dy), HL)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(1413 + 1410 + i * 3000, 328), HLJJ)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(1413 + 1410 + i * 3000, dy), HL)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(1323 + i * 3000, 553), QMB)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } } } blkRecId = blockTbl["T321-ZCJ-1"]; double offsetZCJ = 0.0; if (Columns != 1) { for (int i = 0; i < Pieces; i++) { if (IsEnhence) { if (i == 0 || i == (Pieces - 1)) { offsetZCJ = 0; } else { offsetZCJ = 100; } } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(910 + i * 3000, (Layers) * 1500 - 70 + offsetZCJ), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } } blkRecId = blockTbl["T321-YTDZ"]; using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } blkRecId = blockTbl["T321-HL-1"]; using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-157, 58), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-157, dy), HL)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } blkRecId = blockTbl["T321-ITDZ"]; using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000.0), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } blkRecId = blockTbl["T321-QZ"]; using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000.0 + 37, -145), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, -145), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } blkRecId = blockTbl["T321-ZB"]; using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000.0 + 37, -297), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, -297), blkRecId)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } // 平面桁架 for (int k = 0; k < 2; k++) { double sidey = (-4200) * k; int dir = k == 0 ? 1 : -1; for (int i = 0; i < Columns; i++) { double cy; if (i == 0) { cy = 0; } else if (i == 1) { cy = dir * 450; } else { cy = (450 + 250) * dir; } for (int j = 0; j < Pieces; j++) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(j * 3000, dy - 825 + sidey + cy), T321PM)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } if (j != 0) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(j * 3000, dy - 825 + sidey + cy - 75.3), XZ)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } if (i == 0) { if (Columns != 1) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(j * 3000 + 910, dy - 825 + sidey + dir * 450), ZCJ)) { if (dir == -1) { acBlkRef.TransformBy(Matrix3d.Mirroring(new Line3d( AnchorPoint.Convert3D(j * 3000 + 910, dy - 825 + sidey + dir * 450), AnchorPoint.Convert3D(j * 3000 + 910 + 100, dy - 825 + sidey + dir * 450) ))); } ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } if (k == 0) { if (j < 0.5 * Pieces) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(j * 3000 + 329, dy - 825 + sidey), KFLG)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } else { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(j * 3000 + 2821, dy - 825 + sidey - 180), QMB2)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } } } } } if (Columns == 1) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, dy - 825 + sidey), QZC1)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000 + 37, dy - 825 + sidey), QZC1R)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, dy - 825 + sidey), ZBC1)) { acBlkRef.TransformBy(Matrix3d.Mirroring(new Line3d( AnchorPoint.Convert3D(-37, dy - 825 + sidey), AnchorPoint.Convert3D(-37, dy - 825 + sidey + 100) ))); ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(37 + Pieces * 3000, dy - 825 + sidey), ZBC1)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } else if (Columns == 2) { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, dy - 825 + sidey), QZC1)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, dy - 825 + sidey + dir * 450), QZC1)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000 + 37, dy - 825 + sidey), QZC1R)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000 + 37, dy - 825 + sidey + dir * 450), QZC1R)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000 + 37, dy - 825 + sidey + dir * 225), ZBC2)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, dy - 825 + sidey + dir * 225), ZBC2)) { acBlkRef.TransformBy(Matrix3d.Mirroring(new Line3d(AnchorPoint.Convert3D(-37, dy - 825 + sidey + dir * 225), AnchorPoint.Convert3D(-37, dy - 825 + sidey + dir * 225 + 100)))); ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } else { using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, dy - 825 + sidey), QZC1)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, dy - 825 + sidey + dir * (450 + 125)), QZC2)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000 + 37, dy - 825 + sidey), QZC1R)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000 + 37, dy - 825 + sidey + dir * (450 + 125)), QZC2R)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(Pieces * 3000 + 37, dy - 825 + sidey + dir * 350), ZBC3)) { ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } using (BlockReference acBlkRef = new BlockReference(AnchorPoint.Convert3D(-37, dy - 825 + sidey + dir * 350), ZBC3)) { acBlkRef.TransformBy(Matrix3d.Mirroring(new Line3d( AnchorPoint.Convert3D(-37, dy - 825 + sidey + dir * 350), AnchorPoint.Convert3D(-37, dy - 825 + sidey + dir * 350 + 100) ))); if (dir == -1) { acBlkRef.TransformBy(Matrix3d.Mirroring(new Line3d( AnchorPoint.Convert3D(-37, dy - 825 + sidey + dir * 350), AnchorPoint.Convert3D(-37 + 100, dy - 825 + sidey + dir * 350) ))); } ms.AppendEntity(acBlkRef); tr.AddNewlyCreatedDBObject(acBlkRef, true); } } } tr.Commit(); tr.Dispose(); // 标注 var DimStyleID = dst["1-" + ScaleA.ToString()]; Point3d SW = AnchorPoint.Convert3D(); Point3d SE = AnchorPoint.Convert3D(Pieces * 3000.0); Point3d NW = SW.Convert3D(0, Layers * 1400 + (Layers - 1) * 100); Point3d NE = SE.Convert3D(0, Layers * 1400 + (Layers - 1) * 100); Point3d CT = NW.Convert3D(0.5 * Pieces * 3000.0); Point3d pNW = SW.Convert3D(0, dy - 825); Point3d pNE = SE.Convert3D(0, dy - 825); Point3d pSW = pNW.Convert3D(0, -4200); Point3d pSE = pNE.Convert3D(0, -4200); Point3d pCT = pNW.Convert3D(0.5 * Pieces * 3000.0); string stmp = string.Format("{0}×3000=<>", Pieces); DimPloter.Dim0(db, NW, NE, NE.Convert3D(0, 10 * ScaleA), DimStyleID, 0, stmp); DimPloter.Dim0(db, SW, NW, NW.Convert3D(-10 * ScaleA), DimStyleID, 0.5 * Math.PI); DimPloter.Dim0(db, SE, SE.Convert3D(0, 1400), SE.Convert3D(8 * ScaleA), DimStyleID, 0.5 * Math.PI); for (int i = 0; i < Layers - 1; i++) { DimPloter.Dim0(db, SE.Convert3D(0, 1500 * (i + 1) - 100), SE.Convert3D(0, 1500 * (i + 1)), SE.Convert3D(8 * ScaleA), DimStyleID, 0.5 * Math.PI); DimPloter.Dim0(db, SE.Convert3D(0, 1500 * (i + 1)), SE.Convert3D(0, 1500 * (i + 1) + 1400), SE.Convert3D(8 * ScaleA), DimStyleID, 0.5 * Math.PI); } DimPloter.Dim0(db, pSW, pSE, pSW.Convert3D(0, -15 * ScaleA), DimStyleID); DimPloter.Dim0(db, pSW, pNW, pNW.Convert3D(-10 * ScaleA), DimStyleID, 0.5 * Math.PI); double ymin = pSW.Convert3D(0, -15 * ScaleA).Y; // 图名 TextPloter.PrintTitle(db, "立 面", CT.Convert2D(0, 25 * ScaleA), ScaleA); TextPloter.PrintTitle(db, "平 面", pCT.Convert2D(0, 20 * ScaleA), ScaleA); double ymax = CT.Convert2D(0, 25 * ScaleA).Y; return(ymax - AnchorPoint.Y); }