Пример #1
0
        // Получаем список открытых проектов
        public static Dictionary <string, e3Application> GetE3ProcessDictionary()
        {
            Dispatcher disp = new Dispatcher();
            Dictionary <string, e3Application> E3ProcessDictionary = new Dictionary <string, e3Application>();

            if (disp != null)
            {
                Process[] processList = Process.GetProcessesByName("E3.series"); // получаем процессы E3.series

                foreach (Process process in processList)
                {
                    e3Application App = (e3Application)disp.GetE3ByProcessId(process.Id);
                    if (App == null)
                    {
                        continue;                // на случай открытого окна БД, повисших процессов и т.п.
                    }
                    e3Job  Prj     = (e3Job)App.CreateJobObject();
                    string project = Prj.GetPath() + Prj.GetName() + Prj.GetType();

                    if (Prj.GetName() == "")
                    {
                        continue;                        // на случай окна без проекта
                    }
                    E3ProcessDictionary.Add(project, App);
                }
                ;
            }
            ;

            return(E3ProcessDictionary);
        }
Пример #2
0
 internal E3ObjectFabric(int applicationProcessId)
 {
     dispatcher = new CT.Dispatcher();
     processId = applicationProcessId;
     app = dispatcher.GetE3ByProcessId(processId) as e3Application;
     job = app.CreateJobObject();
 }
        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();
        }
Пример #4
0
        /// <summary>
        /// Open files and run scripts
        /// </summary>
        private static void Process(string file, List <string> scriptsListBoxSelectedItems)
        {
            // Open File
            e3Application e3App = AppConnect.ToE3(file, out bool quitThenDone);

            if (scriptsListBoxSelectedItems.Count > 0)
            {
                FileLogic.RunScripts(e3App, scriptsListBoxSelectedItems);
            }

            if (quitThenDone)
            {
                e3Job e3Prj = (e3Job)e3App.CreateJobObject();
                e3Prj.Save();
                e3Prj.Close();
                //e3App.GetProcessProperty("");
                AppConnect.CloseE3App(e3App);
            }
        }
Пример #5
0
        /// <summary>
        /// Перегрузка при подключении к конкретному проекту. prjPath - полный путь к файлу
        /// </summary>
        /// <param name="prjPath"> Путь к файлу</param>
        /// <param name="quitThenDone"> Flag True если нужно будет закрыть приложение </param>
        /// <returns></returns>
        public static e3Application ToE3(string prjPath, out bool quitThenDone)
        {
            Dispatcher disp = new Dispatcher();

            quitThenDone = false;

            if (disp != null)
            {
                Process[] processList = Process.GetProcessesByName("E3.series"); // получаем процессы E3.series

                foreach (Process process in processList)
                {
                    e3Application App = (e3Application)disp.GetE3ByProcessId(process.Id);
                    if (App == null)
                    {
                        continue;                // на случай открытого окна БД, повисших процессов и т.п.
                    }
                    e3Job  Prj     = (e3Job)App.CreateJobObject();
                    string project = Prj.GetPath() + Prj.GetName() + Prj.GetType();
                    // MessageBox.Show(project + "\n" + PrjPath, "Ошибка", MessageBoxButtons.OK);
                    if (string.Equals(project, prjPath, StringComparison.CurrentCultureIgnoreCase))
                    {
                        e3App = App;
                        break;
                    }
                    ;
                }
                ;
                // Если не запущенного проекта - запускаем новый процесс
                e3App        = (e3Application)disp.OpenE3Application(prjPath);
                quitThenDone = true;
            }
            ;

            if (e3App == null)
            {
                MessageBox.Show("Нет e3App.", "Ошибка", MessageBoxButtons.OK);
            }
            return(e3App);
        }
Пример #6
0
        /// <summary>
        /// Запускает новый экземпляр E3 и возвращает ссылку на него
        /// </summary>
        private e3Application ConnectToE3()
        {
            // Объекты для работы E3
            e3Application app = null;
            e3Job         job = null;

            //Запустим новый процесс E3
            var newProcess = System.Diagnostics.Process.Start(this.ExePath, @"/schema");

            newProcess.WaitForInputIdle();
            Thread.Sleep(this.AppTimeout);

            //Найдем процесс E3 в котором нет открытых проектов
            List <Process> e3Procs = Process.GetProcessesByName("E3.series").ToList();
            dynamic        disp    = System.Activator.CreateInstance(Type.GetTypeFromProgID("CT.Dispatcher"));

            foreach (var proc in e3Procs)
            {
                // Подключимся к процессу
                app = (e3Application)disp.GetE3ByProcessId(proc.Id);
                job = (e3Job)app.CreateJobObject();
                dynamic PrjIds = null;

                // Получим кол-во открытых проектов
                int prjcnt = app.GetJobIds(ref PrjIds);

                // Если откртых проектов в окне нет, то можно его спокойно использовать => выйдем из цикла,
                // оставив текущее подключение
                if (prjcnt == 0)
                {
                    break;
                }
            }

            return(app);
        }
Пример #7
0
        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();
        }
Пример #8
0
        /// <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;
        }
Пример #9
0
        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;
        }