///<summary> method <c>GetDrawingDocBOMTable</c> ///从SolidWorks 的Drawing文档获取到其材料明细表,一般一个文档一个,多余不获取 ///</summary> public void GetDrawingDocBOMTable(ModelDoc2 modelDoc, out BomTableAnnotation swBOMTable, out string configName, out string topFileName) { Feature feature = modelDoc.IFirstFeature(); swBOMTable = null; configName = ""; topFileName = ""; BomFeature swBomFeat = null; while (feature != null) { Type type = feature.GetType(); if ("BomFeat" == feature.GetTypeName()) { //Console.WriteLine("******************************"); //Console.WriteLine("Feature Name : " + feature.Name); swBomFeat = (BomFeature)feature.GetSpecificFeature2(); break; } string name = feature.Name; feature = feature.IGetNextFeature(); } if (swBomFeat == null || swBomFeat.GetTableAnnotationCount() <= 0) { return; } Feature swFeat = (Feature)swBomFeat.GetFeature(); string featureName = swFeat.Name; swBOMTable = swBomFeat.IGetTableAnnotations(1);// default(TableAnnotation); topFileName = swBomFeat.GetReferencedModelName(); int configCount = swBomFeat.GetConfigurationCount(true); // //object[] vTableArr = (object[])swBomFeat.GetTableAnnotations(); //foreach (object vTable_loopVariable in vTableArr) //{ // object vTable = vTable_loopVariable; // TableAnnotation swTable = (TableAnnotation)vTable; // ProcessTableAnn(modelDoc, swTable); //} configName = ""; if (configCount > 0) { bool visibility = true; configName = swBomFeat.IGetConfigurations(true, 0, ref visibility); } //swBOMTable.Iget return; }
///<summary> method <c>GetDrawingDocBOMTable</c> ///从SolidWorks 的Drawing文档获取到其材料明细表,一般一个文档一个,多余不获取 ///</summary> public void GetDrawingDocBOMTable(ModelDoc2 modelDoc, out BomTableAnnotation swBOMTable, out string configName, out string topFileName) { Feature feature = modelDoc.IFirstFeature(); swBOMTable = null; configName = ""; BomFeature swBomFeat = null; while (feature != null) { Type type = feature.GetType(); if ("BomFeat" == feature.GetTypeName()) { Console.WriteLine("******************************"); Console.WriteLine("Feature Name : " + feature.Name); swBomFeat = (BomFeature)feature.GetSpecificFeature2(); break; } string name = feature.Name; feature = feature.IGetNextFeature(); } if (swBomFeat == null || swBomFeat.GetTableAnnotationCount() <= 0) { return; } swBOMTable = swBomFeat.IGetTableAnnotations(1);// default(TableAnnotation); topFileName = swBomFeat.GetReferencedModelName(); configName = ""; if (configCount > 0) { bool visibility = true; configName = swBomFeat.IGetConfigurations(true, 0, ref visibility); } //swBOMTable.Iget return; }
public void GetXMLfromBOM() { swapp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application"); swmodel = swapp.ActiveDoc; swModelDocExt = swmodel.Extension; //создаем MemoryStream, в который будем писать XML var myMemoryStream = new MemoryStream(); //создаем XmlTextWriter, указываем объект – myMemoryStream, в который будем писать XML, и кодировку try { var myXml = new System.Xml.XmlTextWriter("C:\\Program Files\\SW-Complex\\SP-Temp.xml", System.Text.Encoding.UTF8); swDraw = (DrawingDoc)swmodel; vSheetNames = swDraw.GetSheetNames(); ok = swDraw.ActivateSheet(vSheetNames[0]); swView = swDraw.GetFirstView(); // Получаем параметры модели swView = swView.GetNextView(); swmodel = swView.ReferencedDocument; //swSelMgr = swDraw.SelectionManager; myXml.WriteStartDocument(); myXml.Formatting = System.Xml.Formatting.Indented; //длина отступа myXml.Indentation = 2; vConfName = swmodel.GetConfigurationNames(); swapp = new SldWorks(); swmodel = swapp.ActiveDoc; Feature swFeat = swmodel.FirstFeature(); while ((swFeat != null)) { if (swFeat.GetTypeName() == "BomFeat") { swFeat.Select(true); swBomFeature = swFeat.GetSpecificFeature2(); } swFeat = swFeat.GetNextFeature(); } ////////////////////////////////////////////////////// // // GetPropertyBomTableFromDrawDoc // ////////////////////////////////////////////////////// object vConfigurations = null; object vVisibility = null; bool bGetVisible = false; long lNumRow = 0; long lNumColumn = 0; int lRow = 0; TableAnnotation swTableAnnotation = default(TableAnnotation); ModelDoc2 swDocument = default(ModelDoc2); AssemblyDoc swAssembly = default(AssemblyDoc); int lStartRow = 0; string strItemNumber = ""; string strPartNumber = ""; string strDescription = ""; var strDocumentName = swBomFeature.GetReferencedModelName(); swDocument = swapp.GetOpenDocumentByName(strDocumentName); swAssembly = (AssemblyDoc)swDocument; //swBOMTableAnnotation = swBomFeature.GetTableAnnotations(0) var swBomTableAnnotation = (BomTableAnnotation)swBomFeature.GetTableAnnotations()[0]; swTableAnnotation = (TableAnnotation)swBomTableAnnotation; lNumRow = swTableAnnotation.RowCount; lNumColumn = swTableAnnotation.ColumnCount; lStartRow = 1; //If (Not (swTableAnnotation.TitleVisible = False)) Then if (swTableAnnotation.TitleVisible == false) { lStartRow = 2; } bGetVisible = false; vConfigurations = swBomFeature.GetConfigurations(bGetVisible, vVisibility); //swTableAnnotation = swTableAnnotation; /////////////////////////////////////////////////////////////////// swSheet = swDraw.GetCurrentSheet(); strActiveSheetName = swSheet.GetName(); vSheetNames = swDraw.GetSheetNames(); ok = swDraw.ActivateSheet(vSheetNames[0]); swSheet = swDraw.GetCurrentSheet(); swView = swDraw.GetFirstView(); if (swSheet.CustomPropertyView == "По умолчанию" | swSheet.CustomPropertyView == "Default") { swView = swView.GetNextView(); } // get custom property var valout = ""; //Обозначение var valout1 = ""; //Наименование CustomPropertyManager swCustProp = default(CustomPropertyManager); var resolvedValOut = ""; var resolvedValOut1 = ""; //string resolvedValOut3 = ""; //string resolvedValOut4 = ""; //string resolvedValOut5 = ""; swCustProp = swmodel.Extension.CustomPropertyManager[""]; swCustProp.Get2("Обозначение", out valout, out resolvedValOut); swCustProp.Get2("Description", out valout1, out resolvedValOut1); // переменные для колонок int Jj = 0; // наименование int aa = 0; // раздел int oo = 0; // обозначение int tt = 0; // формат int yy = 0; // int uu = 0; // Код материала int ss = 0; // Примечание string sRowStr = null; // наименовани string sRowStr1 = null; // раздел string sRowStr2 = null; // обозначение string sRowStr3 = null; // формат string sRowStr4 = null; // ERP code string sRowStr5 = null; // Код материала string sRowStr6 = null; // Примечание // При выборе электромонтажа string Complect = ""; if (addinform.ChkElectro1.Checked) { Complect = "МЭ"; } else if (addinform.ChkElectro2.Checked) { Complect = "ТБ"; } //////////////////////////////////////////////////////////// // // XML // //////////////////////////////////////////////////////////// //создаем элементы myXml.WriteStartElement("xml"); // myXml.WriteStartElement("Item"); // имя пути основного чертежа myXml.WriteStartElement("PathName"); //записываем строку myXml.WriteString(swmodel.GetPathName()); myXml.WriteEndElement(); // Устанавливаем ДОК из формы добавление myXml.WriteStartElement("doc"); // myXml.WriteStartElement("Обозначение"); //записываем строку myXml.WriteString(resolvedValOut + "CБ"); myXml.WriteEndElement(); // myXml.WriteStartElement("Наименование"); myXml.WriteString("Сборочный чертеж"); myXml.WriteEndElement(); // myXml.WriteEndElement(); //doc //dynamic CheckedRows2 = (from Rows in addinform.DGDoc.Rows.Cast<DataGridViewRow>()where Convert.ToBoolean(Rows.Cells(0).Value) == true).ToList; dynamic CheckedRows2 = (from Rows in addinform.DGDoc.Rows.Cast <DataGridViewRow>() where Convert.ToBoolean(Rows.Cells[0].Value.ToString()) select Rows).ToList(); System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (DataGridViewRow row in CheckedRows2) { sb.AppendLine(row.Cells[1].Value.ToString()); sb.ToString(); //Оставляем первые две буквы для обозначения разделитель var literal = row.Cells[1].Value.ToString(); var substring = literal.Substring(0, 2); var literal2 = row.Cells[1].Value.ToString(); var substring2 = literal2.Substring(5); myXml.WriteStartElement("doc"); /// myXml.WriteStartElement("Обозначение"); //записываем строку myXml.WriteString(resolvedValOut + substring); myXml.WriteEndElement(); /// myXml.WriteStartElement("Наименование"); myXml.WriteString(substring2); myXml.WriteEndElement(); /// myXml.WriteEndElement(); //doc } //<------------- Elec if (addinform.ChkElectro.Checked == true & addinform.ChkElectro1.Checked == false & addinform.ChkElectro2.Checked == false) { myXml.WriteStartElement("Elec"); //Elec myXml.WriteString("Устанавливают при электромонтаже"); myXml.WriteEndElement(); //Elec } //<------------- ChkElectro1 if (addinform.ChkElectro.Checked == true & addinform.ChkElectro1.Checked == true) { myXml.WriteStartElement("Elec"); //Elec myXml.WriteString("Устанавливают по " + resolvedValOut + Complect); myXml.WriteEndElement(); //Elec } //<------------- ChkElectro2 if (addinform.ChkElectro.Checked == true & addinform.ChkElectro2.Checked == true) { myXml.WriteStartElement("Elec"); //Elec myXml.WriteString("Устанавливают по " + resolvedValOut + Complect); myXml.WriteEndElement(); //Elec } // myXml.WriteStartElement("Обозначение"); //записываем строку myXml.WriteString(resolvedValOut); myXml.WriteEndElement(); /// myXml.WriteStartElement("Наименование"); myXml.WriteString(resolvedValOut1); myXml.WriteEndElement(); //\reference myXml.WriteStartElement("references"); // ВЫГРУЖАЕМ ВЫБРАННЫЕ КОНФИГУРАЦИИ dynamic CheckedRows = (from Rows in DataGridConfig.Rows.Cast <DataGridViewRow>() where Convert.ToBoolean(Rows.Cells[0].Value.ToString()) select Rows).ToList(); System.Text.StringBuilder sb2 = new System.Text.StringBuilder(); foreach (DataGridViewRow row in CheckedRows) { sb2.AppendLine(row.Cells[1].Value.ToString()); swmodel = swView.ReferencedDocument; var configuration = swView.ReferencedConfiguration; var sConfigName = swView.ReferencedConfiguration; Configuration swConfig = swmodel.GetConfigurationByName(sConfigName); for (var i = 0; i <= vConfName.GetUpperBound(0); i++) { const string ucase = ""; if (vConfName[i] == row.Cells[1].Value.ToString()) { configuration = vConfName[i]; } } swView.ReferencedConfiguration = sConfigName; myXml.WriteStartElement("config"); myXml.WriteAttributeString("value", row.Cells[1].Value.ToString()); ///////////////////////////////////////////////////////////// // // PART // ///////////////////////////////////////////////////////////// for (lRow = lStartRow; lRow <= (lNumRow - 1); lRow++) { if (swBomTableAnnotation.GetComponentsCount2((int)lRow, row.Cells[1].Value.ToString(), out strItemNumber, out strPartNumber) > 0) { myXml.WriteStartElement("part"); //PathNameComponent string strModelPathName = null; var vModelPathNames = swBomTableAnnotation.GetModelPathNames((int)lRow, out strItemNumber, out strPartNumber); if (((vModelPathNames != null))) { myXml.WriteStartElement("PathNameComponent"); foreach (var vModelPathName_loopVariable in vModelPathNames) { var vModelPathName = vModelPathName_loopVariable; strModelPathName = vModelPathName; myXml.WriteString(strModelPathName); } myXml.WriteEndElement(); } //'\ Row myXml.WriteStartElement("Row"); myXml.WriteString(Convert.ToString(lRow - lStartRow + 1)); myXml.WriteEndElement(); vModelPathNames = swBomTableAnnotation.GetModelPathNames((int)lRow, out strItemNumber, out strPartNumber); //\ ItemNum myXml.WriteStartElement("ItemNum"); myXml.WriteString(strItemNumber); myXml.WriteEndElement(); //\ раздел aa = 3; /// раздел sRowStr1 = ""; sRowStr1 = sRowStr1 + swTableAnnotation.Text[lRow, aa]; myXml.WriteStartElement("Раздел"); myXml.WriteString(sRowStr1); myXml.WriteEndElement(); //\ обозначение oo = 1; /// обозначение sRowStr2 = ""; sRowStr2 = sRowStr2 + swTableAnnotation.Text[lRow, oo]; myXml.WriteStartElement("Обозначение"); myXml.WriteString(sRowStr2); myXml.WriteEndElement(); //\ наименование Jj = 2; /// наименование sRowStr = ""; sRowStr = sRowStr + swTableAnnotation.Text[lRow, Jj]; myXml.WriteStartElement("Наименование"); myXml.WriteString(sRowStr); myXml.WriteEndElement(); //\ tt = 4; /// формат sRowStr3 = ""; sRowStr3 = sRowStr3 + swTableAnnotation.Text[lRow, tt]; myXml.WriteStartElement("Формат"); myXml.WriteString(sRowStr3); myXml.WriteEndElement(); //\ yy = 5; /// ERP code sRowStr4 = ""; sRowStr4 = sRowStr4 + swTableAnnotation.Text[lRow, yy]; myXml.WriteStartElement("ERP_code"); myXml.WriteString(sRowStr4); myXml.WriteEndElement(); //\ uu = 6; /// Код материала sRowStr5 = ""; sRowStr5 = sRowStr5 + swTableAnnotation.Text[lRow, uu]; myXml.WriteStartElement("Код_материала"); myXml.WriteString(sRowStr5); myXml.WriteEndElement(); //\ ss = 7; /// наименование sRowStr6 = ""; sRowStr6 = sRowStr6 + swTableAnnotation.Text[lRow, ss]; myXml.WriteStartElement("Примечание"); myXml.WriteString(sRowStr6); myXml.WriteEndElement(); //\ myXml.WriteStartElement("Количество"); //myXml.WriteString(swTableAnnotation.GetComponentsCount2(lRow, strConfiguration, strItemNumber, strPartNumber)) myXml.WriteString(Convert.ToString(swBomTableAnnotation.GetComponentsCount2(lRow, row.Cells[1].Value.ToString(), out strItemNumber, out strPartNumber))); myXml.WriteEndElement(); myXml.WriteEndElement(); //config } } myXml.WriteEndElement(); //part } myXml.WriteEndElement(); //references //<~~~~~~~~~~~~~~~~~~~~~~~~~~~ Get the Total Number of Rows Annotation swAnn = default(Annotation); TableAnnotation swTable = default(TableAnnotation); long nNumRow = 0; swmodel = swapp.ActiveDoc; swView = swDraw.GetFirstView(); swTable = swView.GetFirstTableAnnotation(); swAnn = swTable.GetAnnotation(); nNumRow = swTable.RowCount; myXml.WriteStartElement("TotalRows"); myXml.WriteString(Convert.ToString(nNumRow)); myXml.WriteEndElement(); //end TotalRows myXml.WriteEndElement(); //Item myXml.WriteEndElement(); //элемент XML //End If //заносим данные в myMemoryStream myXml.Flush(); myXml.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); throw; } }