Example #1
0
        private void CreatePipeNenwork(object obj)
        {
            thisWindow.Close();

            BusyIndicatorHelper.ShowBusyIndicator("Создание сети Civil 3D");
            try
            {
                //создать сеть Civil 3d
                networkGraph.CreatePipeNenwork();
            }
            finally
            {
                BusyIndicatorHelper.CloseBusyIndicator();
            }
        }
Example #2
0
        public override int Execute(params string[] parameters)
        {
            Win.MessageBoxResult result = Win.MessageBoxResult.Yes;
            if (ManualUse)
            {
                result = Win.MessageBox.Show("Перед экспортом FBX, нужно скрыть те элементы модели, которые не нужно экспортировать. "
                                             + "А так же нужно настроить параметры экспорта в FBX на экспорт ЛИБО В ФОРМАТЕ ASCII, ЛИБО В ДВОИЧНОМ ФОРМАТЕ ВЕРСИИ НЕ НОВЕЕ 2018. "
                                             + "Рекомендуется так же отключить экспорт источников света и камер. "
                                             + "\n\nНачать выгрузку FBX?", "Выгрузка FBX", Win.MessageBoxButton.YesNo);
            }



            if (result == Win.MessageBoxResult.Yes)
            {
                try
                {
                    PluginRecord FBXPluginrecord = Application.Plugins.
                                                   FindPlugin("NativeExportPluginAdaptor_LcFbxExporterPlugin_Export.Navisworks");
                    if (FBXPluginrecord != null)
                    {
                        if (!FBXPluginrecord.IsLoaded)
                        {
                            FBXPluginrecord.LoadPlugin();
                        }

                        NativeExportPluginAdaptor FBXplugin = FBXPluginrecord.LoadedPlugin as NativeExportPluginAdaptor;

                        Document doc = Application.ActiveDocument;

                        string fbxPath        = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                        string docPath        = doc.FileName;
                        string defFBXFileName = "";
                        if (!String.IsNullOrEmpty(docPath))
                        {
                            fbxPath        = Path.GetDirectoryName(docPath);
                            defFBXFileName = Path.GetFileNameWithoutExtension(docPath) + ".fbx";
                        }

                        //Указание пользователем имени файла для fbx
                        string fbxFullFileName = null;
                        if (ManualUse)
                        {
                            WinForms.SaveFileDialog sFD = new WinForms.SaveFileDialog();
                            sFD.InitialDirectory = fbxPath;
                            sFD.Filter           = "fbx files (*.fbx)|*.fbx";
                            sFD.FilterIndex      = 1;
                            sFD.RestoreDirectory = true;
                            if (!String.IsNullOrWhiteSpace(defFBXFileName))
                            {
                                sFD.FileName = defFBXFileName;
                            }
                            sFD.Title = "Укажите файл для записи fbx";
                            if (sFD.ShowDialog() == WinForms.DialogResult.OK)
                            {
                                fbxFullFileName = sFD.FileName;
                            }
                        }
                        else
                        {
                            fbxFullFileName = FBXSavePath;
                            FileAttributes attr = File.GetAttributes(fbxFullFileName);
                            if (attr.HasFlag(FileAttributes.Directory))
                            {
                                //добавить имя файла
                                fbxFullFileName = Path.Combine(fbxFullFileName, FBXFileName);
                            }
                        }


                        if (!String.IsNullOrEmpty(fbxFullFileName))
                        {
                            string notEditedDirectory = Path.Combine(Path.GetDirectoryName(fbxFullFileName), "NotEdited");
                            if (!Directory.Exists(notEditedDirectory))
                            {
                                Directory.CreateDirectory(notEditedDirectory);
                            }
                            string notEditedFileName = Path.Combine(notEditedDirectory,
                                                                    Path.GetFileName(fbxFullFileName));

                            if (ManualUse)
                            {
                                BusyIndicatorHelper.ShowBusyIndicator();
                                BusyIndicatorHelper.SetMessage("Стандартный экспорт FBX");
                            }


                            if (FBXplugin.Execute(notEditedFileName) == 0)//Выполнить экспорт в FBX
                            {
                                if (ManualUse)
                                {
                                    BusyIndicatorHelper.SetMessage("Редактирование FBX");
                                }

                                bool isASCII = IsASCIIFBXFile(notEditedFileName);
                                if (isASCII || GetBinaryVersionNum(notEditedFileName) <= 7500)
                                {
                                    //Прочитать модель, составить очередь имен для подстановки в FBX
                                    Queue <FBX.NameReplacement> replacements = new Queue <FBX.NameReplacement>();
                                    DocumentModels docModels = doc.Models;
                                    ModelItemEnumerableCollection rootItems = docModels.RootItems;
                                    //if (rootItems.Count() > 1)
                                    //{
                                    //    //Если в Navis несколько корневых узлов (как в nwf),
                                    //    //то один узел в самом начале FBX должен быть пропущен
                                    //    //Там появится узел Environment
                                    //    replacements.Enqueue(new FBX.NameReplacement());
                                    //}
                                    ComApi.InwOpState3 oState = ComApiBridge.ComApiBridge.State;
                                    NameReplacementQueue(rootItems, replacements, oState);
                                    if (rootItems.Count() == 1)
                                    {
                                        //Обозначить, что первый узел имеет ненадежное имя.
                                        //В FBX оно всегда - Environment, а в Navis - имя открытого файла
                                        //replacements.Peek().OldNameTrustable = false;

                                        //Если корневой узел один, то убрать его из списка. Его не будет в FBX
                                        replacements.Dequeue();
                                    }

                                    //Первый узел в списке замены должен обязательно иметь верное имя
                                    //(в начале списка могут быть с пустым значением, которые отключены в Navis)
                                    while (!replacements.Peek().OldNameTrustable)
                                    {
                                        replacements.Dequeue();
                                    }


                                    //Отредактировать FBX
                                    FBX.ModelNamesEditor fbxEditor = null;
                                    if (IsASCIIFBXFile(notEditedFileName))
                                    {
                                        fbxEditor = new FBX.ASCIIModelNamesEditor(notEditedFileName, replacements);
                                    }
                                    else /*if (GetBinaryVersionNum(sFD.FileName) <= 7500)*/
                                    {
                                        fbxEditor = new FBX.BinaryModelNamesEditor(notEditedFileName, replacements);
                                    }
                                    fbxEditor.FbxFileNameEdited = fbxFullFileName;
                                    fbxEditor.EditModelNames();



                                    if (ManualUse)
                                    {
                                        BusyIndicatorHelper.CloseBusyIndicator();
                                        Win.MessageBox.Show("Файл FBX с отредактированными именами моделей - " + fbxEditor.FbxFileNameEdited,
                                                            "Готово", Win.MessageBoxButton.OK, Win.MessageBoxImage.Information);
                                    }
                                }
                                else
                                {
                                    throw new Exception("Неподдерживаемый формат FBX");
                                }
                            }
                            else
                            {
                                throw new Exception("При экспорте FBX из NavisWorks произошли ошибки");
                            }


                            if (ManualUse)
                            {
                                //на всякий случай
                                BusyIndicatorHelper.CloseBusyIndicator();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    CommonException(ex, "Ошибка при экспорте в FBX из Navis");
                }
            }

            return(0);
        }
Example #3
0
        private void AcceptConfigs(object obj)
        {
            //Попытаться считать данные из Excel
            ExcelReader = !String.IsNullOrEmpty(ExcelPath) ? new PipeStructureExcelReader(ExcelPath) : null;
            bool accept = true;

            if (ExcelReader != null && ExcelReader.WellDataFiles.Count == 0)
            {
                MessageBox.Show("В указанной директории не найдено ни одного файла Excel с подходящими именами. "
                                + "Для каждого квадрата должен быть отдельный файл с данными по колодцам. Файлы должны называться в соответствии с номером квадрата. "
                                + "Например, \"11111111\" или \"1111-11-11\" или \"1111_11_11\". Расширение \".xlsx\" или \".xls\"", "Отмена");
                return;
            }
            if (ExcelReader != null)
            {
                accept = ExcelReader.ReadDataFromExcel();
                if (accept && (
                        ExcelReader.WellsData.Count == 0 ||
                        ExcelReader.WellsData.All(kvp => kvp.Value == null ||
                                                  kvp.Value.Count == 0)))
                {
                    MessageBox.Show("В указанных файлах Excel не удалось обнаружить данные о колодцах. Возможно файлы имеют неверный формат "
                                    + "(смотри пример файла данных по гиперссылке в окне настройки)."
                                    , "Отмена");
                    return;
                }
            }


            if (accept)
            {
                //Скрыть окно
                thisWindow.Hide();


                BusyIndicatorHelper.ShowBusyIndicator("Построение графа сети");
                try
                {
                    //Запустить построение графа
                    networkGraph = new PipeNetworkGraph(doc, cdoc, this);
                    //Отрисовать маркеры распознавания объектов
                    networkGraph.DrawMarkers();
                }
                finally
                {
                    BusyIndicatorHelper.CloseBusyIndicator();
                }


                //Показ модели и ожидание нажатия любой клавиши
                Editor ed = doc.Editor;
                PromptKeywordOptions pko =
                    new PromptKeywordOptions("\nИзучите маркеры сопоставления объектов чертежа");
                pko.Keywords.Add("Принято");
                pko.AllowNone = true;
                PromptResult pr = ed.GetKeywords(pko);
                //Показать окно
                ConfigurationsAccepted = true;
                Autodesk.AutoCAD.ApplicationServices.Application.ShowModalWindow(thisWindow);
                //thisWindow.Close();
            }
        }