예제 #1
0
        /// <summary>
        /// Сохранить Prg.lua как таблицу Lua
        /// </summary>
        /// <param name="prefix">Отступ</param>
        /// <returns>Возвращает файл в виде строки</returns>
        public static string Save(string prefix)
        {
            var attachedObjects = new Dictionary <int, string>();

            deviceManager     = DeviceManager.GetInstance();
            techObjectManager = TechObjectManager.GetInstance();

            var res = "";

            res += "local prg =\n\t{\n";
            res += SaveDevicesToPrgLua(prefix);
            res += SaveVariablesToPrgLua(prefix, out attachedObjects);
            res += "\t}\n";

            if (attachedObjects.Count > 0)
            {
                res += SaveObjectsBindingToPrgLua(attachedObjects);
            }

            res += SaveObjectsInformationToPrgLua(prefix);
            res += SaveFunctionalityToPrgLua();
            res += "return prg";
            res  = res.Replace("\t", "    ");

            return(res);
        }
예제 #2
0
 /// <summary>
 /// Приватный конструктор
 /// </summary>
 private TechObjectsImporter()
 {
     importedObjects   = new Dictionary <int, ITreeViewItem>();
     techObjectManager = TechObjectManager.GetInstance();
     objectTree        = new List <ITreeViewItem>();
     InitLuaScripts();
 }
예제 #3
0
        /// <summary>
        /// Сохранить Prg.lua как таблицу Lua
        /// </summary>
        /// <param name="prefix">Отступ</param>
        /// <returns>Возвращает файл в виде строки</returns>
        public static string Save(string prefix)
        {
            var attachedObjects = new Dictionary <int, string>();

            deviceManager     = DeviceManager.GetInstance();
            techObjectManager = TechObjectManager.GetInstance();

            string res = GenerateRequireModules();

            res += "\n";
            res += "-- Основные объекты проекта " +
                   "(объекты, описанные в Eplan).\n";
            res += "local prg =\n\t{\n";
            res += SaveDevicesToPrgLua(prefix);
            res += SaveVariablesToPrgLua(prefix, out attachedObjects);
            res += "\t}\n";

            if (attachedObjects.Count > 0)
            {
                res += SaveObjectsBindingToPrgLua(attachedObjects);
            }

            res += SaveObjectsInformationToPrgLua(prefix);
            res += SaveFunctionalityToPrgLua();
            res += "return prg";
            res  = res.Replace("\t", "    ");

            return(res);
        }
예제 #4
0
        /// <summary>
        /// Экспорт описания проекта в файл.
        /// </summary>
        /// <param name="path">Место сохранения</param>
        /// <param name="objectsNums">Список (номера) экспортируемых
        /// объектов</param>
        public void Export(string path, List <int> objectsNums)
        {
            string objectsDescription = "";
            string objectsRestriction = "";
            var    techObjManager     = TechObjectManager.GetInstance();
            var    objects            = techObjManager.Objects;

            foreach (var obj in objects)
            {
                bool needExporting = objectsNums.Contains(obj.GlobalNumber);
                if (needExporting)
                {
                    var exportingObject = obj.Clone(
                        techObjManager.GetTechObjectN, obj.TechNumber,
                        obj.GlobalNumber, obj.GlobalNumber);

                    // Убираем привязку при экспорте.
                    exportingObject.AttachedObjects.SetValue("");

                    // Обходим нулевое значение т.к объект ни находится ни в
                    // каком списке объектов.
                    string description = exportingObject.SaveAsLuaTable("\t\t");
                    description = description.Replace("[ 0 ]",
                                                      $"[ {obj.GlobalNumber} ]");
                    string restriction = exportingObject
                                         .SaveRestrictionAsLua("\t");
                    restriction = restriction
                                  .Replace("[ 0 ]", $"[ {obj.GlobalNumber} ]");

                    objectsDescription += description;
                    objectsRestriction += restriction;
                }
                else
                {
                    objectsDescription +=
                        $"\t[ {obj.GlobalNumber} ] = {{0}},\n";
                }
            }

            try
            {
                var fileWriter = new StreamWriter(path, false, Encoding.UTF8);

                WriteObjectsDescription(fileWriter, objectsDescription);
                fileWriter.WriteLine("\n");
                WriteObjectsRestriction(fileWriter, objectsRestriction);

                fileWriter.Flush();
                fileWriter.Close();
            }
            catch
            {
                throw new Exception("Ошибка записи в файл при экспорте");
            }
        }
예제 #5
0
 /// <summary>
 /// Инициализация.
 /// </summary>
 public void Init()
 {
     this.editor            = Editor.Editor.GetInstance();
     this.techObjectManager = TechObjectManager.GetInstance();
     Logs.Init(new LogFrm());
     this.IOManager = IOManager.GetInstance();
     DeviceManager.GetInstance();
     this.projectConfiguration = ProjectConfiguration.GetInstance();
     EProjectManager.GetInstance();
     BaseTechObjectManager.GetInstance();
 }
예제 #6
0
        /// <summary>
        /// Импортировать объекты в редактор
        /// </summary>
        /// <param name="checkedItems">Выбранные на дереве объекты</param>
        public void Import(List <int> checkedItems)
        {
            ITreeViewItem techObjectsManager = TechObjectManager.GetInstance();

            foreach (var num in checkedItems)
            {
                var importingItem = importedObjects[num] as TechObject
                                    .TechObject;
                var importedItem = techObjectsManager.InsertCopy(importingItem);
                importedItem.AddParent(techObjectsManager);
            }
        }
예제 #7
0
        /// <summary>
        /// Инициализация.
        /// </summary>
        public void Init()
        {
            CheckLibsAndFiles();

            editor            = Editor.Editor.GetInstance();
            techObjectManager = TechObjectManager.GetInstance();
            Logs.Init(new LogFrm());
            IOManager = IOManager.GetInstance();
            DeviceManager.GetInstance();
            projectConfiguration = ProjectConfiguration.GetInstance();
            EProjectManager.GetInstance();
            BaseTechObjectManager.GetInstance();
        }
예제 #8
0
            /// <summary>
            /// Получить корректные номера технологических объектов из
            /// входной строки
            /// </summary>
            /// <param name="value">Входная строка</param>
            /// <param name="selectedObjNum">Номер редактируемого объекта
            /// <returns></returns>
            public List <int> GetValidTechObjNums(string value,
                                                  int selectedObjNum)
            {
                var numbers = new List <int>();

                string[] numbersAsStringArray = value.Split(' ').ToArray();

                List <int> allowedObjectsNums = AllowedObjects?
                                                .Select(x => (int)x).ToList();

                foreach (var numAsString in numbersAsStringArray)
                {
                    int.TryParse(numAsString, out int number);
                    if (number <= 0)
                    {
                        continue;
                    }

                    TechObject obj = TechObjectManager.GetInstance()
                                     .GetTObject(number);
                    if (obj.BaseTechObject == null)
                    {
                        return(new List <int>());
                    }

                    var objValues = obj?.AttachedObjects.Value.Split(' ')
                                    .Where(x => int.TryParse(x, out _))
                                    .Select(x => int.Parse(x)).ToList();
                    if (objValues?.Contains(selectedObjNum) == true)
                    {
                        continue;
                    }

                    bool correctBaseObject = allowedObjectsNums
                                             .Contains(obj.BaseTechObject.S88Level);
                    if (correctBaseObject)
                    {
                        numbers.Add(number);
                    }
                }

                numbers = numbers.Distinct().ToList();
                return(numbers);
            }
예제 #9
0
 public DeviceSynchronizer()
 {
     deviceReader      = new DeviceReader();
     techObjectManager = TechObjectManager.GetInstance();
 }
예제 #10
0
 private TechObjectsExporter()
 {
     techObjectManager = TechObjectManager.GetInstance();
 }
 private void InsertNewObject(string baseObjectLuaName)
 {
     ITechObjectManager techObjectManager = TechObjectManager
         .GetInstance();
     techObjectManager.InsertBaseObject(baseObjectLuaName);
 }