c# solidworks feature修改

            public interface spa {
            CustomBendAllowance GetCustomBendAllowance();
            double BendAngle { get;}
            double BendRadius { get; set; }
            bool UseDefaultBendAllowance { get; set; }
            void SetCustomBendAllowance(CustomBendAllowance allowance);
            
        }
        public class EdgeFlangeFeatureDataAdapter : spa//适配器
        {
            public EdgeFlangeFeatureData _edgeFlange;
          


            public EdgeFlangeFeatureDataAdapter(object edgeFlange)
            {
               
                _edgeFlange = (EdgeFlangeFeatureData)edgeFlange ?? throw new ArgumentNullException(nameof(edgeFlange));
                
            }

            public CustomBendAllowance GetCustomBendAllowance()
            {
                // 适配EdgeFlangeFeatureData中获取折弯系数的方法,假设名为GetCustomFlangeBendAllowance
                return _edgeFlange.GetCustomBendAllowance();
            }

            public double BendAngle
            {
                // 假设EdgeFlangeFeatureData中存储折弯角度的属性名为FlangeBendAngle
                get => _edgeFlange.BendAngle;
            }

            public double BendRadius
            {
                // 同样,假设存储折弯半径的属性名为FlangeBendRadius
                get => _edgeFlange.BendRadius ; // 根据需要转换单位
                set => _edgeFlange.BendRadius = value;
            }

            public bool UseDefaultBendAllowance
            {
                get => _edgeFlange.UseDefaultBendAllowance;
                set => _edgeFlange.UseDefaultBendAllowance = value;
            }

            public void SetCustomBendAllowance(CustomBendAllowance allowance)
            {
                // 适配设置折弯系数的方法,假设名为SetCustomFlangeBendAllowance
                _edgeFlange.SetCustomBendAllowance(allowance);
              
            }
        }
        public class IOneBendFeatureDataAdapter : spa
        {
            public IOneBendFeatureData _edgeFlange;
         
            public IOneBendFeatureDataAdapter( object edgeFlange)
            {
               
                _edgeFlange = (IOneBendFeatureData)edgeFlange ?? throw new ArgumentNullException(nameof(edgeFlange));
            }

            public CustomBendAllowance GetCustomBendAllowance()
            {
                // 适配IOneBendFeatureData中获取折弯系数的方法,假设名为GetCustomFlangeBendAllowance
                return _edgeFlange.GetCustomBendAllowance();
            }

            public double BendAngle
            {
                // 假设IOneBendFeatureData中存储折弯角度的属性名为FlangeBendAngle
                get => _edgeFlange.BendAngle;
            }

            public double BendRadius
            {
                // 同样,假设存储折弯半径的属性名为FlangeBendRadius
                get => _edgeFlange.BendRadius; // 根据需要转换单位
                set => _edgeFlange.BendRadius = value;
            }

            public bool UseDefaultBendAllowance
            {
                get => _edgeFlange.UseDefaultBendAllowance;
                set => _edgeFlange.UseDefaultBendAllowance = value;
            }

            public void SetCustomBendAllowance(CustomBendAllowance allowance)
            {
                // 适配设置折弯系数的方法,假设名为SetCustomFlangeBendAllowance
                _edgeFlange.SetCustomBendAllowance(allowance);
             
            }
        }
        public class SketchedBendFeatureDataAdapter : spa
        {
            public  SketchedBendFeatureData _edgeFlange;
         
            public SketchedBendFeatureDataAdapter(object edgeFlange)
            {
              
                _edgeFlange = (SketchedBendFeatureData)edgeFlange ?? throw new ArgumentNullException(nameof(edgeFlange));
            }

            public CustomBendAllowance GetCustomBendAllowance()
            {
                // 适配IOneBendFeatureData中获取折弯系数的方法,假设名为GetCustomFlangeBendAllowance
                return _edgeFlange.GetCustomBendAllowance();
            }

            public double BendAngle
            {
                // 假设IOneBendFeatureData中存储折弯角度的属性名为FlangeBendAngle
                get => _edgeFlange.BendAngle;

            }

            public double BendRadius
            {
                // 同样,假设存储折弯半径的属性名为FlangeBendRadius
                get => _edgeFlange.BendRadius; // 根据需要转换单位
                set => _edgeFlange.BendRadius = value;
            }

            public bool UseDefaultBendAllowance
            {
                get => _edgeFlange.UseDefaultBendAllowance;
                set => _edgeFlange.UseDefaultBendAllowance = value;
            }

            public void SetCustomBendAllowance(CustomBendAllowance allowance)
            {
                // 适配设置折弯系数的方法,假设名为SetCustomFlangeBendAllowance
               
                _edgeFlange.SetCustomBendAllowance(allowance);
            
            }
        }
public bool 特征读取()
    {

        var swModel = (ModelDoc2)this.sldWorks.ActiveDoc;
        
        PartDoc swPart = (PartDoc)swModel;
        object[] vBodies = (object[])swPart.GetBodies2((int)swBodyType_e.swSolidBody, false);
    
        if (vBodies.Count() > 1) {
            假的子件=true;
            聊天记录+=("要标角标");
          }
        Feature swFeature = (Feature)swModel.FirstFeature();
        double thickness = 0.0;

        this.折弯次数1类 =0;
        this.折弯次数2类 =0;
        this.折弯次数3类 = 0;
        double 边界框长 = 0;
        double 边界框宽 = 0;
        double 折弯补偿 = 0;
        double 默认折弯半径 = 0;
        string 非90度收集 = "";
        int 段差收集 = 0;
        /整理和实现
        while (swFeature != null)
        {

            if (swFeature.GetTypeName2() == "SheetMetal")
            {

                SheetMetalFeatureData swSheetMetalData = (SheetMetalFeatureData)swFeature.GetDefinition();
                swSheetMetalData.SetUseGaugeTable(false, "");
                CustomBendAllowance swCustBend = default(CustomBendAllowance);
                swCustBend = swSheetMetalData.GetCustomBendAllowance();
                bool bRet = swSheetMetalData.AccessSelections(swModel, null);
                if (Math.Round(swSheetMetalData.BendRadius * 1000, 3) == 0)
                {

                    swSheetMetalData.BendRadius = 0.01 / 1000;

                }
                默认折弯半径 = Math.Round(swSheetMetalData.BendRadius * 1000, 3);
                thickness = swSheetMetalData.Thickness;
                thickness *= 1000.0;
                this.厚度mm = Math.Round(thickness, 1);
                var ConfigNames = (string[])swModel.GetConfigurationNames();
                var 物料材质info = swModel.GetCustomInfoValue(ConfigNames[0], "材质");
                double 板厚 = 0;
                int 空格位置 = 物料材质info.IndexOf(" ");
                if (空格位置 != -1)
                {

                    Match 板厚match = Regex.Match(物料材质info.Substring(空格位置), @"\d{1,2}(\.\d{1,2})?");

                    double.TryParse(板厚match.Value, out 板厚);
                    if (this.厚度mm == 0) { Debug.WriteLine("厚度=0"); }
                    if (板厚 != this.厚度mm && 板厚 != 0)
                    {
                        Debug.WriteLine($"{this.厚度mm}=>{板厚},板厚match.Value={板厚match.Value},物料材质info={物料材质info}");
                        this.聊天记录 += $"********板厚不同\n{this.厚度mm}=>{板厚}\n";
                        this.厚度mm = Math.Round(板厚, 1);
                        thickness = 板厚; swSheetMetalData.Thickness = thickness / 1000;
                        swSheetMetalData.SetOverrideDefaultParameter2(0, true);
                    }
                }


                折弯补偿 = 常量.折弯补偿映射字典[thickness];

                swCustBend.Type = 4;
                swCustBend.BendDeduction = (2 * this.厚度mm - 折弯补偿) / 1000;
                //swCustBend.Type = 2;
                //swCustBend.KFactor = ((2 / Math.PI) * (2 * 默认折弯半径 + 折弯补偿) - 默认折弯半径) / this.厚度mm;
                swSheetMetalData.SetOverrideDefaultParameter2(1, true);//k因子和板厚
                swSheetMetalData.SetCustomBendAllowance(swCustBend);





                bool bRet2 = swFeature.ModifyDefinition(swSheetMetalData, swModel, null);

                swModel.EditRebuild3();
            }

            else if (swFeature.GetTypeName2() == "SMBaseFlange")
            {
                //BaseFlangeFeatureData
                BaseFlangeFeatureData swBaseFlange = default(BaseFlangeFeatureData);
                swBaseFlange = (BaseFlangeFeatureData)swFeature.GetDefinition();
                Feature swBaseSubFeature = (Feature)swFeature.GetFirstSubFeature();

                while ((swBaseSubFeature != null))
                {
                    if (swBaseSubFeature.GetTypeName() == "SketchBend")
                    {

                        var OneBendFeature = (IOneBendFeatureData)swBaseSubFeature.GetDefinition();
                        Debug.WriteLine("bendname:" + swBaseSubFeature.Name);
                        spa Bend = new IOneBendFeatureDataAdapter(OneBendFeature);

                        if (设折弯系数(ref Bend))
                        {


                            swBaseSubFeature.ModifyDefinition(OneBendFeature, swModel, null);
                        };

                    }


                    swBaseSubFeature = (Feature)swBaseSubFeature.GetNextSubFeature();
                }





            }

            else if (swFeature.GetTypeName2() == "EdgeFlange")
            {


                var swEdgeFlange = (EdgeFlangeFeatureData)swFeature.GetDefinition();
                //swEdgeFlange.UsePositionTrimSideBends = true;

                var swCustBend = swEdgeFlange.GetCustomBendAllowance();



                bool 要更新 = false, 设折弯 = false;
                spa Bend = new EdgeFlangeFeatureDataAdapter(swEdgeFlange);

                if (swEdgeFlange.GapDistance * 1000 > 0.5)
                {
                    swEdgeFlange.GapDistance = 0.5 / 1000;

                    要更新 = true;
                    聊天记录 += $"{swFeature.Name} 有大缝隙 需要检查***\n";

                }




                double 伸长量 = swEdgeFlange.OffsetDistance;
                if (伸长量 * 1000 <= 5)
                {
                    swEdgeFlange.UseDefaultBendAllowance = false;
                    //swCustBend.Type = (int)swBendAllowanceTypes_e.swBendAllowanceKFactor;

                    //swCustBend.KFactor =( 2*(this.厚度mm-折弯补偿)/Math.PI- swEdgeFlange.BendRadius*1000)/ this.厚度mm;
                    swCustBend.Type = (int)swBendAllowanceTypes_e.swBendAllowanceDeduction;

                    swCustBend.BendDeduction = (this.厚度mm + 折弯补偿) / 1000;
                    Console.WriteLine("this.厚度mm=" + this.厚度mm + ",折弯补偿=" + 折弯补偿 + ",折弯半径" + swEdgeFlange.BendRadius * 1000);
                    swEdgeFlange.SetCustomBendAllowance(swCustBend);
                    段差收集++;
                    要更新 = true;

                }
                else { 设折弯 = 设折弯系数(ref Bend); }
                if (设折弯 || 要更新)
                {
                    swFeature.ModifyDefinition(swEdgeFlange, swModel, null);
                };
            }
            else if (swFeature.GetTypeName2() == "FlatPattern")
            {

                FlatPatternFeatureData swFlatPatt = default(FlatPatternFeatureData);
                swFlatPatt = (FlatPatternFeatureData)swFeature.GetDefinition();


                this.展开用featurename = swFeature.Name;
                swFeature.SetSuppression((int)swFeatureSuppressionAction_e.swUnSuppressDependent);
                swFeature.SetSuppression((int)swFeatureSuppressionAction_e.swUnSuppressFeature);
                Feature swBaseSubFeature = (Feature)swFeature.GetFirstSubFeature();
                List<double> 边界框 = new List<double>();
                while ((swBaseSubFeature != null))
                {
                    //展平-<边线折弯4>1 [UiBend] 折弯-线2 [ProfileFeature]
                    // Debug.Print(swBaseSubFeature.Name + " [" + swBaseSubFeature.GetTypeName() + "]");
                    swBaseSubFeature.SetSuppression((int)swFeatureSuppressionAction_e.swUnSuppressFeature);
                    if (swBaseSubFeature.GetTypeName() == "ProfileFeature")
                    {

                        var sketchSpc = (Sketch)swBaseSubFeature.GetSpecificFeature2();
                        object[] vSketchSeg = (object[])sketchSpc.GetSketchSegments();
                        List<(double[], double[])> 边线集 = new List<(double[], double[])>();
                        if (vSketchSeg != null)
                        {
                            for (int j = 0; j < vSketchSeg.Length; j++)
                            {
                                SketchSegment swSketchSeg = (SketchSegment)vSketchSeg[j];

                                //如果直线不是折弯线,说明是边界框
                                if (swSketchSeg.IsBendLine() == false)
                                {
                                    边界框.Add(Math.Round(swSketchSeg.GetLength() * 1000, 2));

                                }
                                else if (swSketchSeg.IsBendLine() == true)
                                {
                                    Curve curve = (Curve)swSketchSeg.GetCurve();
                                    double length = Math.Round(swSketchSeg.GetLength() * 1000, 1);
                                    var linep = (double[])curve.LineParams;

                                    double[] startp = new double[] { Math.Round(linep[0] * 1000, 1),
                                     Math.Round(linep[1] * 1000, 1)};
                                    double[] endp = new double[]
                                    { Math.Round(linep[0] * 1000, 1)+ linep[3]* length,
                                    Math.Round(linep[1] * 1000, 1)+ linep[4]* length};
                                    边线集.Add((startp, endp));
                                    double 折弯长度 = swSketchSeg.GetLength() * 1000;
                                    if (折弯长度 < 300) this.折弯次数1类++;
                                    if (300 <= 折弯长度 && 折弯长度 < 500) this.折弯次数2类++;
                                    if (500 <= 折弯长度) this.折弯次数3类++;


                                }
                            }
                        }


                        int 要做闭合角图纸边线要标焊接 = 0;
                        for (int ii = 0; ii < 边线集.Count; ii++)
                        {
                            (double[] startp, double[] endp) = 边线集[ii];
                            for (int ij = ii + 1; ij < 边线集.Count; ij++)
                            {
                                if (ij == ii) continue;
                                (double[] startp2, double[] endp2) = 边线集[ij];
                                if ((Math.Abs(startp2[0] - startp[0]) + Math.Abs(startp2[1] - startp[1])) < 5)
                                {
                                    要做闭合角图纸边线要标焊接++;
                                }
                                else if ((Math.Abs(startp2[0] - endp[0]) + Math.Abs(startp2[1] - endp[1])) < 5)
                                {
                                    要做闭合角图纸边线要标焊接++;
                                }

                                else if ((Math.Abs(startp[0] - endp2[0]) + Math.Abs(startp[1] - endp2[1])) < 5)
                                {
                                    要做闭合角图纸边线要标焊接++;
                                }
                                else if ((Math.Abs(endp2[0] - endp[0]) + Math.Abs(endp2[1] - endp[1])) < 5)
                                {
                                    要做闭合角图纸边线要标焊接++;
                                }


                            }


                        }

                        if (要做闭合角图纸边线要标焊接 - 段差收集 > 0) this.聊天记录 += ("要做闭合角图纸边线要标焊接" + "\n");
                        Console.WriteLine("接近点数=" + (要做闭合角图纸边线要标焊接 - 段差收集) + ",段差收集=" + 段差收集);

                    }
                    if (swBaseSubFeature.GetTypeName() == "UiBend")
                    {



                    }





                    swBaseSubFeature = (Feature)swBaseSubFeature.GetNextSubFeature();
                }


                if (边界框.Count > 1)
                {
                    边界框 = 边界框.GroupBy(x => x).Select(x => { Console.WriteLine("key:" + x.Key); return x.Key; }).ToList();
                    if (边界框.Count > 1)
                    {
                        边界框长 = 边界框[0]; 边界框宽 = 边界框[1];
                    }
                    else { 边界框长 = 边界框宽 = 边界框[0]; }
                }



                swFeature.SetSuppression((int)swFeatureSuppressionAction_e.swSuppressFeature);

            }
            else if (swFeature.GetTypeName2() == "ICE")
            {
                Console.WriteLine($"特征名称是{swFeature.Name}"
                + "ice特征名称为:" + swFeature.GetTypeName());
                IExtrudeFeatureData2 swFlatPatt = (IExtrudeFeatureData2)swFeature.GetDefinition();


                if (swFlatPatt.GetDepth(true) != 0 && swFlatPatt.GetDepth(true) * 1000 < thickness * 0.7)
                {
                    this.聊天记录 += ("存在防涂面:" + swFeature.Name + ",1deep:" + swFlatPatt.GetDepth(true) * 1000 + "\n");
                }

            }
            else if (swFeature.GetTypeName2() == "SolidToSheetMetal")
            {

                Feature swBaseSubFeature = (Feature)swFeature.GetFirstSubFeature();

                while ((swBaseSubFeature != null))
                {

                    Debug.WriteLine("SolidToSheetMetal:" + swBaseSubFeature.Name + " [" + swBaseSubFeature.GetTypeName() + "]");
                    if (swBaseSubFeature.GetTypeName() == "OneBend")
                    {
                        var OneBendFeature = (OneBendFeatureData)swBaseSubFeature.GetDefinition();
                        spa Bend = new IOneBendFeatureDataAdapter(OneBendFeature);
                        if (设折弯系数(ref Bend))
                        {
                            swBaseSubFeature.ModifyDefinition(OneBendFeature, swModel, null);
                        };

                    }
                    //需要解决转换钣金段差因子问题 offset



                    swBaseSubFeature = (Feature)swBaseSubFeature.GetNextSubFeature();
                }
            }

            else if (swFeature.GetTypeName2() == "Hem")
            {
                HemFeatureData swHem = default(HemFeatureData);
                CustomBendAllowance swCustBend = default(CustomBendAllowance);

                swHem = (HemFeatureData)swFeature.GetDefinition();
                swCustBend = swHem.GetCustomBendAllowance();
                //非90度收集 = 非90度收集 + ($"{swFeature.Name},折弯角度为{180}度\n折弯系数改为k{swCustBend.KFactor.ToString("F1")}" + "\n");


                swCustBend.Type = 2;
                swCustBend.KFactor = 0.5;
                swHem.UseDefaultBendAllowance = false;
                swHem.SetCustomBendAllowance(swCustBend);
                swFeature.ModifyDefinition(swHem, swModel, null);




            }

            else if (swFeature.GetTypeName2() == "SMMiteredFlange")

            {

                MiterFlangeFeatureData swBaseFlange = default(MiterFlangeFeatureData);
                swBaseFlange = (MiterFlangeFeatureData)swFeature.GetDefinition();
                Feature swBaseSubFeature = (Feature)swFeature.GetFirstSubFeature();

                while ((swBaseSubFeature != null))
                {

                    Debug.Print(swBaseSubFeature.Name + " [" + swBaseSubFeature.GetTypeName() + "]");
                    if (swBaseSubFeature.GetTypeName() == "SketchBend")
                    {

                        var OneBendFeature = (OneBendFeatureData)swBaseSubFeature.GetDefinition();
                        spa Bend = new IOneBendFeatureDataAdapter(OneBendFeature);

                        if (设折弯系数(ref Bend))
                        {

                            swBaseSubFeature.ModifyDefinition(OneBendFeature, swModel, null);
                        };


                    }


                    swBaseSubFeature = (Feature)swBaseSubFeature.GetNextSubFeature();
                }
            }
            else if (swFeature.GetTypeName2() == "LPattern")
            {


                Feature swBaseSubFeature = (Feature)swFeature.GetFirstSubFeature();

                while ((swBaseSubFeature != null))
                {

                    Debug.Print(swBaseSubFeature.Name + " [" + swBaseSubFeature.GetTypeName() + "]");
                    if (swBaseSubFeature.GetTypeName() == "OneBend")
                    {
                        var OneBendFeature = (OneBendFeatureData)swBaseSubFeature.GetDefinition();
                        spa Bend = new IOneBendFeatureDataAdapter(OneBendFeature);

                        if (设折弯系数(ref Bend))
                        {
                            swBaseSubFeature.ModifyDefinition(OneBendFeature, swModel, null);
                        };
                    }


                    swBaseSubFeature = (Feature)swBaseSubFeature.GetNextSubFeature();
                }
            }


            else if (swFeature.GetTypeName2() == "SM3dBend")
            {
                //SketchedBendFeatureData
                var OneBendFeature = (SketchedBendFeatureData)swFeature.GetDefinition();
                spa Bend = new SketchedBendFeatureDataAdapter(OneBendFeature);

                if (设折弯系数(ref Bend))
                {
                    swFeature.ModifyDefinition(OneBendFeature, swModel, null);

                };

            }
            else if (swFeature.GetTypeName2() == "Jog")//DUANCHA
            {
                JogFeatureData Jog = default(JogFeatureData);
                CustomBendAllowance swCustBend = default(CustomBendAllowance);

                Jog = (JogFeatureData)swFeature.GetDefinition();
                swCustBend = Jog.GetCustomBendAllowance();
                Jog.UseDefaultBendAllowance = false;
                swCustBend.Type = 4;

                swCustBend.BendDeduction = this.厚度mm * 3 / 2 / 1000;
                Jog.SetCustomBendAllowance(swCustBend);

                bool bRet2 = swFeature.ModifyDefinition(Jog, swModel, null);
            }
            else if (swFeature.GetTypeName2() == "CornerFeat")//DUANCHA
            {
                ClosedCornerFeatureData swCloseCorner = default(ClosedCornerFeatureData);
                swCloseCorner = (ClosedCornerFeatureData)swFeature.GetDefinition();
                if (swCloseCorner.GapDistance * 1000 < 0.5)
                    swCloseCorner.GapDistance = 0.5 / 1000;
                swFeature.ModifyDefinition(swCloseCorner, swModel, null);
             
            }
            else {
                Debug.WriteLine($"特征种类是{swFeature.GetTypeName2()},特征名称是{swFeature.Name}");
            }
         
           
            swFeature = (Feature)swFeature.GetNextFeature();
        }
       bool 设折弯系数(ref 子方法.spa Bend) {
           
            double 折弯角度, 折弯半径;
            bool 要更新=false;
            var swCustBend = Bend.GetCustomBendAllowance();
            折弯角度 = Bend.BendAngle;
            折弯半径 = Bend.BendRadius * 1000;
            if (Math.Round(折弯半径, 3) == 0)
            {
                Bend.BendRadius = 0.01 / 1000;
                要更新 = true;
            }
           
            double 角度转换2 = 折弯角度 * 180.0 / Math.PI;//弧度制 转角度制
            double 折弯相差值 = 折弯半径 * Math.Tan(折弯角度 / 2) * 2;
          
            if (Math.Abs(角度转换2 - 90) < 0.5)
            {
                if (Bend.UseDefaultBendAllowance == false)
                {
                    this.聊天记录 += ($"{swFeature.Name}  90度法兰有非默认折弯系数:" +
                        $"{(swCustBend.Type==2?"k因子 "+swCustBend.KFactor.ToString():("扣除 "+swCustBend.BendDeduction*1000+"mm"))}\n");
                    swCustBend.Type = 2;
                    swCustBend.KFactor = ((2 / Math.PI) * (2 * 折弯半径  + 折弯补偿) - 折弯半径) / this.厚度mm;
                    Bend.SetCustomBendAllowance(swCustBend);

                    要更新 = true;
                }
            }
            else if (Math.Abs(角度转换2 - 90) > 0.5) {
                Bend.UseDefaultBendAllowance = false;
                swCustBend.Type = 2;
                角度转换2 = 角度转换2 > 90 ? 180 - 角度转换2 : 角度转换2;
                swCustBend.KFactor = ((折弯补偿 + 折弯相差值 * 90 / 角度转换2) * 2 / Math.PI - 折弯半径) / thickness;
                非90度收集 = 非90度收集 + ($"{swFeature.Name},折弯角度为{(角度转换2).ToString("F1")}\n折弯系数改为k{swCustBend.KFactor.ToString("F3")}" + "\n");
              
                Bend.SetCustomBendAllowance(swCustBend);
                要更新 = true;
            }

            return 要更新;


        }

    
   
        if (段差收集 != 0) this.聊天记录 += ($"有{段差收集}处段差,工程图要标段差\n");
        if (边界框长==0) this.聊天记录 += ($"零件展不开\n");
        if ((边界框长 > 1400&& 边界框宽 > 600) || (边界框宽 > 1400&& 边界框长 > 600)) {
            this.校平工艺 = true;
        }
        this.长度mm = 边界框长;
        this.宽度mm = 边界框宽;
        
        if (非90度收集 != "") this.聊天记录 += ("工程图要标非90尺寸\n," + 非90度收集 + "\n");
        if (this.折弯次数1类!=0 || this.折弯次数2类!=0 || this.折弯次数3类!=0) this.折弯工艺 = true;
        if (长度mm > 0) this.下料工艺 = true;
        return true;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值