/// <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); } } }
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("修改标注"); }