Пример #1
0
        /// <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);
        }
Пример #2
0
        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();
        }
Пример #3
0
        /// <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);
        }