示例#1
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();
        }
示例#2
0
        public ParamsView AddOrigin()
        {
            var originX      = _type.GetProperty("OriginX");
            var originY      = _type.GetProperty("OriginY");
            var originObject = _type.GetField(nameof(MillingTechProcess.OriginObject));

            var selector = CreateSelector("Начало координат", "۞");

            var textBox = selector.Controls[0];

            BindingSource.DataSourceChanged += (s, e) => RefreshText();
            textBox.Enter += (s, e) => Acad.SelectObjectIds((ObjectId[])originObject?.GetValue(ParamsObject));

            var button = selector.Controls[1];

            button.Click += (s, e) =>
            {
                Interaction.SetActiveDocFocus();
                var point = Interaction.GetPoint("\nВыберите точку начала координат");
                if (!point.IsNull())
                {
                    originX.SetValue(ParamsObject, point.X.Round(3));
                    originY.SetValue(ParamsObject, point.Y.Round(3));
                    RefreshText();
                    if (originObject.GetValue(ParamsObject) != null)
                    {
                        Acad.DeleteObjects((ObjectId[])originObject.GetValue(ParamsObject));
                    }
                    originObject.SetValue(ParamsObject, Acad.CreateOriginObject(point));
                }
            };
            return(this);

            void RefreshText() => textBox.Text = $"{{{originX.GetValue(ParamsObject)}, {originY.GetValue(ParamsObject)}}}";
        }
示例#3
0
文件: CamView.cs 项目: airmay/CAM
        private void Delete()
        {
            if (treeView.SelectedNode == null)
            {
                return;
            }
            if (MessageBox.Show($"Вы хотите удалить {(treeView.SelectedNode.Tag is ITechProcess ? "техпроцесс" : "операцию")} '{treeView.SelectedNode.Text}'?",
                                "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
            {
                switch (treeView.SelectedNode.Tag)
                {
                case ITechProcess techProcess:
                    _camDocument.DeleteTechProcess(techProcess);
                    _currentTechProcessType = null;
                    break;

                case TechOperation techOperation:
                    _camDocument.DeleteTechOperation(CurrentTechProcess, treeView.SelectedNode.Index);
                    break;
                }
                Acad.UnhighlightAll();
                ClearParamsViews();
                tabControl.SelectedTab = tabPageParams;
                treeView.SelectedNode.Remove();
                treeView.Focus();
                RefreshToolButtonsState();
            }
        }
示例#4
0
 public static void SelectObjectIds(params ObjectId[] objectIds)
 {
     if (objectIds == null)
     {
         objectIds = Array.Empty <ObjectId>();
     }
     App.LockAndExecute(() =>
     {
         try
         {
             if (_highlightedObjects.Any())
             {
                 Interaction.UnhighlightObjects(_highlightedObjects);
             }
             if (objectIds.Any())
             {
                 Interaction.HighlightObjects(objectIds);
             }
         }
         catch (Exception ex)
         {
             Acad.Write($"Error Acad.SelectObjectIds: {ex.Message}");
         }
         _highlightedObjects = objectIds;
     });
     Editor.Regen();// UpdateScreen();
 }
示例#5
0
 private void ImpliedSelectionChanged(object sender, EventArgs e)
 {
     if (Acad.GetToolpathObjectId() is ObjectId id)
     {
         _camPaletteSet.SelectProcessCommand(id);
     }
 }
示例#6
0
        public void Initialize()
        {
            Acad.Write($"Инициализация плагина. Версия сборки от {File.GetLastWriteTime(Assembly.GetExecutingAssembly().Location)}");

            _techProcessFactory = new TechProcessFactory();
            _camPaletteSet      = new CamPaletteSet();

            //var manager = new CamManager();

            //PaletteSet paletteSet = new PaletteSet("Технология")
            //{
            //    Style = PaletteSetStyles.NameEditable | PaletteSetStyles.ShowPropertiesMenu | PaletteSetStyles.ShowAutoHideButton | PaletteSetStyles.ShowCloseButton,
            //    MinimumSize = new Size(300, 200),
            //    KeepFocus = true,
            //    Visible = true
            //};
            //paletteSet.Add("Объекты", new TechProcessView(manager));
            //var programView = new ProgramView(manager);
            //var programmPalette = paletteSet.Add("Программа", programView);
            //paletteSet.PaletteActivated += (sender, args) =>
            //{
            //    if (args.Activated.Name == "Программа")
            //        programView.SetProgram(manager.GetProgramm());
            //};

            Application.DocumentManager.DocumentActivated += (sender, args) => SetActiveDocument(args.Document);

            SetActiveDocument(Acad.ActiveDocument);

            //PaletteSet focus use Autodesk.AutoCAD.Internal.Utils.SetFocusToDwgView();
            //AutocadUtils.AddPaletteSet("Настройки", SettingForm);
            //machine.ChangeActionsCount += (sender, args) => ObjectForm.ShowProgress(String.Format("Генерация обработки... {0} строк", args.Data));
        }
示例#7
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;
 }
示例#8
0
文件: CamDocument.cs 项目: airmay/CAM
        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);
                }
            }
        }
示例#9
0
        private void bRemove_Click(object sender, EventArgs e)
        {
            if (treeView.SelectedNode == null)
            {
                return;
            }
            if (MessageBox.Show($"Вы хотите удалить {(treeView.SelectedNode.Tag is ITechProcess ? "техпроцесс" : "операцию")} '{treeView.SelectedNode.Text}'?",
                                "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                switch (treeView.SelectedNode.Tag)
                {
                case ITechProcess techProcess:
                    _camDocument.DeleteTechProcess(techProcess);
                    break;

                case TechOperationBase techOperation:
                    _camDocument.DeleteTechOperation(techOperation);
                    break;
                }
                Acad.SelectObjectIds();
                ClearParamsViews();
                treeView.SelectedNode.Remove();
                RefreshToolButtonsState();
            }
        }
示例#10
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("Используемые в техпроцессе объекты чертежа были удалены");
            }
        }
示例#11
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);
        }
示例#12
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);
            }
        }
示例#13
0
 public void SelectProcessCommand(ITechProcess techProcess, ProcessCommand processCommand)
 {
     if (processCommand.ToolpathObjectId.HasValue)
     {
         Acad.SelectObjectIds(processCommand.ToolpathObjectId.Value);
     }
     Acad.RegenToolObject(techProcess.Tool, processCommand.HasTool, processCommand.ToolLocation, techProcess.MachineType == MachineType.Donatoni);  //Settongs.IsFrontPlaneZero
 }
示例#14
0
 public static bool CheckNotNull(this object value, string field)
 {
     if (value == null)
     {
         Acad.Alert($"Не заполнено поле {field}");
     }
     return(value != null);
 }
示例#15
0
文件: Graph.cs 项目: airmay/CAM
 public static string GetDesc(this ObjectId id)
 {
     if (id.IsErased)
     {
         Acad.RecoveryObject(id);
     }
     return(ObjectPropertyManagerProperties.GetDisplayName(id));
 }
示例#16
0
        public ParamsView AddAcadObject(string paramName = "ProcessingArea", string displayName = null, string message = "Выбор объектов", string allowedTypes = "*", Action <ObjectId[]> afterSelect = null)
        {
            var prop = _type.GetProperty(paramName);

            var selector = CreateSelector(displayName ?? GetDisplayName(paramName), "۞");

            var textBox = selector.Controls[0];

            BindingSource.DataSourceChanged += prop.PropertyType == typeof(AcadObject)
                ? new EventHandler((s, e) => textBox.Text = ((AcadObject)prop.GetValue(ParamsObject))?.GetDesc())
                : new EventHandler((s, e) => textBox.Text = ((List <AcadObject>)prop.GetValue(ParamsObject))?.GetDesc());
            textBox.Enter += prop.PropertyType == typeof(AcadObject)
                ? new EventHandler((s, e) => { if (prop.GetValue(ParamsObject) is AcadObject acadObj)
                                               {
                                                   Acad.SelectAcadObjects(new List <AcadObject> {
                        acadObj
                    });
                                               }
                                   })
                : new EventHandler((s, e) => { if (prop.GetValue(ParamsObject) is List <AcadObject> acadObjList)
                                               {
                                                   Acad.SelectAcadObjects(acadObjList);
                                               }
                                   });

            var button = selector.Controls[1];

            button.Click += (s, e) =>
            {
                //textBox.Text = "";
                //prop.SetValue(ParamsObject, null);

                Interaction.SetActiveDocFocus();
                Acad.SelectObjectIds();
                var ids = Interaction.GetSelection($"\n{message}", allowedTypes);
                if (ids.Length == 0)
                {
                    return;
                }
                if (prop.PropertyType == typeof(AcadObject))
                {
                    var acadObject = AcadObject.Create(ids[0]);
                    prop.SetValue(ParamsObject, acadObject);
                    textBox.Text = acadObject.GetDesc();
                }
                else
                {
                    var acadOblects = AcadObject.CreateList(ids);
                    prop.SetValue(ParamsObject, acadOblects);
                    textBox.Text = acadOblects.GetDesc();
                }
                afterSelect?.Invoke(ids);
                Acad.SelectObjectIds(ids);
            };
            return(this);
        }
示例#17
0
 private void Document_CommandWillStart(object sender, CommandEventArgs e)
 {
     if (e.GlobalCommandName == "CLOSE" || e.GlobalCommandName == "QUIT" || e.GlobalCommandName == "QSAVE" || e.GlobalCommandName == "SAVEAS")
     {
         _documents[sender as Document].TechProcessList.ForEach(p => p.DeleteProcessing());
         TechProcessLoader.SaveTechProsess(_documents[sender as Document]);
         _camPaletteSet.ClearCommands();
         Acad.DeleteAll();
     }
 }
示例#18
0
        public void PartialProcessing(ITechProcess techProcess, ProcessCommand processCommand)
        {
            Acad.Write($"Выполняется формирование программы обработки по техпроцессу {techProcess.Caption} с команды номер {processCommand.Number}");

            var toolpathObjectIds = techProcess.ToolpathObjectIds.ToList();

            techProcess.SkipProcessing(processCommand);

            Acad.DeleteObjects(toolpathObjectIds.Except(techProcess.ToolpathObjectIds));
            Acad.Editor.UpdateScreen();
        }
示例#19
0
文件: CamView.cs 项目: airmay/CAM
 private void processCommandBindingSource_CurrentChanged(object sender, EventArgs e)
 {
     if (CurrentProcessCommand != null)
     {
         if (CurrentProcessCommand.ToolpathObjectId.HasValue)
         {
             Acad.Show(CurrentProcessCommand.ToolpathObjectId.Value);
             Acad.SelectObjectIds(CurrentProcessCommand.ToolpathObjectId.Value);
         }
         Acad.RegenToolObject(CurrentTechProcess.Tool, CurrentProcessCommand.HasTool, CurrentProcessCommand.ToolLocation, CurrentTechProcess.MachineType == MachineType.Donatoni);  //Settongs.IsFrontPlaneZero
     }
 }
示例#20
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 }))
示例#21
0
 public void SetActiveDocument(Document document)
 {
     if (document != null && !_documents.ContainsKey(document))
     {
         document.CommandWillStart        += Document_CommandWillStart;
         document.BeginDocumentClose      += Document_BeginDocumentClose;
         document.ImpliedSelectionChanged += ImpliedSelectionChanged;
         _documents[document]              = new CamDocument(_techProcessFactory);
         TechProcessLoader.LoadTechProsess(_documents[document]);
     }
     Acad.ClearHighlighted();
     _camPaletteSet.SetCamDocument(document != null ? _documents[document] : null);
 }
示例#22
0
文件: CamView.cs 项目: airmay/CAM
 private void bPlay_Click(object sender, EventArgs e)
 {
     toolStrip.Enabled = false;
     Acad.CreateProgressor("Проигрывание обработки");
     Acad.SetLimitProgressor(processCommandBindingSource.Count - processCommandBindingSource.Position);
     while (processCommandBindingSource.Position < processCommandBindingSource.Count - 1 && Acad.ReportProgressor(false))
     {
         processCommandBindingSource.MoveNext();
         System.Threading.Thread.Sleep((int)((ProcessCommand)processCommandBindingSource.Current).Duration * 10);
     }
     Acad.CloseProgressor();
     toolStrip.Enabled = true;
 }
示例#23
0
 public void SelectTechOperation(ITechOperation techOperation)
 {
     if (techOperation.ProcessingArea != null)
     {
         Acad.SelectObjectIds(techOperation.ProcessingArea.ObjectId);
     }
     techOperation.TechProcess.TechOperations.ForEach(p => p.SetToolpathVisible(p == techOperation));
     if (techOperation.ProcessCommands == null)
     {
         Acad.DeleteToolObject();
     }
     Acad.Editor.UpdateScreen();
 }
示例#24
0
文件: CamView.cs 项目: airmay/CAM
        private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (CurrentTechProcess.GetType() != _currentTechProcessType)
            {
                _currentTechProcessType = CurrentTechProcess.GetType();
                bCreateTechOperation.DropDownItems.Clear();
                if (_techOperationItems.ContainsKey(_currentTechProcessType))
                {
                    bCreateTechOperation.DropDownItems.AddRange(
                        new List <ToolStripItem> {
                        new ToolStripMenuItem("Все операции", null, new EventHandler(bCreateTechOperation_Click)), new ToolStripSeparator()
                    }
                        .Concat(_techOperationItems[CurrentTechProcess.GetType()]).ToArray());
                }
                RefreshToolButtonsState();
            }
            RefreshParamsView();

            if (IsToolpathVisible)
            {
                if (treeView.SelectedNode.Tag is TechOperation oper)
                {
                    CurrentTechProcess.GetToolpathObjectsGroup()?.SetGroupVisibility(false);
                    oper.ToolpathObjectsGroup?.SetGroupVisibility(true);
                }
                else
                {
                    CurrentTechProcess.GetToolpathObjectsGroup()?.SetGroupVisibility(true);
                }
                Acad.Editor.UpdateScreen();
            }

            processCommandBindingSource.DataSource = CurrentTechProcess.ProcessCommands;

            if (treeView.SelectedNode.Tag is TechOperation techOperation)
            {
                if (techOperation.ProcessingArea != null)
                {
                    Acad.SelectObjectIds(techOperation.ProcessingArea.ObjectId);
                }

                if (techOperation.ProcessCommandIndex != null)
                {
                    processCommandBindingSource.Position = techOperation.ProcessCommandIndex.Value;
                }
            }
            else
            {
                processCommandBindingSource.Position = 0;
            }
        }
示例#25
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);
            }
        }
示例#26
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();
        }
示例#27
0
        public ProcessCommand Play(ITechProcess techProcess, int commandIndex)
        {
            var commands   = techProcess.ProcessCommands.Skip(commandIndex).ToList();
            var progressor = new Progressor("Проигрывание обработки", commands.Count);

            foreach (var command in commands)
            {
                Acad.RegenToolObject(techProcess.Tool, command.HasTool, command.ToolLocation, techProcess.MachineType == MachineType.Donatoni);
                if (!progressor.Progress(false))
                {
                    SelectProcessCommand(techProcess, command);
                    return(command);
                }
                System.Threading.Thread.Sleep(30);
            }
            progressor.Stop();
            return(commands.First());
        }
示例#28
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);
                }
            }
        }
示例#29
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);
            }
        }
示例#30
0
文件: CamDocument.cs 项目: airmay/CAM
        private void CreateImitationProgramm(string[] contents, string fileName)
        {
            List <string> result = new List <string>(contents.Length * 2);

            foreach (var item in contents)
            {
                if (item.StartsWith("M03"))
                {
                    continue;
                }

                var line = item.Replace("G01", "G00");
                var vi   = line.IndexOf('V');
                if (vi > 0)
                {
                    line = line.Substring(0, vi) + "V0";
                }

                if (line == "G00 U0 V0")
                {
                    continue;
                }

                result.Add(line);

                if (line.StartsWith("G00"))
                {
                    result.Add("M00");
                }
            }
            var parts = fileName.Split('.');

            fileName = parts[0] + "_i." + parts[1];
            File.WriteAllLines(fileName, result);
            Acad.Write($"Создан файл с имитацией {fileName}");
        }