コード例 #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);
                }
            }
        }
コード例 #3
0
ファイル: ModifyUtil.cs プロジェクト: albertolei/RebarLabel
        public void Accept(Element Element, ref Point3d Point, View View)
        {
            app.ShowCommand("");
            CellElement     cell       = Element.AsCellElement();
            TextNodeElement ctextnode  = null;
            int             nest_level = 0;

            while (cell.MoveToNextElement(false, ref nest_level))
            {
                Element current = cell.CopyCurrentElement();
                if (current.IsTextNodeElement())
                {
                    ctextnode = current.AsTextNodeElement();
                    int    line_count = ctextnode.TextLinesCount;
                    string text       = "";
                    for (int i = 1; i <= line_count; i++)
                    {
                        text += ctextnode.get_TextLine(i);
                        text += "\r\n";
                    }
                    text = text.Substring(0, text.Length - 2);
                    LabelModifyForm lmf = new LabelModifyForm(text);
                    if (lmf.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        System.Windows.Forms.TextBox textBox = (System.Windows.Forms.TextBox)lmf.Controls.Find("content_textBox", false)[0];
                        text = textBox.Text;

                        TextNodeElement new_text_element = app.CreateTextNodeElement1(null, ctextnode.Origin, ctextnode.Rotation);
                        string[]        lines            = text.Split("\r\n".ToCharArray());
                        foreach (string line in lines)
                        {
                            new_text_element.AddTextLine(line);
                        }
                        cell.ReplaceCurrentElement(new_text_element);
                    }
                    break;
                }
            }
            cell.Rewrite();
            app.ShowPrompt("修改标注");
        }