public static e3Text text = null; // объект static void Main() { // Объекты массивов Id Object symIds = new Object(); Object textIds = new Object(); // Подключаем E3 App = e3App.ToE3(); App?.PutInfo(0, "Starting Transliterating!"); Prj = App?.CreateJobObject(); Sym = Prj.CreateSymbolObject(); text = Prj.CreateTextObject(); // Получаем массив Id символов Prj.GetSymbolIds(ref symIds); foreach (var symId in (Array)symIds) { if (symId != null) { Sym.SetId((int)symId); // Получаем массив Id текстов типа "12" Sym.GetTextIds(ref textIds, 12); foreach (var textId in (Array)textIds) { if (textId != null) { text.SetId((int)textId); if (text.GetText() != "") { Debug.WriteLine($"Type - {text.GetTypeId()}"); Debug.Indent(); Debug.WriteLine(text.GetText()); // Заменяем текст на транслитерированный библиотекой UnidecodeSharpFork text.SetText(text.GetText().Unidecode()); Debug.WriteLine(text.GetText()); Debug.Unindent(); } } } } } Debug.Flush(); }
public static void GetDevices() { // Объекты массивов Id Object DevIds = new Object(); //Object textIds = new Object(); string placedName; App?.PutInfo(0, "Starting GetDevices!"); Prj = (e3Job)App?.CreateJobObject(); Sym = (e3Symbol)Prj.CreateSymbolObject(); Dev = (e3Device)Prj.CreateDeviceObject(); Cmp = (e3Component)Prj.CreateComponentObject(); Pin = (e3Pin)Prj.CreatePinObject(); // Получаем массив Id устройств int nd = Prj.GetAllDeviceIds(ref DevIds); // Переменные среды int PinCnt; Object PinIds = new Object(); string imbaseKEY; bool DoItAgain = false; /////////////////////////////////////// prjNum = Prj.GetAttributeValue("NUMPROJ") + " ПЭ3"; placename = Prj.GetAttributeValue("OBOZNACHENIE") + " " + Prj.GetAttributeValue("Uslovn_obozn") + " " + Prj.GetAttributeValue("Name_of_schemes") + ". Перечень элементов"; executor = Prj.GetAttributeValue("vyp"); if (Prj.GetName().Length > 18) { AVSName = Prj.GetName().Substring(0, 18) + ".PE"; } else { AVSName = Prj.GetName() + ".PE"; } AVSFileNew = Prj.GetPath() + AVSName; //'Имя файла AVS(без пробелов) ///////////////////////////////////////// foreach (var devId in (Array)DevIds) { if (devId != null) { Dev.SetId((int)devId); Cmp.SetId((int)devId); if (Dev.IsWireGroup() == 0 && Dev.IsCable() == 0 && Dev.GetComponentName() != "" && Dev.IsAssembly() == 0) { bool isTerminal = (Dev.IsTerminal() == 1 && Dev.IsTerminalBlock() != 1); string pinName = null; string axapta = ""; // Позиционное обозначение placedName = Dev.GetName(); // Если клемма if (isTerminal) { PinCnt = Dev.GetPinIds(ref PinIds); if (PinCnt > 0) // если выводов нет, то и клемма не попадет в отчет... { foreach (var pinId in (Array)PinIds) { if (pinId == null) { continue; } Pin.SetId((int)pinId); if (Pin.GetName() != "") { pinName = Pin.GetName(); } break; } } } imbaseKEY = Cmp.GetAttributeValue("Imbase_KEY"); if (imbaseKEY.Length != "i609010608038500008C".Length && imbaseKEY.Length != 1) { Prj.JumpToID((int)devId); e3Dbe = new e3DbeApplication(); // объект приложения e3Dbe.EditComponent(Dev.GetComponentName(), Dev.GetComponentVersion()); // msgbox "Не корректный ключ Imbase - " & ImbaseKEY & " - изделия - " & dev.getname Console.WriteLine($"Не корректный ключ Imbase - {imbaseKEY} - изделия - {Dev.GetName()}"); Console.WriteLine("Нажмите 'Enter' после корректировки изделия"); Console.ReadLine(); //'обновить Prj.UpdateComponent(Cmp.GetName(), 0); imbaseKEY = Cmp.GetAttributeValue("Imbase_KEY"); DoItAgain = true; } // devList.Add(new E3Device(placedName, new string[] {Dev.GetComponentName(), imbaseKEY, Cmp.GetAttributeValue("Description"), Dev.GetAttributeValue("Primechanie"), Dev.GetAttributeValue("Исполнение")}, pinName)); if (imbaseKEY.Length == "i609010608038500008C".Length) { if (isTerminal) { devList.Add(new E3Device(placedName, new string[] { "I" + imbaseKEY, "6", placedName + ":" + pinName, ImBaseEx.GetFullDesignation(imbaseKEY, ref axapta).Replace("\"\"", "\""), "1", Dev.GetAttributeValue("Primechanie"), axapta, "1" }, pinName)); } else { devList.Add(new E3Device(placedName, new string[] { "I" + imbaseKEY, "6", placedName, ImBaseEx.GetFullDesignation(imbaseKEY, ref axapta).Replace("\"\"", "\""), "1", Dev.GetAttributeValue("Primechanie"), axapta, "1" }, pinName)); } } else { if (isTerminal) { devList.Add(new E3Device(placedName, new string[] { "Нет данных", "5", placedName + ":" + pinName, Cmp.GetAttributeValue("Description"), "1", Dev.GetAttributeValue("Primechanie"), "Нет данных", "1" }, pinName)); } else { devList.Add(new E3Device(placedName, new string[] { "Нет данных", "5", placedName, Cmp.GetAttributeValue("Description"), "1", Dev.GetAttributeValue("Primechanie"), "Нет данных", "1" }, pinName)); } } } if (DoItAgain) { // Думаю можно продолжать без выхода // Environment.Exit(0); } } } // Сортировка устройств devList.Sort(delegate(E3Device x, E3Device y) { if (x.IsTerminal() && x.Name == y.Name) { if (x.SortPinValue() == y.SortPinValue()) { return(x.PinName.CompareTo(y.PinName)); } else { return(x.SortPinValue().CompareTo(y.SortPinValue())); } } else { if (GetLetter(x.Name) == GetLetter(y.Name)) { return(x.SortNameValue().CompareTo(y.SortNameValue())); } else { return(x.Name.CompareTo(y.Name)); } } }); foreach (E3Device dev in devList) { // Console.WriteLine(dev); SortDevList(dev); } Debug.Flush(); }
/// <summary> /// Загрузка из файла схемы всех необходимых объектов - текстовых и символьных объектов /// </summary> public void ReplaceText(e3Application app, Dictionary <string, string> substDict) { // 0. Инициализируем все необходимые объекты для работы с проектом e3Job job = (e3Job)app.CreateJobObject(); e3Sheet sht = (e3Sheet)job.CreateSheetObject(); e3Text txt = (e3Text)job.CreateTextObject(); e3Symbol sym = (e3Symbol)job.CreateSymbolObject(); // 1. Откроем проект Global.Log.Write("################################################"); Global.Log.Write("Приступаем к обработке файла: " + this.FullFileName); int openRes = job.Open(this.FullFileName); Global.Log.Write("Файл открыт: " + (openRes != 0).ToString()); // 1.1 Выкинем исключение, если файл не удалось открыть if (openRes == 0) { throw new Exception("Не удалось открыть файл: " + this.FullFileName); } // 2. Пройдемся перебором по всем листам проекта dynamic ShtIds = null; int nshts = job.GetSheetIds(ref ShtIds); Global.Log.Write("Кол-во листов: " + nshts); foreach (var sid in ShtIds) { // 2.1 Дропнем пустые id листа if (sid == null) { continue; } // 2.2 Подключимся к листу sht.SetId(sid); // 2.3 Получим все текстовые объекты на текущем листе и пройдемся по ним перебором dynamic TxtIds = null; int ntxt = sht.GetGraphIds(ref TxtIds); foreach (var tid in TxtIds) { /* 2.3.1 Подключимся к текстовому объекту, получим его текстовое значение и пробуем * произвести замену подстрок по словарю (если таковые там будут присутствовать) */ txt.SetId(tid); string oldVal = txt.GetText(); // Зафиксируем старое значение // 2.3.2 ПРоверим, содержит ли данная надпись символы для замены bool exec = false; // Флаг необходимости обработки данной надписи foreach (string key in substDict.Keys) { if (oldVal.Contains(key)) { exec = true; } } if (exec) { string newVal = oldVal.ParallelReplace(substDict); // Сформируем новое значение txt.SetText(newVal); // Передадим новое значение в проект Global.Log.Write("Было: " + oldVal); Global.Log.Write("Стало: " + newVal); } } // 2.4 Аналогичным образом пройдемся по символам с текстом dynamic SymIds = null; int nsym = sht.GetSymbolIds(ref SymIds); foreach (var syid in SymIds) { sym.SetId(syid); dynamic SymTxtIds = null; sym.GetTextIds(ref SymTxtIds); foreach (var sytid in SymTxtIds) { txt.SetId(sytid); string oldVal = txt.GetText(); // Зафиксируем старое значение // 2.3.2 ПРоверим, содержит ли данная надпись символы для замены bool exec = false; // Флаг необходимости обработки данной надписи foreach (string key in substDict.Keys) { if (oldVal.Contains(key)) { exec = true; } } if (exec) { string newVal = oldVal.ParallelReplace(substDict); // Сформируем новое значение txt.SetText(newVal); // Передадим новое значение в проект Global.Log.Write("Было: " + oldVal); Global.Log.Write("Стало: " + newVal); } } } } // 3. Пометим схему как обработанную this.IsProcessed = true; Global.Log.Write("################################################" + Environment.NewLine); // 4. Заключительные операции: сохранить, закрыть затереть объекты job.Save(); job.Close(); txt = null; sht = null; job = null; app = null; }
static void Main() { // Подключаем E3 App = e3App.ToE3(); App?.PutInfo(0, "Starting The Snake!"); Prj = App?.CreateJobObject(); Sheet = Prj.CreateSheetObject(); Graph = Prj.CreateGraphObject(); Sym = Prj.CreateSymbolObject(); // Выберем лист while (sheetid == 0) { sheetid = Prj.GetActiveSheetId(); Sheet.SetId(sheetid); if (sheetid == 0) { MessageBox.Show("Выберите лист для игры!"); } } //находим середину листа object xmin = 0; object ymin = 0; object xmax = 0; object ymax = 0; Sheet.GetDrawingArea(ref xmin, ref ymin, ref xmax, ref ymax); double centerX = Math.Round(((double)xmin + (double)xmax) / 2); double centerY = Math.Round(((double)ymin + (double)ymax) / 2); // Переменные мира int score = 5; Pixel head = new Pixel(centerX, centerY, 13); List <Pixel> body = new List <Pixel>(); for (int i = 0; i < score; i++) { if (i == 0) { body.Add(new Pixel(head.XPos - 2, head.YPos, 35)); } else { body.Add(new Pixel(body[i - 1].XPos - 2, body[i - 1].YPos, 35)); } } body.Reverse(); Direction currentMovement = Direction.Right; //Собираем коллекцию символов object symIds = 0; object xSmin = 0; object ySmin = 0; object xSmax = 0; object ySmax = 0; object xS = 0; object yS = 0; object gridS = 0; List <Symbol> symbols = new List <Symbol>(); int symCnt = Sheet.GetSymbolIds(ref symIds); var symIdsArray = (Array)symIds; foreach (var symId in symIdsArray) { if (symId != null) { Sym.SetId((int)symId); Sym.GetArea(ref xSmin, ref ySmin, ref xSmax, ref ySmax); Sym.GetSchemaLocation(ref xS, ref yS, gridS); string rotS = Sym.GetRotation(); if (rotS.Contains("x")) { symbols.Add(new Symbol((double)xS + (double)xSmin, (double)yS - (double)ySmax, (double)xS + (double)xSmax, (double)yS - (double)ySmin, (int)symId)); } else if (rotS.Contains("y")) { symbols.Add(new Symbol((double)xS - (double)xSmax, (double)yS + (double)ySmin, (double)xS - (double)xSmin, (double)yS + (double)ySmax, (int)symId)); } else { symbols.Add(new Symbol((double)xS + (double)xSmin, (double)yS + (double)ySmin, (double)xS + (double)xSmax, (double)yS + (double)ySmax, (int)symId)); } } } //////////////////////////////////////////////////////////////////////////////////////// while (true) { // Выход за границы листа gameover |= (head.XPos >= (double)xmax - 1 || head.XPos <= 1 || head.YPos >= (double)ymax - 1 || head.YPos <= 1); // Съесть символ foreach (var symbol in symbols) { if (symbol.Collide(head.XPos, head.YPos)) { score++; frameTime *= 0.9; Sym.SetId(symbol.Id); Sym.Delete(); symbols.Remove(symbol); break; } } Console.Clear(); Console.WriteLine($"Счет: {score - 5}"); //Рисуем тело for (int i = 0; i < body.Count; i++) { Pixel tmpbody = body[i]; DrawPixel(ref tmpbody); body[i] = tmpbody; gameover |= (body[i].XPos == head.XPos && body[i].YPos == head.YPos); } if (gameover) { break; } //Рисуем голову DrawPixel(ref head); //Ждем кадр var sw = Stopwatch.StartNew(); while (sw.ElapsedMilliseconds <= frameTime) { currentMovement = ReadMovement(currentMovement); } //Добавляем пиксель тела чтобы подвинуться body.Add(new Pixel(head.XPos, head.YPos, 35)); // Изменяем положение головы switch (currentMovement) { case Direction.Up: head.YPos += 2; break; case Direction.Down: head.YPos -= 2; break; case Direction.Left: head.XPos -= 2; break; case Direction.Right: head.XPos += 2; break; } //Удаляем змейку, чтобы перерисовать в новом кадре Clear(head, body); // Удаляем последнее звено из коллекции тела чтобы змея двигалась if (body.Count > score) { body.RemoveAt(0); } } // Сообщение с результатом MessageBox.Show($"Game over, Score: {score - 5}"); Clear(head, body); App = null; }