public Panel(BlockReference blRefPanel, MarkAr markAr) { _idBlRefSb = blRefPanel.ObjectId; _insPt = blRefPanel.Position; _extents = blRefPanel.GeometricExtents; _markAr = markAr; }
// Замена вхождения блока СБ на АР public void ReplaceBlockSbToAr(MarkAr markAr, Transaction t, BlockTableRecord ms) { var blRefMarkSb = t.GetObject(_idBlRefSb, OpenMode.ForWrite, false, true) as BlockReference; var blRefPanelAr = new BlockReference(blRefMarkSb.Position, markAr.IdBtrAr); blRefPanelAr.SetDatabaseDefaults(); blRefPanelAr.Layer = blRefMarkSb.Layer; _extents = blRefPanelAr.GeometricExtents; //_insPt = blRefPanelAr.Position; blRefMarkSb.Erase(true); _idBlRefAr = ms.AppendEntity(blRefPanelAr); t.AddNewlyCreatedDBObject(blRefPanelAr, true); //Database db = HostApplicationServices.WorkingDatabase; //using (var t = db.TransactionManager.StartTransaction()) //{ // var ms = t.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForWrite) as BlockTableRecord; // var blRefMarkSb = t.GetObject(_idBlRefSb, OpenMode.ForWrite, false, true) as BlockReference; // var blRefPanelAr = new BlockReference(blRefMarkSb.Position, markAr.IdBtrAr); // blRefPanelAr.SetDatabaseDefaults(); // blRefPanelAr.Layer = blRefMarkSb.Layer; // _extents = blRefPanelAr.GeometricExtents; // //_insPt = blRefPanelAr.Position; // blRefMarkSb.Erase(true); // _idBlRefAr = ms.AppendEntity(blRefPanelAr); // t.AddNewlyCreatedDBObject(blRefPanelAr, true); // t.Commit(); //} }
// Добавление панели АР по списку ее покраски private void AddPanelAR(List <Paint> paintAR, BlockReference blRefPanel, MarkSb markSb) { // Проверка нет ли уже такой марки покраси АР MarkAr panelAR = HasPanelAR(paintAR); if (panelAR == null) { panelAR = new MarkAr(paintAR, markSb, blRefPanel); _marksAR.Add(panelAR); } panelAR.AddBlockRefPanel(blRefPanel); }
// Поиск покраски марки АР в списке _marksAR private MarkAr HasPanelAR(List <Paint> paintAR) { //Поиск панели АР по покраске MarkAr resPanelAR = null; //Сравнение списков покраски foreach (MarkAr panelAR in _marksAR) { if (panelAR.EqualPaint(paintAR)) { resPanelAR = panelAR; break; } } return(resPanelAR); }
// Определение покраски панелей текущего чертежа (в Модели) public static List <MarkSb> GetMarksSB(RTree <ColorArea> rtreeColorAreas, Album album, string progressMsg, List <ObjectId> idsBlRefPanels) { List <MarkSb> marksSb = new List <MarkSb>(); Database db = HostApplicationServices.WorkingDatabase; using (var t = db.TransactionManager.StartTransaction()) { // Перебор всех блоков в модели и составление списка блоков марок и панелей. var bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable; var ms = bt[BlockTableRecord.ModelSpace].GetObject(OpenMode.ForRead) as BlockTableRecord; ProgressMeter progressMeter = new ProgressMeter(); progressMeter.SetLimit(idsBlRefPanels.Count); progressMeter.Start(progressMsg); // Перебор вхожденй блоков Марки СБ foreach (ObjectId idBlRefPanelMarkSb in idsBlRefPanels) { if (HostApplicationServices.Current.UserBreak()) { throw new System.Exception("Отменено пользователем."); } progressMeter.MeterProgress(); var blRefPanel = idBlRefPanelMarkSb.GetObject(OpenMode.ForRead, false, true) as BlockReference; // Определение Марки СБ панели. Если ее еще нет, то она создается и добавляется в список _marks. MarkSb markSb = GetMarkSb(blRefPanel, marksSb, bt, album); if (markSb == null) { // Значит это не блок панели. Пропускаем. continue; } //Определение покраски панели (Марки АР) List <Paint> paintAR = MarkAr.GetPanelMarkAR(markSb, blRefPanel, rtreeColorAreas); // Добавление панели АР в список панелей для Марки СБ markSb.AddPanelAR(paintAR, blRefPanel, markSb); } progressMeter.Stop(); t.Commit(); } return(marksSb); }