/*特别注明: * 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信息------"); }
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; }