CAD软件:NX Aerospace二次开发_Python在NXAerospace中的应用

Python在NXAerospace中的应用

在上一节中,我们介绍了如何在NX Aerospace中进行基本的二次开发,包括使用NX Open API和C#进行编程。在这一节中,我们将重点关注如何使用Python在NX Aerospace中进行二次开发。Python是一种广泛使用的高级编程语言,以其简洁的语法和强大的库支持而著称。在NX Aerospace中,Python可以用于自动化任务、数据处理、几何建模和仿真分析等多种应用场景。

在这里插入图片描述

1. Python与NX Aerospace的集成

1.1 安装和配置Python环境

在开始使用Python进行NX Aerospace二次开发之前,首先需要确保Python环境已经正确安装和配置。NX支持Python 2.7和Python 3.7及更高版本。推荐使用Python 3.7及以上版本,因为它们提供了更多的库和更好的性能。

1.1.1 安装Python
  1. 下载Python安装包:访问Python官方网站 (https://www.python.org/),下载最新版本的Python安装包。

  2. 安装Python:运行下载的安装包,确保在安装过程中勾选“Add Python to PATH”选项,以便在命令行中可以直接调用Python。

1.1.2 配置NX中的Python环境
  1. 安装Python for Windows:NX Aerospace支持在Windows系统上使用Python。确保安装了适用于Windows的Python版本。

  2. 配置NX Python路径:打开NX Aerospace,进入“工具”菜单,选择“选项”,然后在“选项”对话框中找到“Python”选项卡,配置Python的安装路径。

1.2 连接Python与NX

NX Aerospace提供了Python接口,允许用户通过Python脚本与NX进行交互。以下是连接Python与NX的基本步骤:

  1. 导入必要的库

    
    import os
    
    import sys
    
    from nxopen import *
    
    
  2. 初始化NX会话

    
    the_session = Session.GetSession()
    
    
  3. 创建NX工作部件

    
    work_part = the_session.Parts.Work
    
    
  4. 执行NX命令

    
    the_ui = the_session.UserInterface
    
    the_ui.Dialogs.MessageDialogShow("Hello, NX Aerospace!")
    
    

1.3 Python脚本的执行方式

在NX Aerospace中,Python脚本可以通过多种方式执行:

  1. 通过NX的命令行

    在NX的命令行中输入以下命令来运行Python脚本:

    
    nxpython <script_path>
    
    
  2. 通过NX的“工具”菜单

    选择“工具”菜单中的“运行”选项,然后选择“Python脚本”来运行脚本。

  3. 通过NX的用户界面

    可以将Python脚本集成到NX的用户界面中,通过按钮或其他UI元素来触发脚本的执行。

2. Python在NX Aerospace中的基本应用

2.1 创建几何模型

Python可以用于在NX Aerospace中创建复杂的几何模型。以下是一个简单的例子,展示如何使用Python创建一个圆柱体:

2.1.1 代码示例

import os

import sys

from nxopen import *



# 初始化NX会话

the_session = Session.GetSession()

work_part = the_session.Parts.Work



# 创建圆柱体

def create_cylinder(diameter, height, position):

    """

    创建一个圆柱体

    :param diameter: 圆柱体直径

    :param height: 圆柱体高度

    :param position: 圆柱体中心位置 (x, y, z)

    """

    # 创建点

    center_point = work_part.Points.CreatePoint(Position(position[0], position[1], position[2]))

    

    # 创建圆

    circle = work_part.Curves.CreateCircle(center_point, Position(0, 0, 1), diameter / 2)

    

    # 创建平面

    plane = work_part.Planes.CreatePlane(center_point, Position(0, 0, 1))

    

    # 创建拉伸特征

    extrude = work_part.Features.CreateExtrudeFeature(circle, height, False)

    

    # 更新工作部件

    work_part.Update()



# 调用函数创建圆柱体

create_cylinder(10, 20, (0, 0, 0))

2.2 数据处理和分析

Python在数据处理和分析方面具有强大的能力,可以用于处理NX Aerospace中的仿真数据、测量数据等。

2.2.1 代码示例

假设我们有一个包含测量数据的CSV文件,我们可以通过Python读取这些数据并进行简单的分析:


import os

import sys

import csv

from nxopen import *



# 读取CSV文件

def read_csv(file_path):

    """

    读取CSV文件并返回数据

    :param file_path: CSV文件路径

    :return: 数据列表

    """

    data = []

    with open(file_path, 'r') as file:

        reader = csv.reader(file)

        next(reader)  # 跳过标题行

        for row in reader:

            data.append([float(val) for val in row])

    return data



# 分析数据

def analyze_data(data):

    """

    分析数据并返回平均值和标准差

    :param data: 数据列表

    :return: 平均值和标准差

    """

    import statistics

    values = [row[1] for row in data]  # 假设第二列是测量值

    mean = statistics.mean(values)

    stdev = statistics.stdev(values)

    return mean, stdev



# 将分析结果写入NX注释

def write_results(mean, stdev):

    """

    将分析结果写入NX注释

    :param mean: 平均值

    :param stdev: 标准差

    """

    the_session = Session.GetSession()

    the_ui = the_session.UserInterface

    the_ui.Dialogs.MessageDialogShow(f"平均值: {mean}, 标准差: {stdev}")



# 主函数

def main():

    file_path = "C:\\path\\to\\your\\data.csv"

    data = read_csv(file_path)

    mean, stdev = analyze_data(data)

    write_results(mean, stdev)



if __name__ == "__main__":

    main()

2.3 自动化任务

Python可以用于自动化NX Aerospace中的各种任务,例如批处理文件、生成报告等。

2.3.1 代码示例

假设我们需要批量处理多个NX文件,将每个文件中的特定特征导出为STEP文件:


import os

import sys

from nxopen import *



# 导出STEP文件

def export_step(file_path, feature_name):

    """

    导出指定特征为STEP文件

    :param file_path: NX文件路径

    :param feature_name: 特征名称

    """

    the_session = Session.GetSession()

    work_part = the_session.Parts.Work

    

    # 打开NX文件

    the_session.OpenFile(file_path)

    

    # 查找指定特征

    feature = work_part.Features.GetFeatureByName(feature_name)

    if feature is None:

        the_session.UserInterface.Dialogs.MessageDialogShow("特征未找到")

        return

    

    # 创建STEP导出选项

    step_export_options = work_part.STEPExportOptions.Create()

    step_export_options.SetIncludeGeometry(True)

    step_export_options.SetIncludeModel(True)

    step_export_options.SetIncludePMI(False)

    

    # 导出STEP文件

    step_file_path = os.path.splitext(file_path)[0] + "_export.step"

    work_part.STEPExportFeature(feature, step_file_path, step_export_options)

    

    # 关闭文件

    the_session.CloseFile()



# 批处理文件

def batch_export(directory, feature_name):

    """

    批处理目录中的所有NX文件

    :param directory: 文件目录

    :param feature_name: 特征名称

    """

    for filename in os.listdir(directory):

        if filename.endswith(".prt"):

            file_path = os.path.join(directory, filename)

            export_step(file_path, feature_name)



# 主函数

def main():

    directory = "C:\\path\\to\\your\\nx_files"

    feature_name = "Cylinder_1"

    batch_export(directory, feature_name)



if __name__ == "__main__":

    main()

3. Python在NX Aerospace中的高级应用

3.1 几何建模的高级技术

Python可以用于创建更复杂的几何模型,例如参数化建模、几何优化等。

3.1.1 参数化建模

参数化建模允许用户通过改变参数来自动调整模型。以下是一个简单的例子,展示如何创建一个参数化的圆柱体:


import os

import sys

from nxopen import *



# 初始化NX会话

the_session = Session.GetSession()

work_part = the_session.Parts.Work



# 创建参数

diameter_param = work_part.Parameters.CreateDoubleParameter("diameter", 10.0, "mm")

height_param = work_part.Parameters.CreateDoubleParameter("height", 20.0, "mm")

position_param = work_part.Parameters.CreatePointParameter("position", Position(0, 0, 0))



# 创建圆柱体

def create_parametric_cylinder(diameter_param, height_param, position_param):

    """

    创建一个参数化的圆柱体

    :param diameter_param: 直径参数

    :param height_param: 高度参数

    :param position_param: 位置参数

    """

    # 获取参数值

    diameter = diameter_param.Value

    height = height_param.Value

    position = position_param.Value

    

    # 创建点

    center_point = work_part.Points.CreatePoint(position)

    

    # 创建圆

    circle = work_part.Curves.CreateCircle(center_point, Position(0, 0, 1), diameter / 2)

    

    # 创建平面

    plane = work_part.Planes.CreatePlane(center_point, Position(0, 0, 1))

    

    # 创建拉伸特征

    extrude = work_part.Features.CreateExtrudeFeature(circle, height, False)

    

    # 更新工作部件

    work_part.Update()



# 调用函数创建参数化的圆柱体

create_parametric_cylinder(diameter_param, height_param, position_param)

3.2 仿真分析的高级技术

Python可以用于自动化仿真分析任务,例如设置仿真参数、运行仿真、提取仿真结果等。

3.2.1 代码示例

假设我们需要设置一个结构仿真分析,运行仿真并提取结果:


import os

import sys

from nxopen import *

from nxopen.cae import *



# 初始化NX会话

the_session = Session.GetSession()

work_part = the_session.Parts.Work



# 设置仿真参数

def set_simulation_parameters(part, load, constraint):

    """

    设置仿真参数

    :param part: 工作部件

    :param load: 载荷

    :param constraint: 约束

    """

    # 创建仿真模型

    sim_model = part.CAE.CreateSimulationModel()

    

    # 添加载荷

    load_feature = sim_model.Features.CreateLoadFeature(load)

    

    # 添加约束

    constraint_feature = sim_model.Features.CreateConstraintFeature(constraint)

    

    # 更新仿真模型

    sim_model.Update()



# 运行仿真

def run_simulation(sim_model):

    """

    运行仿真

    :param sim_model: 仿真模型

    """

    sim_model.StartSimulation()



# 提取仿真结果

def extract_simulation_results(sim_model):

    """

    提取仿真结果

    :param sim_model: 仿真模型

    :return: 仿真结果

    """

    results = sim_model.GetResults()

    displacement = results.GetDisplacement()

    stress = results.GetStress()

    return displacement, stress



# 主函数

def main():

    # 假设已经有一个包含几何模型的部件

    part = work_part

    

    # 设置载荷和约束

    load = part.CAE.CreateLoad(Position(0, 0, 1000))

    constraint = part.CAE.CreateConstraint(Position(0, 0, 0))

    set_simulation_parameters(part, load, constraint)

    

    # 运行仿真

    run_simulation(part.CAE.SimulationModel)

    

    # 提取仿真结果

    displacement, stress = extract_simulation_results(part.CAE.SimulationModel)

    the_session.UserInterface.Dialogs.MessageDialogShow(f"位移: {displacement}, 应力: {stress}")



if __name__ == "__main__":

    main()

3.3 三维模型的可视化

Python可以用于在NX Aerospace中进行三维模型的可视化,例如创建自定义的三维图形、动画等。

3.3.1 代码示例

假设我们需要创建一个自定义的三维图形来展示模型的变形情况:


import os

import sys

from nxopen import *

from nxopen.ui import *



# 初始化NX会话

the_session = Session.GetSession()

work_part = the_session.Parts.Work

the_ui = the_session.UserInterface



# 创建变形图形

def create_deformed_shape(part, displacement):

    """

    创建变形图形

    :param part: 工作部件

    :param displacement: 位移数据

    """

    # 获取模型的几何特征

    features = part.GetFeatures()

    

    # 创建变形图形

    deformed_shape = part.Views.CreateDeformedShapeView(features, displacement)

    

    # 显示变形图形

    the_ui.WorkPartViews.ShowView(deformed_shape)



# 主函数

def main():

    # 假设已经有一个包含几何模型的部件

    part = work_part

    

    # 获取仿真结果中的位移数据

    sim_model = part.CAE.SimulationModel

    displacement = sim_model.GetResults().GetDisplacement()

    

    # 创建变形图形

    create_deformed_shape(part, displacement)



if __name__ == "__main__":

    main()

4. Python在NX Aerospace中的实践案例

4.1 飞机翼型设计

Python可以用于飞机翼型的设计和优化。以下是一个简单的例子,展示如何使用Python设计一个基本的飞机翼型。

4.1.1 代码示例

import os

import sys

from nxopen import *

from nxopen.features import *



# 初始化NX会话

the_session = Session.GetSession()

work_part = the_session.Parts.Work



# 创建翼型

def create_wing_profile(airfoil_data):

    """

    创建飞机翼型

    :param airfoil_data: 翼型数据 (x, y, z)

    """

    # 创建点

    points = []

    for x, y, z in airfoil_data:

        point = work_part.Points.CreatePoint(Position(x, y, z))

        points.append(point)

    

    # 创建样条曲线

    spline = work_part.Curves.CreateSpline(points)

    

    # 创建翼型轮廓

    profile = work_part.Features.CreateProfile(spline)

    

    # 更新工作部件

    work_part.Update()



# 生成翼型数据

def generate_airfoil_data():

    """

    生成翼型数据

    :return: 翼型数据列表

    """

    # 假设这是一个简单的NACA 0012翼型

    data = [

        (0.0, 0.0, 0.0),

        (0.01, 0.0066, 0.0),

        (0.02, 0.0128, 0.0),

        (0.03, 0.0186, 0.0),

        (0.04, 0.0242, 0.0),

        (0.05, 0.0295, 0.0),

        (0.06, 0.0345, 0.0),

        (0.07, 0.0393, 0.0),

        (0.08, 0.0439, 0.0),

        (0.09, 0.0482, 0.0),

        (0.1, 0.0523, 0.0),

        (0.15, 0.0799, 0.0),

        (0.2, 0.1055, 0.0),

        (0.25, 0.1282, 0.0),

        (0.3, 0.1476, 0.0),

        (0.35, 0.1634, 0.0),

        (0.4, 0.1745, 0.0),

        (0.45, 0.1795, 0.0),

        (0.5, 0.1776, 0.0),

        (0.55, 0.1681, 0.0),

        (0.6, 0.1499, 0.0),

        (0.65, 0.1231, 0.0),

        (0.7, 0.0874, 0.0),

        (0.75, 0.0423, 0.0),

        (0.8, 0.0000, 0.0),

        (0.9, -0.0423, 0.0),

        (1.0, -0.1231, 0.0)

    ]

    return data



# 主函数

def main():

    airfoil_data = generate_airfoil_data()

    create_wing_profile(airfoil_data)



if __name__ == "__main__":

    main()

4.2 仿真优化

Python可以用于自动化仿真优化过程,例如通过遗传算法进行结构优化。

4.2.1 代码示例

import os

import sys

from nxopen import *

from nxopen.cae import *

import random



# 初始化NX会话

the_session = Session.GetSession()

work_part = the_session.Parts.Work

the_ui = the_session.UserInterface



# 创建优化模型

def create_optimization_model(part, load, constraint):

    """

    创建优化模型

    :param part: 工作部件

    :param load: 载荷

    :param## 4. Python在NX Aerospace中的实践案例



### 4.2 仿真优化



Python可以用于自动化仿真优化过程,例如通过遗传算法进行结构优化。以下是一个简单的例子,展示如何使用Python进行结构优化。



#### 4.2.1 代码示例



```python

import os

import sys

from nxopen import *

from nxopen.cae import *

import random



# 初始化NX会话

the_session = Session.GetSession()

work_part = the_session.Parts.Work

the_ui = the_session.UserInterface



# 创建优化模型

def create_optimization_model(part, load, constraint):

    """

    创建优化模型

    :param part: 工作部件

    :param load: 载荷

    :param constraint: 约束

    """

    # 创建仿真模型

    sim_model = part.CAE.CreateSimulationModel()

    

    # 添加载荷

    load_feature = sim_model.Features.CreateLoadFeature(load)

    

    # 添加约束

    constraint_feature = sim_model.Features.CreateConstraintFeature(constraint)

    

    # 更新仿真模型

    sim_model.Update()

    

    return sim_model



# 运行仿真

def run_simulation(sim_model):

    """

    运行仿真

    :param sim_model: 仿真模型

    """

    sim_model.StartSimulation()



# 提取仿真结果

def extract_simulation_results(sim_model):

    """

    提取仿真结果

    :param sim_model: 仿真模型

    :return: 仿真结果

    """

    results = sim_model.GetResults()

    displacement = results.GetDisplacement()

    stress = results.GetStress()

    return displacement, stress



# 评估模型性能

def evaluate_model(part, load, constraint):

    """

    评估模型性能

    :param part: 工作部件

    :param load: 载荷

    :param constraint: 约束

    :return: 位移和应力

    """

    sim_model = create_optimization_model(part, load, constraint)

    run_simulation(sim_model)

    displacement, stress = extract_simulation_results(sim_model)

    return displacement, stress



# 遗传算法优化

def genetic_algorithm_optimization(part, load, constraint, population_size=10, generations=5, mutation_rate=0.1):

    """

    使用遗传算法进行结构优化

    :param part: 工作部件

    :param load: 载荷

    :param constraint: 约束

    :param population_size: 种群大小

    :param generations: 迭代次数

    :param mutation_rate: 变异率

    :return: 最优模型参数

    """

    # 定义参数范围

    diameter_range = (5, 15)

    height_range = (10, 30)

    

    # 初始化种群

    population = []

    for _ in range(population_size):

        diameter = random.uniform(diameter_range[0], diameter_range[1])

        height = random.uniform(height_range[0], height_range[1])

        population.append((diameter, height))

    

    # 评估初始种群

    fitness = []

    for params in population:

        diameter, height = params

        create_parametric_cylinder(diameter, height, Position(0, 0, 0))

        displacement, stress = evaluate_model(part, load, constraint)

        fitness.append((params, displacement, stress))

    

    # 遗传算法主循环

    for generation in range(generations):

        # 选择最优个体

        fitness.sort(key=lambda x: x[1])  # 按位移排序

        new_population = [fitness[0][0], fitness[1][0]]  # 选择前两个最优个体

        

        # 交叉

        for _ in range(population_size - 2):

            parent1 = random.choice(fitness[:5])

            parent2 = random.choice(fitness[:5])

            child = crossover(parent1[0], parent2[0], diameter_range, height_range)

            new_population.append(child)

        

        # 变异

        for i in range(len(new_population)):

            if random.random() < mutation_rate:

                new_population[i] = mutate(new_population[i], diameter_range, height_range)

        

        # 评估新种群

        fitness = []

        for params in new_population:

            diameter, height = params

            create_parametric_cylinder(diameter, height, Position(0, 0, 0))

            displacement, stress = evaluate_model(part, load, constraint)

            fitness.append((params, displacement, stress))

    

    # 返回最优个体

    fitness.sort(key=lambda x: x[1])

    return fitness[0]



# 交叉操作

def crossover(parent1, parent2, diameter_range, height_range):

    """

    交叉操作

    :param parent1: 第一个父代

    :param parent2: 第二个父代

    :param diameter_range: 直径范围

    :param height_range: 高度范围

    :return: 子代

    """

    diameter = (parent1[0] + parent2[0]) / 2

    height = (parent1[1] + parent2[1]) / 2

    return (diameter, height)



# 变异操作

def mutate(params, diameter_range, height_range):

    """

    变异操作

    :param params: 参数

    :param diameter_range: 直径范围

    :param height_range: 高度范围

    :return: 变异后的参数

    """

    diameter, height = params

    if random.random() < 0.5:

        diameter += random.uniform(-1, 1)

        diameter = max(min(diameter, diameter_range[1]), diameter_range[0])

    else:

        height += random.uniform(-1, 1)

        height = max(min(height, height_range[1]), height_range[0])

    return (diameter, height)



# 主函数

def main():

    # 假设已经有一个包含几何模型的部件

    part = work_part

    

    # 设置载荷和约束

    load = part.CAE.CreateLoad(Position(0, 0, 1000))

    constraint = part.CAE.CreateConstraint(Position(0, 0, 0))

    

    # 进行优化

    optimal_params = genetic_algorithm_optimization(part, load, constraint)

    

    # 显示最优参数

    the_ui.Dialogs.MessageDialogShow(f"最优参数: 直径 {optimal_params[0][0]}, 高度 {optimal_params[0][1]}, 位移 {optimal_params[1]}, 应力 {optimal_params[2]}")



if __name__ == "__main__":

    main()

4.3 自动化报告生成

Python可以用于自动化生成仿真分析报告,例如提取仿真结果并生成PDF或HTML报告。

4.3.1 代码示例

import os

import sys

from nxopen import *

from nxopen.cae import *

from fpdf import FPDF



# 初始化NX会话

the_session = Session.GetSession()

work_part = the_session.Parts.Work

the_ui = the_session.UserInterface



# 创建仿真模型

def create_simulation_model(part, load, constraint):

    """

    创建仿真模型

    :param part: 工作部件

    :param load: 载荷

    :param constraint: 约束

    :return: 仿真模型

    """

    sim_model = part.CAE.CreateSimulationModel()

    load_feature = sim_model.Features.CreateLoadFeature(load)

    constraint_feature = sim_model.Features.CreateConstraintFeature(constraint)

    sim_model.Update()

    return sim_model



# 运行仿真

def run_simulation(sim_model):

    """

    运行仿真

    :param sim_model: 仿真模型

    """

    sim_model.StartSimulation()



# 提取仿真结果

def extract_simulation_results(sim_model):

    """

    提取仿真结果

    :param sim_model: 仿真模型

    :return: 位移和应力

    """

    results = sim_model.GetResults()

    displacement = results.GetDisplacement()

    stress = results.GetStress()

    return displacement, stress



# 生成PDF报告

def generate_pdf_report(displacement, stress, report_path):

    """

    生成PDF报告

    :param displacement: 位移

    :param stress: 应力

    :param report_path: 报告路径

    """

    pdf = FPDF()

    pdf.add_page()

    pdf.set_font("Arial", size=12)

    

    # 添加标题

    pdf.cell(200, 10, txt="仿真分析报告", ln=True, align="C")

    

    # 添加位移和应力信息

    pdf.cell(200, 10, txt=f"位移: {displacement}", ln=True, align="L")

    pdf.cell(200, 10, txt=f"应力: {stress}", ln=True, align="L")

    

    # 保存PDF文件

    pdf.output(report_path)



# 主函数

def main():

    # 假设已经有一个包含几何模型的部件

    part = work_part

    

    # 设置载荷和约束

    load = part.CAE.CreateLoad(Position(0, 0, 1000))

    constraint = part.CAE.CreateConstraint(Position(0, 0, 0))

    

    # 创建仿真模型

    sim_model = create_simulation_model(part, load, constraint)

    

    # 运行仿真

    run_simulation(sim_model)

    

    # 提取仿真结果

    displacement, stress = extract_simulation_results(sim_model)

    

    # 生成报告

    report_path = "C:\\path\\to\\your\\report.pdf"

    generate_pdf_report(displacement, stress, report_path)

    

    # 显示报告路径

    the_ui.Dialogs.MessageDialogShow(f"报告已生成: {report_path}")



if __name__ == "__main__":

    main()

5. 总结

在这一节中,我们详细介绍了如何使用Python在NX Aerospace中进行二次开发。Python的简洁语法和强大的库支持使得它成为处理复杂任务的理想选择。通过Python,我们可以实现自动化任务、数据处理和分析、几何建模、仿真分析以及报告生成等多种功能。希望这些示例能够帮助你在NX Aerospace中更高效地使用Python进行开发和优化工作。

5.1 进一步学习资源

  1. 官方文档:访问NX Open的官方文档 (https://docs.plm.automation.siemens.com/) 获取更多关于NX Open API和Python集成的详细信息。

  2. 在线教程:有许多在线教程和课程可以帮助你深入学习Python编程和NX Aerospace的二次开发。

  3. 社区支持:加入NX Aerospace和Python的社区,与其他开发者交流经验和解决方案。

5.2 实践建议

  1. 从小到大:从简单的任务开始,逐步增加复杂度,熟悉NX Open API和Python的集成。

  2. 调试工具:使用Python的调试工具,如pdb,来帮助你调试代码。

  3. 版本管理:使用版本控制系统(如Git)来管理你的代码,方便回溯和协作。

通过不断学习和实践,你将能够在NX Aerospace中更高效地使用Python进行开发和优化,从而提高工作效率和项目质量。希望这篇文章对你有所帮助,祝你在NX Aerospace的开发之旅中取得成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kkchenjj

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值