private void btnGearShaftModelBuilding_Click(object sender, EventArgs e)
        {
            //类变量,调研前要赋值
            // xlmGearShaftModelFileName = @"C:\齿轮轴.xml";//齿轮的XML文件名字

            XElement xe = XElement.Load(strModelFileName);

            //读取齿轮模型文件名字
            IEnumerable<XElement> elements = from 齿轮轴名称 in xe.Elements("基本信息")// where PInfo.Attribute("ID").Value == strID
                                             select 齿轮轴名称;
            string modelFile = elements.ElementAt(0).Element("项目目录").Value + elements.ElementAt(0).Element("齿轮轴名称").Value;
            //利用齿轮模型文件名字,读取齿轮模型
            string partTemplate = SwAddin.iSwApp.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplatePart);
            if ((partTemplate != null) && (partTemplate != ""))
            {
                modDoc = (IModelDoc2)SwAddin.iSwApp.OpenDoc6(modelFile,
                    (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "",
                    (int)swFileLoadError_e.swGenericError, (int)swFileLoadWarning_e.swFileLoadWarning_AlreadyOpen);
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("There is no part template available. Please check your options and make sure there is a part template selected, or select a new part template.");
            }

            elements = from 基圆直径 in xe.Elements("尺寸计算")// where PInfo.Attribute("ID").Value == strID
                       select 基圆直径;
            double d_b = double.Parse(elements.ElementAt(0).Element("基圆直径").Value) / 1000;          //基圆直径
            double d_a = double.Parse(elements.ElementAt(0).Element("齿顶圆直径").Value) / 1000;
            double u = Math.Sqrt(((d_a * 1000) / (d_b * 1000)) * ((d_a * 1000) / (d_b * 1000)) - 1);   //滚动角
            double d = double.Parse(elements.ElementAt(0).Element("分度圆直径").Value) / 1000;
            double s = double.Parse(elements.ElementAt(0).Element("齿弦厚").Value) / 1000;
            double d_f = double.Parse(elements.ElementAt(0).Element("齿根圆直径").Value) / 1000;
            double C_CD = double.Parse(elements.ElementAt(0).Element("齿顶倒角").Value) / 1000;

            elements = from 螺旋角 in xe.Elements("设计参数")// where PInfo.Attribute("ID").Value == strID
                       select 螺旋角;
            double beta = double.Parse(elements.ElementAt(0).Element("螺旋角").Value);
            double luoju = Math.PI * d / Math.Tan(beta * Math.PI / 180);
            double B = double.Parse(elements.ElementAt(0).Element("齿宽").Value) / 1000;
            double Z = double.Parse(elements.ElementAt(0).Element("齿数").Value);
            string xuanxiang = elements.ElementAt(0).Element("旋向").Value;

            double numberOfLeftShaft = double.Parse(elements.ElementAt(0).Element("左轴段数").Value);
            double numberOfRightShaft = double.Parse(elements.ElementAt(0).Element("右轴段数").Value);
            double numberOfKeySeat = double.Parse(elements.ElementAt(0).Element("键槽数").Value);

            //SldWorks swApp;
            // IModelDoc2 swModel = default(IModelDoc2);
            ISelectionMgr swSelMgr = default(ISelectionMgr);
            Feature swFeat = default(Feature);
            HelixFeatureData swHelix = default(HelixFeatureData);
            bool bRet;
            bool boolstatus;

            swSelMgr = modDoc.SelectionManager as SelectionMgr;

            // swModel = (ModelDoc2)swApp.ActiveDoc;
            boolstatus = modDoc.Extension.SelectByID2("螺旋线", "REFERENCECURVES", 0, 0, 0, false, 0, null, 0);
            swFeat = swSelMgr.GetSelectedObject6(1, -1);
            swHelix = (HelixFeatureData)swFeat.GetDefinition();
            if (xuanxiang.Equals("L"))
            {
                swHelix.Clockwise = true;
            }
            else
            {
                swHelix.Clockwise = false;
            }
            bRet = swFeat.ModifyDefinition(swHelix, modDoc, null);

            IDimension myDimension = null;

            Parameter[] gearparameter = new Parameter[16];
            gearparameter[0].name = "基圆@草图1"; gearparameter[0].value = d_b;
            gearparameter[1].name = "U@草图1"; gearparameter[1].value = u * Math.PI / 180;
            gearparameter[2].name = "分度圆@草图1"; gearparameter[2].value = d;
            gearparameter[3].name = "齿弦厚@草图1"; gearparameter[3].value = s;
            gearparameter[4].name = "齿根圆@草图5"; gearparameter[4].value = d_f;
            gearparameter[5].name = "D3@螺旋线"; gearparameter[5].value = B + 0.001;
            gearparameter[6].name = "D1@齿根圆"; gearparameter[6].value = B + 0.001;
            gearparameter[7].name = "B@草图6"; gearparameter[7].value = B;
            gearparameter[8].name = "D1@齿廓阵列"; gearparameter[8].value = Z;
            gearparameter[9].name = "D1@草图6"; gearparameter[9].value = d_a + 0.002;
            gearparameter[10].name = "D2@草图6"; gearparameter[10].value = B + 1;
            gearparameter[11].name = "D4@螺旋线"; gearparameter[11].value = luoju;
            gearparameter[12].name = "D1@齿顶倒角"; gearparameter[12].value = C_CD;
            gearparameter[13].name = "D1@齿顶倒角阵列"; gearparameter[13].value = Z;
            gearparameter[14].name = "D1@草图7"; gearparameter[14].value = d_a;
            gearparameter[15].name = "D1@齿顶倒角1"; gearparameter[15].value = C_CD;
            for (int i = 0; i < gearparameter.Length; i++)
            {
                myDimension = (IDimension)modDoc.Parameter(gearparameter[i].name);
                myDimension.SystemValue = gearparameter[i].value;
            }

            string zzd;
            XElement zzdEle = xe.Element("左轴段");
            for (int i = 1; i <= numberOfLeftShaft; i++)
            {
                zzd = "左轴段" + i.ToString();
                elements = from 直径 in zzdEle.Elements(zzd)// where PInfo.Attribute("ID").Value == strID
                           select 直径;
                double D = double.Parse(elements.ElementAt(0).Element("直径").Value) / 1000;
                double L = double.Parse(elements.ElementAt(0).Element("长度").Value) / 1000;
                double C = double.Parse(elements.ElementAt(0).Element("倒角").Value) / 1000;
                double R = double.Parse(elements.ElementAt(0).Element("圆角").Value) / 1000;

                myDimension = (IDimension)modDoc.Parameter(@"D1@" + zzd + "草图");
                myDimension.SystemValue = D;
                myDimension = (IDimension)modDoc.Parameter(@"D1@" + zzd);
                myDimension.SystemValue = L;
                myDimension = (IDimension)modDoc.Parameter(@"D1@" + zzd + "倒角");
                myDimension.SystemValue = C;
                myDimension = (IDimension)modDoc.Parameter(@"D1@" + zzd + "圆角");
                myDimension.SystemValue = R;
            }
            XElement yzdEle = xe.Element("右轴段");
            string yzd;
            for (int i = 1; i <= numberOfRightShaft; i++)
            {
                yzd = "右轴段" + i.ToString();
                elements = from 直径 in yzdEle.Elements(yzd)// where PInfo.Attribute("ID").Value == strID
                           select 直径;
                double D = double.Parse(elements.ElementAt(0).Element("直径").Value) / 1000;
                double L = double.Parse(elements.ElementAt(0).Element("长度").Value) / 1000;
                double C = double.Parse(elements.ElementAt(0).Element("倒角").Value) / 1000;
                double R = double.Parse(elements.ElementAt(0).Element("圆角").Value) / 1000;

                myDimension = (IDimension)modDoc.Parameter(@"D1@" + yzd + "草图");
                myDimension.SystemValue = D;
                myDimension = (IDimension)modDoc.Parameter(@"D1@" + yzd);
                myDimension.SystemValue = L;
                myDimension = (IDimension)modDoc.Parameter(@"D1@" + yzd + "倒角");
                myDimension.SystemValue = C;
                myDimension = (IDimension)modDoc.Parameter(@"D1@" + yzd + "圆角");
                myDimension.SystemValue = R;
            }

            XElement keySeatEle = xe.Element("键槽");
            string keySeat;
            for (int i = 1; i <= numberOfKeySeat; i++)
            {
                keySeat = "键槽" + i.ToString();
                elements = from 直径 in keySeatEle.Elements(keySeat)// where PInfo.Attribute("ID").Value == strID
                           select 直径;
                double K = double.Parse(elements.ElementAt(0).Element("宽").Value) / 1000;
                double L = double.Parse(elements.ElementAt(0).Element("长度").Value) / 1000;
                double C = double.Parse(elements.ElementAt(0).Element("定位").Value) / 1000;
                double S = double.Parse(elements.ElementAt(0).Element("深").Value) / 1000;
                string weizhi = elements.ElementAt(0).Element("位置").Value;
                if (weizhi.Substring(0, 1).Equals("左"))
                {
                    elements = from 直径 in zzdEle.Elements(weizhi)// where PInfo.Attribute("ID").Value == strID
                               select 直径;
                }
                else
                {
                    elements = from 直径 in yzdEle.Elements(weizhi)// where PInfo.Attribute("ID").Value == strID
                               select 直径;
                }
                double D = double.Parse(elements.ElementAt(0).Element("直径").Value) / 1000;

                myDimension = (IDimension)modDoc.Parameter(@"D1@" + keySeat);
                myDimension.SystemValue = 0.5 * D - S;
                myDimension = (IDimension)modDoc.Parameter(@"D1@" + keySeat + "草图");
                myDimension.SystemValue = K;
                myDimension = (IDimension)modDoc.Parameter(@"D2@" + keySeat + "草图");
                myDimension.SystemValue = L;
                myDimension = (IDimension)modDoc.Parameter(@"D3@" + keySeat + "草图");
                myDimension.SystemValue = C;
            }
            modDoc.EditRebuild3();
            modDoc.ShowNamedView2("*Isometric", (int)swStandardViews_e.swTrimetricView);
            modDoc.ViewZoomtofit2();
            modDoc.Save3((int)swSaveAsOptions_e.swSaveAsOptions_Silent,
                   (int)swFileSaveError_e.swGenericSaveError,
                (int)swFileSaveWarning_e.swFileSaveWarning_RebuildError);
        }
        private void btnGearModelBuild_Click(object sender, EventArgs e)
        {
            //类变量,调研前要赋值
            //xlmFileName = @"C:\圆柱齿轮.xml";//齿轮的XML文件名字

            XElement xe = XElement.Load(strModelFileName);

            //读取齿轮模型文件名字
            IEnumerable<XElement> elements = from 齿轮名称 in xe.Elements("基本信息")// where PInfo.Attribute("ID").Value == strID
                                             select 齿轮名称;
            //MessageBox.Show(elements.ElementAt(0).Element("齿轮名称").Value);
            string modelFile = elements.ElementAt(0).Element("项目目录").Value + elements.ElementAt(0).Element("齿轮名称").Value;
            //利用齿轮模型文件名字,读取齿轮模型
            string partTemplate = SwAddin.iSwApp.GetUserPreferenceStringValue((int)swUserPreferenceStringValue_e.swDefaultTemplatePart);
            if ((partTemplate != null) && (partTemplate != ""))
            {
                modDoc = (IModelDoc2)SwAddin.iSwApp.OpenDoc6(modelFile,
                    (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "",
                    (int)swFileLoadError_e.swGenericError, (int)swFileLoadWarning_e.swFileLoadWarning_AlreadyOpen);
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("There is no part template available. Please check your options and make sure there is a part template selected, or select a new part template.");
            }

            elements = from 基圆直径 in xe.Elements("尺寸计算")// where PInfo.Attribute("ID").Value == strID
                       select 基圆直径;
            double d_b = double.Parse(elements.ElementAt(0).Element("基圆直径").Value) / 1000;          //基圆直径
            double d_a = double.Parse(elements.ElementAt(0).Element("齿顶圆直径").Value) / 1000;
            double u = Math.Sqrt(((d_a * 1000) / (d_b * 1000)) * ((d_a * 1000) / (d_b * 1000)) - 1);   //滚动角
            double d = double.Parse(elements.ElementAt(0).Element("分度圆直径").Value) / 1000;
            double s = double.Parse(elements.ElementAt(0).Element("齿弦厚").Value) / 1000;
            double d_f = double.Parse(elements.ElementAt(0).Element("齿根圆直径").Value) / 1000;
            double C_CD = double.Parse(elements.ElementAt(0).Element("齿顶倒角").Value) / 1000;

            elements = from 螺旋角 in xe.Elements("设计参数")// where PInfo.Attribute("ID").Value == strID
                       select 螺旋角;
            double beta = double.Parse(elements.ElementAt(0).Element("螺旋角").Value);
            double luoju = Math.PI * d / Math.Tan(beta * Math.PI / 180);
            double B = double.Parse(elements.ElementAt(0).Element("齿宽").Value) / 1000;
            double Z = double.Parse(elements.ElementAt(0).Element("齿数").Value);
            string xuanxiang = elements.ElementAt(0).Element("旋向").Value;

            elements = from 腹板深 in xe.Elements("腹板结构")// where PInfo.Attribute("ID").Value == strID
                       select 腹板深;
            double D_2 = double.Parse(elements.ElementAt(0).Element("腹板外径D2").Value) / 1000;
            double D_1 = double.Parse(elements.ElementAt(0).Element("腹板内径D1").Value) / 1000;
            double KJ_FB = double.Parse(elements.ElementAt(0).Element("腹板孔径dk").Value) / 1000;
            double N_FB = double.Parse(elements.ElementAt(0).Element("腹板孔数").Value);
            double D_FB = double.Parse(elements.ElementAt(0).Element("腹板深").Value) / 1000;
            double R_FB = double.Parse(elements.ElementAt(0).Element("腹板圆角").Value) / 1000;
            double C_FB = double.Parse(elements.ElementAt(0).Element("腹板倒角").Value) / 1000;

            elements = from 轮毂直径 in xe.Elements("轮毂结构")// where PInfo.Attribute("ID").Value == strID
                       select 轮毂直径;
            double D_LG = double.Parse(elements.ElementAt(0).Element("轮毂直径").Value) / 1000;
            double J_K = double.Parse(elements.ElementAt(0).Element("键宽").Value) / 1000;
            double J_S = double.Parse(elements.ElementAt(0).Element("键深").Value) / 1000;
            double C_LG = double.Parse(elements.ElementAt(0).Element("轮毂倒角").Value) / 1000;
            double R_LG = double.Parse(elements.ElementAt(0).Element("轮毂圆角").Value) / 1000;

            //SldWorks swApp;
            // IModelDoc2 swModel = default(IModelDoc2);
            ISelectionMgr swSelMgr = default(ISelectionMgr);
            Feature swFeat = default(Feature);
            HelixFeatureData swHelix = default(HelixFeatureData);
            bool bRet;
            bool boolstatus;

            swSelMgr = modDoc.SelectionManager as SelectionMgr;

            // swModel = (ModelDoc2)swApp.ActiveDoc;
            boolstatus = modDoc.Extension.SelectByID2("螺旋线", "REFERENCECURVES", 0, 0, 0, false, 0, null, 0);
            swFeat = swSelMgr.GetSelectedObject6(1, -1);
            swHelix = (HelixFeatureData)swFeat.GetDefinition();
            if (xuanxiang.Equals("L"))
            {
                swHelix.Clockwise = true;
            }
            else
            {
                swHelix.Clockwise = false;
            }
            bRet = swFeat.ModifyDefinition(swHelix, modDoc, null);

            IDimension myDimension = null;

            Parameter[] gearparameter = new Parameter[34];

            gearparameter[0].name = "基圆@草图1"; gearparameter[0].value = d_b;
            gearparameter[1].name = "U@草图1"; gearparameter[1].value = u * Math.PI / 180;
            gearparameter[2].name = "分度圆@草图1"; gearparameter[2].value = d;
            gearparameter[3].name = "齿弦厚@草图1"; gearparameter[3].value = s;
            gearparameter[4].name = "齿根圆@草图5"; gearparameter[4].value = d_f;
            gearparameter[5].name = "D3@螺旋线"; gearparameter[5].value = B + 0.001;
            gearparameter[6].name = "D1@齿根圆"; gearparameter[6].value = B + 0.001;
            gearparameter[7].name = "B@草图6"; gearparameter[7].value = B;
            gearparameter[8].name = "D1@齿廓阵列"; gearparameter[8].value = Z;
            gearparameter[9].name = "D1@草图6"; gearparameter[9].value = d_a + 0.002;
            gearparameter[10].name = "D4@螺旋线"; gearparameter[10].value = luoju;
            gearparameter[11].name = "D1@齿顶倒角"; gearparameter[11].value = C_CD;
            gearparameter[12].name = "腹板外径@草图7"; gearparameter[12].value = D_2;
            gearparameter[13].name = "腹板内径@草图7"; gearparameter[13].value = D_1;
            gearparameter[14].name = "D1@草图7"; gearparameter[14].value = (D_1 + D_2) / 2;
            gearparameter[15].name = "D2@草图7"; gearparameter[15].value = (180 / N_FB) * Math.PI / 180;
            gearparameter[16].name = "D1@腹板"; gearparameter[16].value = D_FB;
            gearparameter[17].name = "D1@腹板圆角"; gearparameter[17].value = R_FB;
            gearparameter[18].name = "D1@腹板倒角"; gearparameter[18].value = C_FB;
            gearparameter[19].name = "D1@腹板孔阵列"; gearparameter[19].value = N_FB;
            gearparameter[20].name = "D2@草图6"; gearparameter[20].value = B + 1;
            gearparameter[21].name = "D3@草图7"; gearparameter[21].value = KJ_FB;
            gearparameter[22].name = "D1@齿顶倒角阵列"; gearparameter[22].value = Z;
            gearparameter[23].name = "D1@草图8"; gearparameter[23].value = D_LG;
            gearparameter[24].name = "D2@草图8"; gearparameter[24].value = J_K;
            gearparameter[25].name = "D3@草图8"; gearparameter[25].value = J_S;
            gearparameter[26].name = "D1@轮毂倒角"; gearparameter[26].value = C_LG;
            gearparameter[27].name = "D1@轮毂圆角"; gearparameter[27].value = R_LG;
            gearparameter[28].name = "D1@草图9"; gearparameter[28].value = d_f / 2 - 0.001;
            gearparameter[29].name = "D2@草图9"; gearparameter[29].value = d_a / 2;
            gearparameter[30].name = "D3@草图9"; gearparameter[30].value = B;
            gearparameter[31].name = "D1@草图10"; gearparameter[31].value = d_f;
            gearparameter[32].name = "D3@阵列1"; gearparameter[32].value = (180 / N_FB) * Math.PI / 180;
            gearparameter[33].name = "D1@齿顶倒角1"; gearparameter[33].value = C_CD;
            for (int i = 0; i < gearparameter.Length; i++)
            {
                myDimension = (IDimension)modDoc.Parameter(gearparameter[i].name);
                myDimension.SetSystemValue3(gearparameter[i].value, (int)swInConfigurationOpts_e.swAllConfiguration, null);
            }
            modDoc.EditRebuild3();
            modDoc.ShowNamedView2("*Isometric", (int)swStandardViews_e.swTrimetricView);
            modDoc.ViewZoomtofit2();
            modDoc.Save3((int)swSaveAsOptions_e.swSaveAsOptions_Silent, (int)swFileSaveError_e.swGenericSaveError, (int)swFileSaveWarning_e.swFileSaveWarning_RebuildError);
        }