/// <summary> /// Найти и изменить вложенный в штамп элемент.Только для внешних операций типа Scale, Move /// </summary> public void FindAndChangeSubElement(IElementMicrostation elementMicrostation) { _cellElement.ResetElementEnumeration(); while (_cellElement.MoveToNextElement()) { var elementCurrent = _cellElement.CopyCurrentElement(); if (elementCurrent.ID64 == elementMicrostation?.Id) { _cellElement.ReplaceCurrentElement(SubElementsPair[elementMicrostation]); elementMicrostation.SetElement((Element)elementCurrent); break; } } }
public void processOld(ref /* ref - важно */ CellElement cell, ref bool dirty, bool updateImidiatly) { // TODO необходимо полностью обновить старые проходки, // т.к. нужно назначить правильные Level всем элементам проходки // либо поэтапно ... // TODO формализовать список обновлений через Enum int change = 0; bool cellDirty = false; cell.ResetElementEnumeration(); while (cell.MoveToNextElement(true, ref change)) { Element temp = cell.CopyCurrentElement(); if (!temp.IsGraphical || temp.Level == null) { continue; } Level requiredLevel; if (temp.IsLineElement() && temp.AsLineElement().SegmentsCount > 1) { requiredLevel = PenetrTaskBase.LevelSymb; } else if (temp.Type == MsdElementType.Ellipse) /*перфоратор*/ { requiredLevel = PenetrTaskBase.LevelSymb; } else { requiredLevel = PenetrTaskBase.LevelMain; } if (temp.Level?.ID != requiredLevel.ID) { cellDirty = true; temp.Level = requiredLevel; } ElementHelper.setSymbologyByLevel(temp, ref cellDirty); if (updateImidiatly && cellDirty) { temp.Rewrite(); // ! важно cell.ReplaceCurrentElement(temp); } } }