コード例 #1
0
 /// <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;
         }
     }
 }
コード例 #2
0
ファイル: UpdateModel.cs プロジェクト: Egyuza/Bentley.simpen
        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);
                }
            }
        }