예제 #1
0
        public void CreateBtrPanelFromBase(int i, string[] marks)
        {
            // Тест создания определения блока панели по описанию в xml базе.
            PanelBase panelBase;

            string testFile = @"c:\temp\test\АКР\Base\Tests\CreateBlockPanelTest\TestCreatePanels.dwg";

            //File.Copy(@"c:\Autodesk\AutoCAD\Pik\Settings\Template\АР\АР.dwt", testFile, true);

            using (var db = new Database(false, true))
            {
                db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
                db.CloseInput(true);
                using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
                {
                    baseService.ClearPanelsAkrFromDrawing(db);
                    baseService.InitToCreationPanels(db);

                    Point3d         pt           = Point3d.Origin;
                    List <ObjectId> idsBtrPanels = new List <ObjectId>();

                    // Создание определениц блоков панелей
                    foreach (var mark in marks)
                    {
                        Panel panelXml = baseService.GetPanelXml(mark);
                        panelBase = new PanelBase(panelXml, baseService);
                        panelBase.CreateBlock();

                        if (!panelBase.IdBtrPanel.IsNull)
                        {
                            idsBtrPanels.Add(panelBase.IdBtrPanel);
                        }
                    }

                    // Вставка вхождениц блоков панелей в модель
                    using (var t = db.TransactionManager.StartTransaction())
                    {
                        foreach (var idBtrPanel in idsBtrPanels)
                        {
                            var blRefPanel = new BlockReference(pt, idBtrPanel);
                            var ms         = db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
                            ms.AppendEntity(blRefPanel);
                            t.AddNewlyCreatedDBObject(blRefPanel, true);
                            pt = new Point3d(0, pt.Y + 10000, 0);
                        }
                        t.Commit();
                    }
                }
                db.SaveAs(testFile, DwgVersion.Current);
            }
        }
예제 #2
0
        public void CreateBtrPanelFromBase(int i, string[] marks)
        {
            // Тест создания определения блока панели по описанию в xml базе.
             PanelBase panelBase;

             string testFile = @"c:\temp\test\АКР\Base\Tests\CreateBlockPanelTest\TestCreatePanels.dwg";
             //File.Copy(@"c:\Autodesk\AutoCAD\Pik\Settings\Template\АР\АР.dwt", testFile, true);

             using (var db = new Database(false, true))
             {
            db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
            db.CloseInput(true);
            using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
            {
               baseService.ClearPanelsAkrFromDrawing(db);
               baseService.InitToCreationPanels(db);

               Point3d pt = Point3d.Origin;
               List<ObjectId> idsBtrPanels = new List<ObjectId>();

               // Создание определениц блоков панелей
               foreach (var mark in marks)
               {
                  Panel panelXml = baseService.GetPanelXml(mark);
                  panelBase = new PanelBase(panelXml, baseService);
                  panelBase.CreateBlock();

                  if (!panelBase.IdBtrPanel.IsNull)
                  {
                     idsBtrPanels.Add(panelBase.IdBtrPanel);
                  }
               }

               // Вставка вхождениц блоков панелей в модель
               using (var t = db.TransactionManager.StartTransaction())
               {
                  foreach (var idBtrPanel in idsBtrPanels)
                  {
                     var blRefPanel = new BlockReference(pt, idBtrPanel);
                     var ms = db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
                     ms.AppendEntity(blRefPanel);
                     t.AddNewlyCreatedDBObject(blRefPanel, true);
                     pt = new Point3d(0, pt.Y + 10000, 0);
                  }
                  t.Commit();
               }
            }
            db.SaveAs(testFile, DwgVersion.Current);
             }
        }
        public void GetAllPlanesTest()
        {
            List <FloorArchitect> floorsAr;
            string testFile = @"c:\temp\test\АКР\Base\Tests\Тест-ПостроениеФасада.dwg";

            using (var db = new Database(false, true))
            {
                db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
                db.CloseInput(true);
                using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
                {
                    BaseService baseService = new BaseService();
                    baseService.InitToCreationPanels(db);

                    floorsAr = FloorArchitect.GetAllPlanes(db, baseService);
                }
                db.SaveAs(@"c:\temp\test\АКР\Base\Tests\Тест-ПостроениеФасада-WindowMarks.dwg", DwgVersion.Current);
            }

            Assert.AreEqual(floorsAr.Count, 2);
        }
        public void GetAllPlanesTest()
        {
            List<FloorArchitect> floorsAr;
             string testFile = @"c:\temp\test\АКР\Base\Tests\Тест-ПостроениеФасада.dwg";

             using (var db = new Database(false, true))
             {
            db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
            db.CloseInput(true);
            using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
            {
               BaseService baseService = new BaseService();
               baseService.InitToCreationPanels(db);

               floorsAr = FloorArchitect.GetAllPlanes(db, baseService);
            }
            db.SaveAs(@"c:\temp\test\АКР\Base\Tests\Тест-ПостроениеФасада-WindowMarks.dwg", DwgVersion.Current);
             }

             Assert.AreEqual(floorsAr.Count, 2);
        }
예제 #5
0
        private void zoomDb(Autodesk.AutoCAD.DatabaseServices.Database db, Extents3d ext)
        {
            using (var switcher = new AcadLib.WorkingDatabaseSwitcher(db))
            {
                //db.UpdateExt(true);
                using (ViewportTable vTab = db.ViewportTableId.GetObject(OpenMode.ForRead) as ViewportTable)
                {
                    ObjectId acVptId = vTab["*Active"];
                    using (ViewportTableRecord vpTabRec = acVptId.GetObject(OpenMode.ForWrite) as ViewportTableRecord)
                    {
                        double scrRatio = (vpTabRec.Width / vpTabRec.Height);
                        //Matrix3d matWCS2DCS = Matrix3d.PlaneToWorld(vpTabRec.ViewDirection);
                        //matWCS2DCS = Matrix3d.Displacement(vpTabRec.Target - Point3d.Origin) * matWCS2DCS;
                        //matWCS2DCS = Matrix3d.Rotation(-vpTabRec.ViewTwist,
                        //                                vpTabRec.ViewDirection,
                        //                                vpTabRec.Target)
                        //                                * matWCS2DCS;
                        //matWCS2DCS = matWCS2DCS.Inverse();
                        //Extents3d extents = new Extents3d(db.Extmin, db.Extmax);
                        //extents.TransformBy(matWCS2DCS);
                        //double width = (extents.MaxPoint.X - extents.MinPoint.X);
                        //double height = (extents.MaxPoint.Y - extents.MinPoint.Y);
                        //Point2d center = new Point2d((extents.MaxPoint.X + extents.MinPoint.X) * 0.5,
                        //                             (extents.MaxPoint.Y + extents.MinPoint.Y) * 0.5);

                        double width  = (ext.MaxPoint.X - ext.MinPoint.X);
                        double height = (ext.MaxPoint.Y - ext.MinPoint.Y);
                        if (width > (height * scrRatio))
                        {
                            height = width / scrRatio;
                        }
                        vpTabRec.Height      = ext.MaxPoint.Y - ext.MinPoint.Y;
                        vpTabRec.Width       = height * scrRatio;
                        vpTabRec.CenterPoint = ext.Center().Convert2d();
                    }
                }
            }
        }
        /// <summary>
        /// Экспорт фасада для АР
        /// </summary>
        public void Export()
        {
            // Список панелей для экспорта
            SelectPanels = new SelectionBlocks();
            SelectPanels.SelectBlRefsInModel(false);
            if (SelectPanels.IdsBlRefPanelSb.Count > 0)
            {
                Inspector.AddError("В текущем чертеже в Модели не должно быть панелей Марки СБ (только Марки АР).", icon: System.Drawing.SystemIcons.Error);
                return;
            }
            if (SelectPanels.IdsBlRefPanelAr.Count == 0)
            {
                Inspector.AddError("Не найдены панели Марки АР в Моделе текущего чертежа.", icon: System.Drawing.SystemIcons.Error);
                return;
            }

            // Определить файл в который экспортировать фасад
            _fileExport = new FileExport();
            _fileExport.DefineFile();

            // определение фасадов (вокруг панелей АКР)
            var facades = Facade.GetFacades(SelectPanels.FacadeBlRefs);

            // Определение экспортируемых панелей и фасадов
            CPS = new ConvertPanelService(this);
            CPS.DefinePanels(facades);

            using (var dbExport = new Database(!_fileExport.IsExistsFileExport, true))
            {
                if (_fileExport.IsExistsFileExport)
                {
                    // удалить старые панели из файла экспорта
                    try
                    {
                        dbExport.ReadDwgFile(_fileExport.FileExportFacade.FullName, FileShare.Read, true, "");
                    }
                    catch (Exception ex)
                    {
                        // файл занят.
                        warningMessageBusyFileExportFacade(ex, _fileExport.FileExportFacade.FullName);
                        throw;
                    }
                    // сделать копию файла
                    _fileExport.Backup();
                    dbExport.CloseInput(true);
                    deletePanels(dbExport);
                }
                dbExport.CloseInput(true);
                CPS.DbExport = dbExport;

                // Копирование панелей АР в экспортный файл
                copyPanelToExportFile(dbExport);

                // Переопределение блока плитки из файла шаблона блоков для Экспорта фасадов.
                redefineBlockTile(dbExport);

                using (AcadLib.WorkingDatabaseSwitcher switchDb = new AcadLib.WorkingDatabaseSwitcher(dbExport))
                {
                    using (var t = dbExport.TransactionManager.StartTransaction())
                    {
                        // Преобразования определений блоков
                        CPS.ConvertBtr();

                        // Преобразования торцов фасадов
                        CPS.ConvertEnds();

                        t.Commit();
                    }
                }
                CPS.Purge();

                dbExport.SaveAs(_fileExport.FileExportFacade.FullName, DwgVersion.Current);
            }
        }
예제 #7
0
        public void TestDynBlSec()
        {
            string testFile = @"c:\temp\test\АКР\Base\Tests\TestDynBlSec.dwg";

             using (var db = new Database(false, true))
             {
            db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
            db.CloseInput(true);
            using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
            {
               ObjectId idBtrPanel;
               ObjectId idBtrMs;

               using (var t = db.TransactionManager.StartTransaction())
               {
                  BlockTableRecord ms;
                  BlockTableRecord btrPanel;
                  ObjectId idBtrSec;
                  BlockTableRecord btrDim;

                  using (var bt = db.BlockTableId.GetObject(OpenMode.ForWrite) as BlockTable)
                  {
                     ms = bt[BlockTableRecord.ModelSpace].GetObject(OpenMode.ForWrite) as BlockTableRecord;
                     idBtrMs = ms.Id;
                     idBtrSec = bt["Test"];

                     btrPanel = new BlockTableRecord();
                     btrPanel.Name = "Panel";
                     idBtrPanel = bt.Add(btrPanel);
                     t.AddNewlyCreatedDBObject(btrPanel, true);

                     btrDim = new BlockTableRecord();
                     btrDim.Name = "Dim";
                     bt.Add(btrDim);
                     t.AddNewlyCreatedDBObject(btrDim, true);
                  }

                  BlockReference blRefDim = new BlockReference(Point3d.Origin, btrDim.Id);
                  btrPanel.AppendEntity(blRefDim);
                  t.AddNewlyCreatedDBObject(blRefDim, true);

                  BlockReference blRef = new BlockReference(Point3d.Origin, idBtrSec);
                  btrDim.AppendEntity(blRef);
                  t.AddNewlyCreatedDBObject(blRef, true);
                  setDynParam(blRef);

                  t.Commit();
               }
               using (var t = db.TransactionManager.StartTransaction())
               {
                  var ms = idBtrMs.GetObject(OpenMode.ForWrite) as BlockTableRecord;
                  BlockReference blRefPanel = new BlockReference(Point3d.Origin, idBtrPanel);
                  ms.AppendEntity(blRefPanel);
                  t.AddNewlyCreatedDBObject(blRefPanel, true);

                  t.Commit();
               }
            }
            string saveFile = @"c:\temp\test\АКР\Base\Tests\TestDynBlSec-TestSaved.dwg";
            db.SaveAs(saveFile, DwgVersion.Current);
             }
        }
예제 #8
0
        public void TestDynBlSec()
        {
            string testFile = @"c:\temp\test\АКР\Base\Tests\TestDynBlSec.dwg";

            using (var db = new Database(false, true))
            {
                db.ReadDwgFile(testFile, FileOpenMode.OpenForReadAndAllShare, false, "");
                db.CloseInput(true);
                using (AcadLib.WorkingDatabaseSwitcher dbSwitcher = new AcadLib.WorkingDatabaseSwitcher(db))
                {
                    ObjectId idBtrPanel;
                    ObjectId idBtrMs;

                    using (var t = db.TransactionManager.StartTransaction())
                    {
                        BlockTableRecord ms;
                        BlockTableRecord btrPanel;
                        ObjectId         idBtrSec;
                        BlockTableRecord btrDim;

                        using (var bt = db.BlockTableId.GetObject(OpenMode.ForWrite) as BlockTable)
                        {
                            ms       = bt[BlockTableRecord.ModelSpace].GetObject(OpenMode.ForWrite) as BlockTableRecord;
                            idBtrMs  = ms.Id;
                            idBtrSec = bt["Test"];

                            btrPanel      = new BlockTableRecord();
                            btrPanel.Name = "Panel";
                            idBtrPanel    = bt.Add(btrPanel);
                            t.AddNewlyCreatedDBObject(btrPanel, true);

                            btrDim      = new BlockTableRecord();
                            btrDim.Name = "Dim";
                            bt.Add(btrDim);
                            t.AddNewlyCreatedDBObject(btrDim, true);
                        }

                        BlockReference blRefDim = new BlockReference(Point3d.Origin, btrDim.Id);
                        btrPanel.AppendEntity(blRefDim);
                        t.AddNewlyCreatedDBObject(blRefDim, true);

                        BlockReference blRef = new BlockReference(Point3d.Origin, idBtrSec);
                        btrDim.AppendEntity(blRef);
                        t.AddNewlyCreatedDBObject(blRef, true);
                        setDynParam(blRef);

                        t.Commit();
                    }
                    using (var t = db.TransactionManager.StartTransaction())
                    {
                        var            ms         = idBtrMs.GetObject(OpenMode.ForWrite) as BlockTableRecord;
                        BlockReference blRefPanel = new BlockReference(Point3d.Origin, idBtrPanel);
                        ms.AppendEntity(blRefPanel);
                        t.AddNewlyCreatedDBObject(blRefPanel, true);

                        t.Commit();
                    }
                }
                string saveFile = @"c:\temp\test\АКР\Base\Tests\TestDynBlSec-TestSaved.dwg";
                db.SaveAs(saveFile, DwgVersion.Current);
            }
        }
예제 #9
0
        /// <summary>
        /// Экспорт фасада для АР
        /// </summary>
        public void Export()
        {
            // Список панелей для экспорта
            SelectPanels = new SelectionBlocks();
            SelectPanels.SelectBlRefsInModel(false);
            if (SelectPanels.IdsBlRefPanelSb.Count > 0)
            {
                Inspector.AddError("В текущем чертеже в Модели не должно быть панелей Марки СБ (только Марки АР).", icon: System.Drawing.SystemIcons.Error);
                return;
            }
            if (SelectPanels.IdsBlRefPanelAr.Count == 0)
            {
                Inspector.AddError("Не найдены панели Марки АР в Моделе текущего чертежа.", icon: System.Drawing.SystemIcons.Error);
                return;
            }

            // Определить файл в который экспортировать фасад
            _fileExport = new FileExport();
            _fileExport.DefineFile();

            // определение фасадов (вокруг панелей АКР)
            var facades = Facade.GetFacades(SelectPanels.FacadeBlRefs);

            // Определение экспортируемых панелей и фасадов
            CPS = new ConvertPanelService(this);
            CPS.DefinePanels(facades);

            using (var dbExport = new Database(!_fileExport.IsExistsFileExport, true))
            {
                if (_fileExport.IsExistsFileExport)
                {
                    // удалить старые панели из файла экспорта
                    try
                    {
                        dbExport.ReadDwgFile(_fileExport.FileExportFacade.FullName, FileShare.Read, true, "");
                    }
                    catch (Exception ex)
                    {
                        // файл занят.
                        warningMessageBusyFileExportFacade(ex, _fileExport.FileExportFacade.FullName);
                        throw;
                    }
                    // сделать копию файла
                    _fileExport.Backup();
                    dbExport.CloseInput(true);
                    deletePanels(dbExport);
                }
                dbExport.CloseInput(true);
                CPS.DbExport = dbExport;

                // Копирование панелей АР в экспортный файл
                copyPanelToExportFile(dbExport);

                // Переопределение блока плитки из файла шаблона блоков для Экспорта фасадов.
                redefineBlockTile(dbExport);

                using (AcadLib.WorkingDatabaseSwitcher switchDb = new AcadLib.WorkingDatabaseSwitcher(dbExport))
                {
                    using (var t = dbExport.TransactionManager.StartTransaction())
                    {
                        // Преобразования определений блоков
                        CPS.ConvertBtr();

                        // Преобразования торцов фасадов
                        CPS.ConvertEnds();

                        t.Commit();
                    }
                }
                CPS.Purge();

                dbExport.SaveAs(_fileExport.FileExportFacade.FullName, DwgVersion.Current);
            }
        }