Beispiel #1
0
        /*特别注明:
         * InventorAPI自带的集合类型,下标均从1开始
         * 工程图的明细表利用partslists去读取,BOM与partslists是关联的,但不是等同的,略有区别
         * BOM中的"项目"在partslists中是"序号"
         */
        private static void ReadBOMTable(string file)
        {
            Console.WriteLine("------读取工程图BOM信息------");
            DrawingDocument drawingDocument = inventorApp.Documents.Open(file, false) as DrawingDocument; //这里需要注意的是前面要用上inventorApp

            if (drawingDocument.IsInventorDWG == true)
            {
                DrawingBOMs BOMs = drawingDocument.DrawingBOMs;
                Console.WriteLine("BOMs -- " + (BOMs == null) + " & BOMs.Count = " + BOMs.Count);

                if (BOMs.Count == 0)
                {
                }
                else
                {
                    DrawingBOM BOM = BOMs[1];
                    Console.WriteLine("BOM.tostring = " + BOM.ToString());
                    for (int i = 1; i <= BOM.DrawingBOMRows.Count; i++)
                    {
                        DrawingBOMRow row = BOM.DrawingBOMRows[i];
                        for (int j = 1; j <= BOM.DrawingBOMColumns.Count; j++)
                        {
                            DrawingBOMColumn column = BOM.DrawingBOMColumns[j];

                            Console.Write(column.Title + ":" + row[j].Value + "\t");

                            //DrawingBOMCell cell = row[j];
                        }
                        Console.WriteLine();
                    }
                }
                Console.WriteLine("\n************************************************************************\n");

                PartsLists partsLists = drawingDocument.ActiveSheet.PartsLists;
                Console.WriteLine("PartsLists == " + (partsLists == null) + " " + partsLists.Count);
                Console.WriteLine("打印PartsList");
                if (partsLists.Count == 0)
                {
                }
                else
                {
                    Console.WriteLine("partsLists[1] " + (partsLists[1] == null));
                    Console.WriteLine(partsLists[1].PartsListRows == null);
                    //Console.WriteLine("partsLists[0] " + (partsLists[0] == null));  //从1开始,打印0会报异常
                    //Console.WriteLine(partsLists[0].PartsListRows == null);
                    PartsList partsList = null;

                    //读明细表中的内容
                    for (int x = 1; x <= partsLists.Count; x++)
                    {
                        partsList = partsLists[x];//示例上直接写的1
                        Console.WriteLine("PartsListRows.Count = " + x + "------------------------------------");
                        for (int j = 1; j <= partsList.PartsListRows.Count; j++)
                        {
                            PartsListRow row = partsList.PartsListRows[j];
                            Console.WriteLine("row.count = " + j + "---------------------");
                            for (int i = 1; i <= row.Count; i++)
                            {
                                PartsListCell cell = row[i];
                                //if (partsList.PartsListColumns[i].Title != "QTY")
                                // {
                                Console.Write("Ttile : " + partsList.PartsListColumns[i].Title + "\t" + cell.Value);
                                //}
                                Console.WriteLine();
                            }
                        }
                    }
                }
            }
            Console.WriteLine("End------读取工程图BOM信息------");
        }
Beispiel #2
0
        public ConfigureNetworkCreationViewModel(Document doc, CivilDocument cdoc, Window thisWindow)
        {
            this.doc        = doc;
            this.cdoc       = cdoc;
            this.thisWindow = thisWindow;

            //команды
            addBlockStructureMappingPairCommand
                = new RelayCommand(new Action <object>(AddBlockStructureMappingPair));
            selectSurfaceCommand = new RelayCommand(new Action <object>(SelectSurface));
            acceptConfigsCommand = new RelayCommand(new Action <object>(AcceptConfigs));

            openReferenceDocCommand  = new RelayCommand(new Action <object>(OpenReferenceDoc));
            openExcelSampleCommand   = new RelayCommand(new Action <object>(OpenExcelSample));
            createPipeNenworkCommand = new RelayCommand(new Action <object>(CreatePipeNenwork));

            //Выбор слоев
            ObservableCollection <SelectLayerUserControl.Model> layers = SelectLayerUserControl.ViewModel.GetLayers(doc);

            GridLayerVM            = new SelectLayerUserControl.ViewModel(doc, thisWindow, layers, defaultGridLayer);
            StructuresLayerVM      = new SelectLayerUserControl.ViewModel(doc, thisWindow, layers, defaultStructuresLayer);
            StructureLabelsLayerVM = new SelectLayerUserControl.ViewModel(doc, thisWindow, layers, defaultStructureLabelsLayer);

            SameDepth = defaultSameDepth;
            RimElevationCorrection = defaultRimElevationCorrection;

            //combo box populate
            //как правильно связать выбранный элемент в combo box и заданный PartsList для SelectPartSizeViewModel (можно через события)
            //нужно DependencyProperty в классе SelectPartSizeView?
            Database            db             = doc.Database;
            PartsListCollection partListColl   = cdoc.Styles.PartsListSet;
            PartsList           startSelection = null;

            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                foreach (ObjectId plId in partListColl)
                {
                    //defaultPartsList
                    PartsList pl = (PartsList)tr.GetObject(plId, OpenMode.ForRead);
                    PartsLists.Add(pl);
                    if (plId.Equals(defaultPartsList))
                    {
                        startSelection = pl;
                    }
                }
                tr.Commit();
            }
            if (startSelection != null)
            {
                SelectedPartsListItem = startSelection;
            }

            //datagrid populate
            blocks = SelectBlockUserControl.ViewModel.GetBlocks(doc);
            BlocksStructuresMappingColl = new ObservableCollection <BlockStructureMappingPairModel>();
            if (defaultBlockStructureTable != null)
            {
                //есть сохраненная таблица блоков
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    foreach (KeyValuePair <ObjectId, SelectedPartTypeId> kvp in defaultBlockStructureTable)
                    {
                        try
                        {
                            BlockTableRecord btr = tr.GetObject(kvp.Key, OpenMode.ForRead) as BlockTableRecord;
                            if (btr != null)
                            {
                                string   blockName = btr.Name;
                                ObjectId famId     = ObjectId.Null;
                                ObjectId sizeId    = ObjectId.Null;
                                if (kvp.Value != null)
                                {
                                    famId  = kvp.Value.PartFamId;
                                    sizeId = kvp.Value.PartSizeId;
                                }

                                BlockStructureMappingPairModel item
                                    = new BlockStructureMappingPairModel(doc, thisWindow, blocks, SelectedPartsList, famId, sizeId, blockName);
                                HandleDataGridItemInput(item);
                                BlocksStructuresMappingColl.Add(item);
                            }
                        }
                        catch (Exception)
                        {
                            BlocksStructuresMappingColl.Clear();
                            defaultBlockStructureTable = null;//удалить сохраненную таблицу блоков. Пусть создается 1 дефолтная строчка
                            break;
                        }
                    }

                    tr.Commit();
                }
            }



            if (defaultBlockStructureTable == null)
            {
                //нет сохраненной таблицы блоков
                BlockStructureMappingPairModel defItem = new BlockStructureMappingPairModel(doc, thisWindow, blocks, SelectedPartsList, ObjectId.Null, ObjectId.Null)
                {
                    BlockVM = new SelectBlockUserControl.ViewModel(doc, thisWindow, blocks, DEFAULT_STRUCTURE_BLOCK)
                };
                HandleDataGridItemInput(defItem);//для каждой строки в datagrid должен добавляться обработчик событий
                BlocksStructuresMappingColl.Add(defItem);
            }


            ObjectId startPipeFam  = ObjectId.Null;
            ObjectId startPipeSize = ObjectId.Null;

            if (defaultPipeType != null)
            {
                startPipeFam  = defaultPipeType.PartFamId;
                startPipeSize = defaultPipeType.PartSizeId;
            }

            pipeVM = new SelectPartSizeViewModel(doc, SelectedPartsList, PartType.Pipe
                                                 //| PartType.Wire | PartType.Channel | PartType.Conduit | PartType.UndefinedPartType
                                                 , startPipeFam, startPipeSize);


            communicationDepthVM = new NumericUpDownViewModel(defaultCommunicationDepth, 0.5, 0, 100);

            wellDepthVM = new NumericUpDownViewModel(defaultWellDepth, 0.5, 0, 100);

            string initialPath = defaultExcelPath == null?Path.GetDirectoryName(doc.Name) : defaultExcelPath;

            excelPathVM = new FileNameInputViewModel("Excel Files|*.xls;*.xlsx;", "Укажите путь к файлу Excel")
            {
                FileName = initialPath
            };

            communicationLayerVM = new SelectLayerUserControl
                                   .ViewModel(doc, thisWindow, layers, defaultCommunicationLayer);


            if (defaultTinSurface != null)
            {
                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                    try
                    {
                        TinSurface tinSurface = tr.GetObject(defaultTinSurface.Value, OpenMode.ForRead) as TinSurface;
                        if (tinSurface != null)
                        {
                            SelectedTinSurface = tinSurface;
                        }
                    }
                    catch { }

                    tr.Commit();
                }
            }

            //Подпись на события, которые оповещают о том, что пользовательские настройки изменились
            //(можно было использовать стандартное событие INotifyPropertyChanged вместо специально созданного SelectionChanged)
            BlocksStructuresMappingColl.CollectionChanged += EnableCreateNetworkBtn;
            BlocksStructuresMappingColl.CollectionChanged += EnableAcceptBtn;
            GridLayerVM.SelectionChanged            += EnableCreateNetworkBtn;
            GridLayerVM.SelectionChanged            += EnableAcceptBtn;
            StructuresLayerVM.SelectionChanged      += EnableCreateNetworkBtn;
            StructuresLayerVM.SelectionChanged      += EnableAcceptBtn;
            StructureLabelsLayerVM.SelectionChanged += EnableCreateNetworkBtn;
            StructureLabelsLayerVM.SelectionChanged += EnableAcceptBtn;
            PipeVM.SelectionChanged               += EnableCreateNetworkBtn;
            ExcelPathVM.FileNameChanged           += EnableCreateNetworkBtn;
            ExcelPathVM.FileNameChanged           += EnableAcceptBtn;
            CommunicationLayerVM.SelectionChanged += EnableCreateNetworkBtn;
            CommunicationLayerVM.SelectionChanged += EnableAcceptBtn;

            OnPropertyChanged(nameof(AcceptBtnIsEnabled));
            OnPropertyChanged(nameof(CreateNetworkBtnIsEnabled));

            //Сохранить введенные данные в окно при любом закрытии
            thisWindow.Closing += SaveInput;
        }