Esempio n. 1
0
 /// <summary>
 /// Загрузить данные из файла в контейнер
 /// </summary>
 /// <returns></returns>
 public static Settings Load()
 {
     try
     {
         var formatter = new XmlSerializer(typeof(Settings));
         using (var fileStream = new FileStream(GetFilePath, FileMode.Open))
             return((Settings)formatter.Deserialize(fileStream));
     }
     catch (Exception e)
     {
         Acad.Alert($"Ошибка при загрузке настроек из файла {GetFilePath}", e);
         throw;
         //settings = new Settings
         //{
         //    //Tools = new List<Tool>(),
         //    //TechProcessParams = new TechProcessParams(),
         //    SawingLineTechOperationParams = new SawingTechOperationParams(),
         //    SawingCurveTechOperationParams = new SawingTechOperationParams()
         //};
     }
     //if (!settings.MachineSettingsList.Any())
     //{
     //    settings.MachineSettingsList = new List<MachineSettings>()
     //    {
     //        new MachineSettings{ MachineType = MachineType.ScemaLogic, Tools = new List<Tool>(), MaxFrequency = 3000, ZSafety = 20 },
     //        new MachineSettings{ MachineType = MachineType.Donatoni, Tools = new List<Tool>(), MaxFrequency = 5000, ZSafety = 20 },
     //        new MachineSettings{ MachineType = MachineType.Krea, Tools = new List<Tool>(), MaxFrequency = 10000, ZSafety = 20 }
     //    };
     //}
     //if (settings.TactileTechProcessParams == null)
     //{
     //    settings.TactileTechProcessParams = Tactile.TactileTechProcessParams.GetDefault();
     //}
     //return settings;
 }
Esempio n. 2
0
        public void BuildProcessing(ITechProcess techProcess)
        {
            try
            {
                Acad.Write($"Выполняется расчет обработки по техпроцессу {techProcess.Caption} ...");
                var stopwatch = Stopwatch.StartNew();
                Acad.DeleteObjects(techProcess.ToolpathObjectIds);
                Acad.DeleteExtraObjects();
                Acad.Editor.UpdateScreen();

                techProcess.BuildProcessing();

                stopwatch.Stop();
                Acad.Write($"Расчет обработки завершен {stopwatch.Elapsed}");
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                techProcess.DeleteProcessCommands();
                if (ex.ErrorStatus == Autodesk.AutoCAD.Runtime.ErrorStatus.UserBreak)
                {
                    Acad.Write("Расчет прерван");
                }
                else
                {
                    Acad.Alert("Ошибка при выполнении расчета", ex);
                }
            }
            catch (Exception ex)
            {
                techProcess.DeleteProcessCommands();
                Acad.Alert("Ошибка при выполнении расчета", ex);
            }
            Acad.Editor.UpdateScreen();
        }
Esempio n. 3
0
        public static bool Validate(Tool tool, ToolType toolType)
        {
            string message = null;

            if (tool == null)
            {
                message = "Выберите инструмент";
            }
            else if (tool.Type != toolType)
            {
                message = $"Выберите инструмент типа {toolType.GetDescription()}";
            }
            else
            {
                if (tool.Type == ToolType.Disk)
                {
                    if (tool.Diameter == 0)
                    {
                        message = $"Не указан диаметр инструмента";
                    }
                    if (tool.Thickness.GetValueOrDefault() == 0)
                    {
                        message = $"Не указана толщина инструмента";
                    }
                }
            }
            if (message != null)
            {
                Acad.Alert(message);
            }

            return(message == null);
        }
Esempio n. 4
0
        public void SendProgram(ITechProcess techProcess)
        {
            if (techProcess.ProcessCommands == null)
            {
                Acad.Alert("Программа не сформирована");
                return;
            }
            var fileName = Acad.SaveFileDialog(techProcess.Caption, Settings.GetMachineSettings(techProcess.MachineType.Value).ProgramFileExtension, techProcess.MachineType.ToString());

            if (fileName != null)
            {
                try
                {
                    var contents = techProcess.ProcessCommands.Select(p => p.GetProgrammLine(Settings.GetMachineSettings(techProcess.MachineType.Value).ProgramLineNumberFormat)).ToArray();
                    File.WriteAllLines(fileName, contents);
                    Acad.Write($"Создан файл {fileName}");
                    if (techProcess.MachineType == MachineType.CableSawing)
                    {
                        CreateImitationProgramm(contents, fileName);
                    }
                }
                catch (Exception ex)
                {
                    Acad.Alert($"Ошибка при записи файла {fileName}", ex);
                }
            }
        }
Esempio n. 5
0
        public static void LoadAcadProps(object @object)
        {
            bool err        = false;
            var  properties = @object.GetType().GetProperties();

            foreach (var prop in properties.Where(p => p.PropertyType == typeof(AcadObject)))
            {
                var acadObject = (AcadObject)prop.GetValue(@object);
                if (acadObject != null && !acadObject.LoadObject())
                {
                    prop.SetValue(@object, null);
                    err = true;
                }
            }
            foreach (var prop in properties.Where(p => p.PropertyType == typeof(List <AcadObject>)))
            {
                var acadObjects = (List <AcadObject>)prop.GetValue(@object);
                if (acadObjects != null && !acadObjects.All(p => p.LoadObject()))
                {
                    prop.SetValue(@object, null);
                    err = true;
                }
            }
            if (err)
            {
                Acad.Alert("Используемые в техпроцессе объекты чертежа были удалены");
            }
        }
Esempio n. 6
0
        public static void SaveTechProsess(CamDocument camDocument)
        {
            if (camDocument.Hash == 0 && !camDocument.TechProcessList.Any())
            {
                return;
            }
            try
            {
                const int kMaxChunkSize = 127;
                using (var resultBuffer = new ResultBuffer())
                {
                    using (MemoryStream stream = new MemoryStream())
                    {
                        BinaryFormatter formatter = new BinaryFormatter();
                        formatter.Serialize(stream, camDocument.TechProcessList);
                        stream.Position = 0;
                        for (int i = 0; i < stream.Length; i += kMaxChunkSize)
                        {
                            int    length    = (int)Math.Min(stream.Length - i, kMaxChunkSize);
                            byte[] datachunk = new byte[length];
                            stream.Read(datachunk, 0, length);
                            resultBuffer.Add(new TypedValue((int)DxfCode.Text, Convert.ToBase64String(datachunk)));
                        }
                    }
                    var newHash = resultBuffer.ToString().GetHashCode();
                    if (newHash == camDocument.Hash)
                    {
                        return;
                    }

                    using (DocumentLock acLckDoc = Acad.ActiveDocument.LockDocument())
                        using (Transaction tr = Acad.Database.TransactionManager.StartTransaction())
                            using (DBDictionary dict = tr.GetObject(Acad.Database.NamedObjectsDictionaryId, OpenMode.ForWrite) as DBDictionary)
                            {
                                if (dict.Contains(DataKey))
                                {
                                    using (var xrec = tr.GetObject(dict.GetAt(DataKey), OpenMode.ForWrite) as Xrecord)
                                        xrec.Data = resultBuffer;
                                }
                                else
                                {
                                    using (var xrec = new Xrecord {
                                        Data = resultBuffer
                                    })
                                    {
                                        dict.SetAt(DataKey, xrec);
                                        tr.AddNewlyCreatedDBObject(xrec, true);
                                        //xrec.ObjectClosed += new ObjectClosedEventHandler(OnDataModified);
                                    }
                                }
                                tr.Commit();
                            }
                }
            }
            catch (Exception e)
            {
                Acad.Alert($"Ошибка при сохранении техпроцессов", e);
            }
        }
Esempio n. 7
0
 public static bool CheckNotNull(this object value, string field)
 {
     if (value == null)
     {
         Acad.Alert($"Не заполнено поле {field}");
     }
     return(value != null);
 }
Esempio n. 8
0
        private static void LoadTools(object senser, EventArgs eventArgs)
        {
            string path = @"\\192.168.1.59\ssd\_CUST\Utensili.csv";

            if (!File.Exists(path))
            {
                Acad.Alert($"Не найден файл инструментов по адресу {path}");
                return;
            }

            var lines = File.ReadAllLines(path)
                        .Select(p => Array.ConvertAll(p.Split(';'), k => new { result = double.TryParse(k, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var value), value }))
Esempio n. 9
0
        /// <summary>
        /// Сохранить данные в файл
        /// </summary>
        public static void Save()
        {
            var formatter = new XmlSerializer(typeof(Settings));

            try
            {
                using (var fileStream = new FileStream(GetFilePath, FileMode.Create))
                    formatter.Serialize(fileStream, Instance);
            }
            catch (Exception e)
            {
                Acad.Alert($"Ошибка при сохранении настроек в файл {GetFilePath}", e);
            }
        }
Esempio n. 10
0
        public void BuildProcessing(ITechProcess techProcess)
        {
            if (!techProcess.TechOperations.Any())
            {
                techProcess.CreateTechOperations();
            }

            if (!techProcess.Validate() || techProcess.TechOperations.Any(p => p.Enabled && p.CanProcess && !p.Validate()))
            {
                return;
            }

            try
            {
                Acad.Write($"Выполняется расчет обработки по техпроцессу {techProcess.Caption} ...");
                var stopwatch = Stopwatch.StartNew();
                Acad.CreateProgressor($"Расчет обработки по техпроцессу \"{techProcess.Caption}\"");
                DeleteProcessing(techProcess);
                Acad.Editor.UpdateScreen();

                techProcess.BuildProcessing();

                stopwatch.Stop();
                Acad.Write($"Расчет обработки завершен {stopwatch.Elapsed}");
            }
            catch (Autodesk.AutoCAD.Runtime.Exception ex)
            {
                techProcess.DeleteProcessCommands();
                if (ex.ErrorStatus == Autodesk.AutoCAD.Runtime.ErrorStatus.UserBreak)
                {
                    Acad.Write("Расчет прерван");
                }
                else
                {
                    Acad.Alert("Ошибка при выполнении расчета", ex);
                }
            }
            catch (Exception ex)
            {
                techProcess.DeleteProcessCommands();
                Acad.Alert("Ошибка при выполнении расчета", ex);
            }
            Acad.CloseProgressor();
            Acad.Editor.UpdateScreen();
        }
Esempio n. 11
0
        public void SendProgram(List <ProcessCommand> processCommands, ITechProcess techProcess)
        {
            if (processCommands == null || !processCommands.Any())
            {
                Acad.Alert("Программа не сформирована");
                return;
            }
            var fileName = Acad.SaveFileDialog(techProcess.Caption, _machineSettings[techProcess.MachineType.Value].ProgramFileExtension, techProcess.MachineType.ToString());

            if (fileName != null)
            {
                try
                {
                    var contents = processCommands?.Select(p => p.GetProgrammLine(_machineSettings[techProcess.MachineType.Value].ProgramLineNumberFormat)).ToArray();
                    File.WriteAllLines(fileName, contents);
                    Acad.Write($"Создан файл {fileName}");
                }
                catch (Exception ex)
                {
                    Acad.Alert($"Ошибка при записи файла {fileName}", ex);
                }
            }
        }
Esempio n. 12
0
        /// <summary>
        /// Загрузить технологические процессы из файла чертежа
        /// </summary>
        public static void LoadTechProsess(CamDocument camDocument)
        {
            try
            {
                using (Transaction tr = Acad.Database.TransactionManager.StartTransaction())
                    using (DBDictionary dict = tr.GetObject(Acad.Database.NamedObjectsDictionaryId, OpenMode.ForRead) as DBDictionary)
                        if (dict.Contains(DataKey))
                        {
                            using (Xrecord xRecord = tr.GetObject(dict.GetAt(DataKey), OpenMode.ForRead) as Xrecord)
                                using (ResultBuffer resultBuffer = xRecord.Data)
                                    using (MemoryStream stream = new MemoryStream())
                                    {
                                        camDocument.Hash = resultBuffer.ToString().GetHashCode();
                                        foreach (var typedValue in resultBuffer)
                                        {
                                            var datachunk = Convert.FromBase64String((string)typedValue.Value);
                                            stream.Write(datachunk, 0, datachunk.Length);
                                        }
                                        stream.Position = 0;
                                        var formatter = new BinaryFormatter {
                                            Binder = new MyBinder()
                                        };
                                        camDocument.TechProcessList = (List <ITechProcess>)formatter.Deserialize(stream);
                                    }
                        }

                if (camDocument.TechProcessList != null)
                {
                    camDocument.TechProcessList.ForEach(p => p.Setup());
                    Acad.Write($"Загружены техпроцессы: {string.Join(", ", camDocument.TechProcessList.Select(p => p.Caption))}");
                }
            }
            catch (Exception e)
            {
                Acad.Alert($"Ошибка при загрузке техпроцессов", e);
            }
        }
Esempio n. 13
0
 public static void HandleException(Exception exception)
 {
     Acad.Alert($"Ошибка: {exception.Message}");
     File.WriteAllText($@"\\US-CATALINA3\public\Программы станок\CodeRepository\Logs\error_{DateTime.Now.ToString("yyyy-MM-dd_hh-m-ss")}.log", $"{Acad.ActiveDocument.Name}\n\n{exception}");
 }