30、3D 实体创建与绘制全解析

3D实体创建与布尔运算详解

3D 实体创建与绘制全解析

在 3D 绘图领域,创建和组合各种实体是构建复杂模型的基础。本文将详细介绍如何添加单个实体、组合它们形成复杂实体,以及通过不同方法创建自定义实体,同时还会涉及边缘处理的相关技巧。

绘制椭圆圆柱体

在绘制椭圆圆柱体的过程中,代码的每一行都有其特定的功能。以下是对代码步骤的详细分析:
1. 变量声明 :在第 6 行,将 CylinderHeight 变量声明为 Double 类型,以便接收第 11 行 GetDistance 方法返回的双精度值。
2. With 语句 :第 7 行开始使用 With 语句,这样可以在不使用完整限定名的情况下调用 Utility 对象的方法。
3. 获取中心点 :第 8 行将 GetPoint 方法返回的点赋值给 CylinderCenter 变量。
4. 修改提示信息 :第 9 和 10 行将提示用户输入半径的信息替换为提示输入定义椭圆的 x 和 y 距离。
5. 获取高度 :第 11 行将 GetDistance 方法返回的值赋给 CylinderHeight 变量。
6. 结束 With 语句 :第 12 行结束 With 语句。
7. 设置轮廓线数量 :第 13 行将 ContourLinesPerSurface 变量设置为 12。
8. 计算中心点的 y 值 :第 14 行计算圆柱体中心点的 y 值。
9. 添加椭圆圆柱体 :第 15 行调用 AddEllipticalCylinder 方法,用 x 和 y 距离替换 AddCylinder 方法中的半径参数。
10. 重新生成圆柱体 :第 16 行重新生成圆柱体,确保当前版本显示在模型空间中。
11. 更改视图方向 :第 17 行调用 ChangeViewDirection 宏,确保圆柱体不会显示为二维矩形。
12. 结束宏 :第 18 行结束 DrawEllipticalCylinder 宏。

构建复杂实体

在创建了各种单个实体后,下一步就是将它们组合起来形成更复杂的实体。下面介绍 CombinePrimitives 宏的具体实现:

Public Sub CombinePrimitives()
    Dim BoxObject As Acad3DSolid
    Dim BoxCenter(0 To 2) As Double
    Dim BoxLength As Double, BoxWidth As Double
    Dim BoxHeight As Double
    Dim CylinderObject As Acad3DSolid
    Dim CylinderCenter(0 To 2) As Double
    Dim CylinderXDistance As Double, CylinderYDistance As Double
    Dim CylinderHeight As Double
    BoxCenter(0) = 0#: BoxCenter(1) = 0#: BoxCenter(2) = 0#
    BoxLength = 5#: BoxWidth = 5#: BoxHeight = 5#
    Set BoxObject = ThisDrawing.ModelSpace.AddBox(BoxCenter, BoxLength, BoxWidth, BoxHeight)
    CylinderCenter(0) = 0#: CylinderCenter(1) = 0#: CylinderCenter(2) = 0#
    CylinderXDistance = 2#
    CylinderYDistance = 3#
    CylinderHeight = 4#
    Set CylinderObject = ThisDrawing.ModelSpace.AddEllipticalCylinder(CylinderCenter, CylinderXDistance, CylinderYDistance, CylinderHeight)
    ChangeViewDirection
    BoxObject.Boolean acUnion, CylinderObject
    ThisDrawing.Regen acActiveViewport
End Sub

该宏的具体步骤如下:
1. 开始宏 :第 1 行开始 CombinePrimitives 宏,它创建一个盒子和一个椭圆圆柱体,然后使用 AutoCAD 中的布尔运算将它们组合起来。
2. 声明盒子相关变量 :第 2 到 5 行包含创建盒子实体所需的所有声明。
3. 声明圆柱体相关变量 :第 6 到 9 行包含创建圆柱体实体所需的所有声明。
4. 创建盒子实体 :第 10 到 12 行指定盒子实体的位置和尺寸,并创建它。
5. 创建圆柱体实体 :第 13 到 17 行指定圆柱体实体的位置和尺寸,并创建它。
6. 更改视图方向 :第 18 行调用 ChangeViewDirection 宏,更改查看复杂实体的角度。
7. 调用布尔方法 :第 19 行调用盒子实体的 Boolean 方法,第一个参数 acUnion 表示所需的布尔运算符,第二个参数 CylinderObject 表示要与盒子实体组合的实体。也可以将其他枚举常量 acIntersection acSubtraction 作为第一个参数传递。
8. 重新生成视图 :第 20 行重新生成活动视口,以显示使用布尔运算符组合的两个实体。
9. 结束宏 :第 21 行结束 CombinePrimitives 宏。

判断两个实体是否相交

如果只想测试两个实体是否相交,而不实际执行相交操作,可以使用 VBA 中 3DSolid 对象的 CheckInterference 方法。在 CombinePrimitives 宏中,将第 19 行(调用 Boolean 方法的行)替换为以下两行代码:

Dim ThreeDSolid As Acad3DSolid, ObjectsIntersect As Boolean
Set ThreeDSolid = BoxObject.CheckInterference(CylinderObject, ObjectsIntersect)

在这个例子中, ThreeDSolid 变量将被赋值为两个表面的相交区域,如果它们不相交则为 Nothing 。也可以测试作为第二个参数传递的布尔变量 ObjectsIntersect 的值。

自定义实体创建

通过平移扫掠(挤压)和旋转扫掠(旋转)可以创建自定义实体,这两种方法分别适用于不同类型的对象。

通过挤压创建实体

挤压是将二维轮廓沿 z 轴方向平移,从而将其转换为三维实体的过程。以下是通过挤压创建实体的具体步骤:
1. 在 AutoCAD 窗口中绘制一个矩形。
2. 选择“绘图”➜“实体”➜“挤压”。
3. 当命令行提示选择对象时,选择矩形并按 Enter 键。
4. 通过点击定义与挤压高度相同长度的线段的两个点来输入挤压高度。
5. 当提示输入挤压锥角时,按 Enter 键接受默认的 0 锥角。此时矩形将显示为盒子形状。

也可以通过宏来实现挤压操作,以下是 DrawExtrudedSolid 宏的代码:

Sub DrawExtrudedSolid()
    Dim SolidObject As Acad3DSolid
    Dim RegionObject As Variant
    Dim Height As Double
    Dim TaperAngle As Double
    GetShape
    CloseShape
    RegionObject = ThisDrawing.ModelSpace.AddRegion(PolygonObject)
    Height = 3
    TaperAngle = 0
    Set SolidObject = ThisDrawing.ModelSpace.AddExtrudedSolid(RegionObject(0), Height, TaperAngle)
    ChangeViewDirection
    ZoomAll
End Sub

该宏的具体步骤如下:
1. 开始宏 :第 1 行开始 DrawExtrudedSolid 宏,它调用 GetShape CloseShape 宏提示用户输入定义多边形的点,然后关闭多边形并将输入的点扩展为三维多面体。
2. 声明变量 :第 2 行声明 SolidObject 变量,使其能够引用 3DSolid 对象;第 3 行声明 RegionObject 变量为 Variant 类型,以便接收 AddRegion 方法返回的数组;第 4 和 5 行声明 Height TaperAngle 变量,分别用于存储挤压的长度和锥角。
3. 调用宏 :第 6 和 7 行调用 GetShape CloseShape 宏。
4. 创建区域对象 :第 8 行调用 AddRegion 方法,将 PolygonObject 作为参数传递,该方法为 PolygonObject 数组中的每个封闭环创建一个单独的区域对象数组,并将其赋值给 RegionObject 变量。
5. 设置挤压参数 :第 9 行将 Height 变量赋值为 3,确定沿 z 轴的挤压距离;第 10 行将 TaperAngle 变量赋值为 0,表示不进行锥化。
6. 创建挤压实体 :第 11 行调用 AddExtrudedSolid 方法,根据平面区域、给定高度和指定锥角创建挤压实体。
7. 更改视图方向 :第 12 行调用 ChangeViewDirection 宏。
8. 缩放全视图 :第 13 行调用 ZoomAll 方法,确保整个绘图显示在视图中。
9. 结束宏 :第 14 行结束 DrawExtrudedSolid 宏。

挤压实体的锥化

在挤压实体时可以包含锥化效果。使用前面“通过挤压创建实体”中描述的相同“挤压”命令,在第 5 步提示输入挤压锥角时输入 30,矩形将显示出锥化效果。

如果要通过宏实现挤压实体的锥化,只需将 DrawExtrudedSolid 宏的第 10 行修改为:

TaperAngle = 10 * Pi / 180

TaperAngle 的值必须在 -π/2 到 +π/2 的弧度范围内。当 TaperAngle 为负时,实体从底部向外锥化;当为正时,实体向内锥化。

通过旋转创建实体

旋转实体是通过将平面轮廓绕任意轴旋转,收集轮廓在规则间隔内经过的点而创建的。以下是 DrawRevolvedSolid 宏的代码:

Public Sub DrawRevolvedSolid()
    Dim SolidObject As Acad3DSolid
    Dim RegionObject As Variant
    Dim AxisPoint(0 To 2) As Double
    Dim AxisDirection(0 To 2) As Double
    Dim Angle As Double
    GetShape
    CloseShape
    RegionObject = ThisDrawing.ModelSpace.AddRegion(PolygonObject)
    AxisPoint(0) = 0#: AxisPoint(1) = 0#: AxisPoint(2) = 0#
    AxisDirection(0) = 1#: AxisDirection(1) = 1#: AxisDirection(2) = 0#
    Angle = 360# * Pi / 180
    ThisDrawing.Preferences.ContourLinesPerSurface = 12
    Set SolidObject = ThisDrawing.ModelSpace.AddRevolvedSolid(RegionObject(0), AxisPoint, AxisDirection, Angle)
    ChangeViewDirection
    ZoomAll
End Sub

该宏的具体步骤如下:
1. 开始宏 :第 1 行开始 DrawRevolvedSolid 宏,它调用 GetShape CloseShape 宏获取一个封闭形状,然后将其绕 x-y 平面中的对角线以 45° 为步长旋转。
2. 声明变量 :第 2 行声明 SolidObject 变量,使其能够引用 3DSolid 对象;第 3 行声明 RegionObject Variant 类型,允许在单个语句中接收 AddRegion 方法返回的数组的所有元素;第 4 和 5 行声明 AxisPoint AxisDirection 数组,用于定义旋转的任意轴;第 6 行声明轮廓旋转的角度。
3. 调用宏 :第 7 和 8 行调用 GetShape CloseShape 宏,与用户交互以生成封闭的轮廓形状。
4. 创建区域对象 :第 9 行调用 AddRegion 方法,为传递给它的 PolygonObject 数组中的每个封闭环创建一个区域对象数组,并将 RegionObject 赋值为该方法返回的包含区域对象的数组。
5. 设置旋转轴 :第 10 行将世界坐标系原点的坐标赋值给 AxisPoint 数组;第 11 行将 x-y 平面的对角线赋值给 AxisDirection 数组。
6. 设置旋转角度 :第 12 行将 360° 转换为弧度后赋值给 Angle 变量。
7. 设置轮廓线数量 :第 13 行将 ContourLinesPerSurface 属性赋值为 12,使每个点以 30° 为步长旋转,默认值为 4,会使旋转后的形状类似盒子。
8. 创建旋转实体 :第 14 行调用 AddRevolvedSolid 方法,使用包含所有区域对象的 RegionObject 变量将轮廓绕旋转轴旋转。
9. 更改视图方向 :第 15 行调用 ChangeViewDirection 宏,以便从更好的视角查看旋转后的形状。
10. 缩放全视图 :第 16 行调用 ZoomAll 方法,确保整个形状显示在模型空间中。
11. 结束宏 :第 17 行结束 DrawRevolvedSolid 宏。

边缘处理

在 AutoCAD 中,“修改”菜单下的“倒角”和“圆角”命令可以对边缘和角落进行处理。

模拟倒角

虽然没有直接与 AutoCAD“倒角”命令关联的 Chamfer 方法,但可以通过代码模拟该命令的效果。以下是 SimulateChamfer 宏的代码:

Const Distance1 = 2
Const Distance2 = 0.75
Public Sub SimulateChamfer()
    Dim Line1Start(0 To 2) As Double, Line1End(0 To 2) As Double
    Dim Line2Start(0 To 2) As Double, Line2End(0 To 2) As Double
    Line1Start(0) = 1: Line1Start(1) = 1: Line1Start(2) = 0
    Line2Start(0) = 0.9: Line2Start(1) = 1.1: Line2Start(2) = 0
    Line1End(0) = 1: Line1End(1) = 4: Line1End(2) = 0
    Line2End(0) = 4: Line2End(1) = 1.1: Line2End(2) = 0
    'perform chamfer
    Line1Start(1) = Line1Start(1) + Distance1
    Line2Start(0) = Line2Start(0) + Distance2
    ThisDrawing.ModelSpace.AddLine Line1Start, Line1End
    ThisDrawing.ModelSpace.AddLine Line2Start, Line2End
    ThisDrawing.ModelSpace.AddLine Line1Start, Line2Start
    ThisDrawing.Regen acActiveViewport
    ZoomAll
End Sub

该宏的具体步骤如下:
1. 声明距离常量 :第 1 和 2 行声明倒角所需的两个距离常量。
2. 开始宏 :第 4 行开始 SimulateChamfer 宏。
3. 声明线条数组 :第 5 和 6 行声明包含要倒角的两条线的起点和终点的数组。
4. 设置线条坐标 :第 7 到 10 行将定义两条线的坐标赋值给数组。
5. 执行倒角操作 :第 12 行将 Distance1 加到 Line1 的起点的 y 坐标上;第 13 行将 Distance2 加到 Line2 的起点的 x 坐标上。
6. 添加线条 :第 14 和 15 行将两条线添加到模型空间中的对象中。
7. 添加倒角线 :第 16 行添加两条线起点之间的额外线条,即倒角线。
8. 重新生成视图并缩放 :第 17 到 19 行重新生成活动视口并调用 ZoomAll 方法,确保倒角后的线条显示在模型空间中。

模拟圆角

同样,没有直接与 AutoCAD“圆角”命令关联的 Fillet 方法,但可以使用简单的几何方法模拟该命令的效果。以下是 DrawBath 宏的代码:

Option Explicit
Const BathWidth = 3#
Const BathLength = 5.5
Const NumberOfPointsPer90DegreeTurn = 3
Const pi = 3.141593
Public Sub DrawBath()
    Dim PolylineObject As AcadPolyline
    Dim CircleObject As AcadCircle
    Dim LineObject As AcadLine
    Dim Points(0 To (4 * 3 * NumberOfPointsPer90DegreeTurn + 2)) As Double
    Dim AngleInRadians As Double
    Dim CurrentAngle As Double, CurrentIndex As Integer
    Dim Center(0 To 2) As Double
    Dim Count As Integer
    CurrentIndex = 0
    'right end arc (180 degree turn)
    AngleInRadians = pi / (NumberOfPointsPer90DegreeTurn * 2 - 1)
    CurrentAngle = pi / 2
    For Count = 1 To NumberOfPointsPer90DegreeTurn * 2
        Points(CurrentIndex) = BathLength / 2# + (BathWidth / 2#) * Cos(CurrentAngle)
        Points(CurrentIndex + 1) = (BathWidth / 2#) * Sin(CurrentAngle)
        Points(CurrentIndex + 2) = 0#
        CurrentAngle = CurrentAngle - AngleInRadians
        CurrentIndex = CurrentIndex + 3
    Next
    'left end arc
    CurrentAngle = 3 * pi / 2
    For Count = 1 To NumberOfPointsPer90DegreeTurn
        Points(CurrentIndex) = (BathWidth / 8#) * Cos(CurrentAngle) - BathLength / 4#
        Points(CurrentIndex + 1) = (BathWidth / 8#) * Sin(CurrentAngle) - BathWidth / 4#
        Points(CurrentIndex + 2) = 0#
        CurrentAngle = CurrentAngle - AngleInRadians
        CurrentIndex = CurrentIndex + 3
    Next
    CurrentAngle = pi
    For Count = 1 To NumberOfPointsPer90DegreeTurn
        Points(CurrentIndex) = (BathWidth / 8#) * Cos(CurrentAngle) - BathLength / 4#
        Points(CurrentIndex + 1) = (BathWidth / 8#) * Sin(CurrentAngle) + BathWidth / 4#
        Points(CurrentIndex + 2) = 0#
        CurrentAngle = CurrentAngle - AngleInRadians
        CurrentIndex = CurrentIndex + 3
    Next
    Points(CurrentIndex) = Points(0)
    Points(CurrentIndex + 1) = Points(1)
    Points(CurrentIndex + 2) = Points(2)
    Set PolylineObject = ThisDrawing.ModelSpace.AddPolyline(Points)
    PolylineObject.Update
    Center(0) = Points(3 * 2 * NumberOfPointsPer90DegreeTurn + 1) + 0.15
    Center(1) = Points((3 * 2 * NumberOfPointsPer90DegreeTurn + 1) + Points(4 * 3 * NumberOfPointsPer90DegreeTurn - 2)) / 2#
    Center(2) = 0#
    Set CircleObject = ThisDrawing.ModelSpace.AddCircle(Center, 0.15)
    CircleObject.Update
    ZoomAll
End Sub

该宏的具体步骤如下:
1. 声明常量 :第 1 到 5 行声明用于控制浴缸外观的常量,将这些常量放在代码窗口的通用声明部分可以更方便地更新它们的值。
2. 开始宏 :第 7 行开始 DrawBath 宏,根据常量的值创建绘图。
3. 声明变量 :第 8 到 10 行声明将在宏中使用的各种对象的变量。
4. 声明点数组 :第 11 行声明 Points 数组,所需的点数取决于用于转弯(圆角)的点数。
5. 声明角度变量 :第 12 行声明 AngleInRadians 变量为双精度类型,用于在生成圆弧时递增 CurrentAngle 变量;第 13 行声明 CurrentAngle 为双精度类型,将其赋值为定义圆弧上下一个点位置的弧度,同时声明 CurrentIndex 变量用于跟踪在 Points 数组中放置当前点坐标的位置。
6. 声明中心点数组 :第 14 行声明包含圆角中心点的数组。
7. 声明计数变量 :第 15 行声明 Count 变量,用于跟踪 For 循环的重复次数。
8. 初始化索引 :第 16 行将 CurrentIndex 变量初始化为数组的第一个位置。
9. 计算右端圆弧点 :第 18 行计算圆弧上相邻点对之间的弧度角;第 19 行将 CurrentAngle 设置为 90° 转换后的弧度,计算右端圆弧顶部的第一个点;第 20 行开始 For 循环,计算右端圆弧上的所有点,由于圆弧为 180°, NumberOfPointsPer90DegreeTurn 乘以 2;第 21 到 23 行计算圆弧上一个点的三个坐标,注意 x 坐标考虑了浴缸长度,z 坐标设置为 0;第 24 行从角度中减去增量,使右端圆弧向下移动;第 25 行将 3 加到 CurrentIndex 上,该索引包含 Points 数组中的下一个空闲位置,每次循环添加三个坐标;第 26 行结束 For 循环。
10. 计算左端圆弧点 :第 28 到 35 行和第 36 到 43 行包含与右端圆弧类似的语句,用于计算两个左端圆弧的点。
11. 封闭形状 :第 44 到 46 行将数组中第一个点的坐标赋值给最后一个点,确保形状封闭。
12. 创建多段线对象 :第 47 行创建一个基于 Points 数组的多段线对象。
13. 更新多段线 :第 48 行调用 Update 方法,确保多段线显示在模型空间中。
14. 定义排水孔 :第 49 到 53 行定义浴缸排水孔的中心,创建一个圆来表示它,并确保立即绘制。

通过以上方法,可以在 3D 绘图中创建各种复杂的实体,并对其边缘进行处理,从而构建出更加精细和逼真的模型。在实际应用中,可以根据具体需求调整代码中的参数,以达到理想的效果。

3D 实体创建与绘制全解析(续)

总结与对比

为了更清晰地理解不同实体创建和处理方法,下面通过表格对上述内容进行总结对比:
| 创建或处理方法 | 适用场景 | 关键步骤 | 代码示例 |
| — | — | — | — |
| 绘制椭圆圆柱体 | 需要创建椭圆圆柱体的场景 | 声明变量、使用 With 语句、获取中心点和高度、添加椭圆圆柱体等 | 见前文 DrawEllipticalCylinder 相关代码 |
| 构建复杂实体 | 组合多个简单实体形成复杂实体 | 声明盒子和圆柱体变量、创建实体、调用布尔方法组合实体 | CombinePrimitives 宏代码 |
| 判断实体相交 | 仅需判断两个实体是否相交 | 替换 CombinePrimitives 宏中部分代码,使用 CheckInterference 方法 | 见前文替换后的代码 |
| 挤压创建实体 | 适合通过平移二维轮廓得到三维实体的场景,如门窗框等 | 绘制二维轮廓、选择挤压命令、输入高度和锥角等 | DrawExtrudedSolid 宏代码 |
| 挤压实体锥化 | 需要对挤压实体进行锥化处理的场景 | 修改 DrawExtrudedSolid 宏中 TaperAngle 的值 | TaperAngle = 10 * Pi / 180 |
| 旋转创建实体 | 用于创建通过旋转二维轮廓得到的实体,如车床加工的物体 | 获取封闭形状、设置旋转轴和角度、调用旋转方法 | DrawRevolvedSolid 宏代码 |
| 模拟倒角 | 对两条线进行倒角处理 | 声明距离常量、设置线条坐标、执行倒角操作并添加线条 | SimulateChamfer 宏代码 |
| 模拟圆角 | 绘制带有圆角的物体,如浴缸 | 声明常量、计算圆弧点、创建多段线和圆 | DrawBath 宏代码 |

流程图展示

下面通过 mermaid 流程图展示挤压创建实体的流程:

graph TD;
    A[绘制二维轮廓] --> B[选择挤压命令];
    B --> C[选择轮廓对象并按 Enter];
    C --> D[输入挤压高度];
    D --> E[输入挤压锥角];
    E --> F[完成挤压,生成三维实体];
注意事项

在使用上述方法创建和处理实体时,有一些注意事项需要牢记:
1. 挤压限制 :不能挤压 3D 对象、块中的对象或具有相交边或未封闭的多段线。在进行挤压操作前,需确保二维轮廓符合要求。
2. 角度单位 :在涉及角度的操作中,如挤压锥角和旋转角度,要注意单位为弧度。可以使用 Pi 常量进行角度和弧度的转换,例如 Angle = 360# * Pi / 180
3. 代码参数调整 :在实际应用中,根据具体需求调整代码中的参数,如实体的尺寸、角度、轮廓线数量等,以达到理想的效果。

实际应用拓展

以上介绍的实体创建和处理方法在多个领域有广泛的实际应用:
1. 建筑设计 :在建筑设计中,可以使用挤压和旋转方法创建门窗框、柱子、楼梯等建筑构件,通过组合这些实体构建完整的建筑模型。同时,使用倒角和圆角处理可以使建筑模型的边缘更加平滑和美观。
2. 机械设计 :机械设计中,利用旋转方法创建轴、齿轮等零件,通过布尔运算组合不同的零件形成复杂的机械装置。判断实体相交的功能可以用于检查零件之间是否存在干涉。
3. 产品设计 :产品设计中,通过创建自定义实体和对边缘进行处理,设计出各种形状独特、外观精美的产品,如手机外壳、家具等。

深入学习建议

如果想进一步深入学习 3D 实体创建和绘制的知识,可以从以下几个方面入手:
1. 学习 VBA 编程 :上述方法大多通过 VBA 宏实现,深入学习 VBA 编程可以更好地理解和修改代码,实现更复杂的功能。可以参考相关的 VBA 编程书籍和教程,进行系统学习。
2. 研究 AutoCAD API :AutoCAD 提供了丰富的 API 接口,通过研究 API 文档,可以了解更多的对象和方法,扩展实体创建和处理的能力。
3. 实践项目 :通过实际项目的练习,不断尝试不同的方法和参数,积累经验,提高解决实际问题的能力。可以从简单的项目开始,逐步挑战更复杂的任务。

总之,掌握 3D 实体创建和绘制的方法对于建筑、机械、产品等多个领域的设计工作至关重要。通过本文介绍的方法和技巧,结合实际应用和深入学习,相信可以在 3D 绘图领域取得更好的成果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值