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(); }
public void Calculate() { //-------------------------------------------------------------------------------------- // 初始化桥梁列表 //-------------------------------------------------------------------------------------- Bridge TheBridge; System.Data.DataTable Parameters = new System.Data.DataTable(); string rootDir = BPublicFunctions.GetPath("选择Ansys路径"); string latexDir = BPublicFunctions.GetPath("选择Latex路径"); string aa = BPublicFunctions.GetXPath("选择参数表", "参数表|*.xls"); if (aa == "") { return; } else { Parameters = BPublicFunctions.GetDataFromExcelByCom(true, aa); } var IDtoPolot = Parameters.AsEnumerable().Select(t => t.Field <int>("序号")).ToList(); foreach (int ii in IDtoPolot) { TheBridge = new Bridge(Parameters, ii); AnsysCal bill = new AnsysCal(TheBridge); string wdir = bill.AnsysCalculator(rootDir); bill.GenerateModel(); bill.GenerateSection(); bill.WriteMain(wdir); bill.WritePrep(wdir); bill.WriteNode(wdir); bill.WriteSect(wdir); bill.WriteElem(wdir); bill.WriteDebug(wdir); bill.WriteSolu(wdir); bill.WriteSM1600(wdir); bill.WritePost(wdir); bill.RunAnsys(wdir); LatexGen kitty = new LatexGen(TheBridge); string filewdir = kitty.GetReady(latexDir); kitty.WriteTex(filewdir); File.Copy(Path.Combine(wdir, "file000.png"), Path.Combine(filewdir, "pic", "1.png")); File.Copy(Path.Combine(wdir, "file001.png"), Path.Combine(filewdir, "pic", "2.png")); File.Copy(Path.Combine(wdir, "file002.png"), Path.Combine(filewdir, "pic", "3.png")); kitty.RunXeLatex(filewdir, Path.Combine(filewdir, "CalSheet.tex")); break; } }