AutoCAD LISP脚本:数字自增功能实现

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:这个压缩包提供了一个AutoCAD LISP程序,该程序可以通过记事本编辑为.lsp文件格式,并在AutoCAD中加载执行。该LISP脚本功能为在AutoCAD中点选数字后自动增加1,提高设计效率。使用文档说明了如何编辑、保存和运行这个脚本。对于AutoCAD用户和学习LISP编程的初学者来说,这是一个实用的工具和学习资源。
ff.zip_LSP_cad lsp_记事本改lsp

1. AutoCAD LISP编程基础

AutoCAD LISP编程是一种为AutoCAD定制功能的强大工具。LISP(List Processing)语言以其易于理解和编辑,在AutoCAD自动化应用中占据一席之地。它能够扩展AutoCAD命令、创建自定义界面元素,并且实现复杂的绘图任务。本章将带您从基础开始,理解LISP编程在AutoCAD中的应用,并为您打下坚实的编程基础。

1.1 LISP语言简介

LISP语言的历史可以追溯到1958年,是最早的高级编程语言之一。它的主要特点是基于列表的表达式,非常适合于进行符号处理和递归编程。在AutoCAD中,LISP语言被用来创建自动化脚本,可以极大地提高绘图效率。

1.2 LISP与AutoCAD的关系

AutoCAD通过内置的LISP解释器,允许设计师编写LISP程序来操控绘图环境。这意味着用户可以使用LISP编写脚本来自动完成重复性任务,比如批量修改图元属性、创建复杂的几何图形等。LISP的灵活性和强大功能使得它成为自动化AutoCAD任务的首选工具。

1.3 开始学习LISP编程

对初学者来说,学习LISP编程的首要步骤是熟悉AutoCAD软件环境和基本命令。一旦掌握这些基础知识,就可以开始学习LISP脚本的基本语法和结构。本章后续内容将详细介绍如何开始编写您的第一个LISP脚本,并了解其核心概念。

2. LISP脚本编辑与.lsp文件保存

2.1 LISP脚本的结构与元素

2.1.1 LISP脚本基本构成

LISP脚本是一种用于AutoCAD的编程语言,用于自动化设计任务和创建复杂的绘图操作。一个基本的LISP脚本包含定义函数的代码、调用其他函数的代码,以及数据处理逻辑。不同于其他编程语言,LISP以其高度可定制性和列表处理能力而著称。在AutoCAD中,使用LISP可以轻松访问和修改图形对象,也可以读取和响应用户输入。

脚本的基本结构通常从加载所需的函数开始,然后定义主函数以供后续调用。例如,一个简单的LISP脚本可能包括加载函数和一个主函数的定义,如下所示:

(defun c:SampleFunction (/ variable)
  (setq variable "Hello, LISP!")
  (princ variable)
  (princ)
)

(princ "\nType 'SampleFunction' to run.")
(princ)

在这个例子中,我们定义了一个名为 SampleFunction 的函数,该函数设置一个名为 variable 的变量,并将其值输出到AutoCAD的命令行。脚本还包括一个提示信息,告诉用户如何运行函数。

2.1.2 LISP的数据类型与变量

在LISP脚本中,数据类型和变量的使用是基础且关键的元素。LISP是一种动态类型语言,意味着在运行时自动处理数据类型。其主要的数据类型包括整数、浮点数、字符串、列表和符号。这些类型的数据可以被存储在变量中进行后续的操作。

变量分为全局变量和局部变量。全局变量在整个脚本中有效,而局部变量仅在定义它们的函数中有效。变量的命名通常以字母开头,后面可以跟字母、数字和某些特殊字符。以下是一些变量的示例:

(defun c:SetAndPrintVar (/ aVar myString)
  (setq myString "LISP is fun!")
  (setq aVar 1234)
  (princ myString)
  (princ)
  (princ aVar)
  (princ)
)

在这个函数中, myString aVar 是局部变量,只在这个函数的作用域中存在。函数打印出这些变量的值。

2.2 .lsp文件的创建与保存

2.2.1 使用专业IDE创建.lsp文件

尽管可以使用任何文本编辑器来创建和编辑LISP文件,但专业集成开发环境(IDE)提供了一些有益的特性,如代码高亮、自动缩进和语法检查。这些功能可以帮助程序员更快地编写和调试代码。

在专业IDE中创建.lsp文件通常涉及以下步骤:

  1. 打开IDE并选择“新建文件”或“新建项目”。
  2. 选择LISP作为编程语言。
  3. 输入LISP代码。
  4. 使用IDE提供的功能进行代码格式化和错误检查。
  5. 将文件保存为具有 .lsp 扩展名的文件。

2.2.2 通过记事本手动创建与保存

使用记事本手动创建和保存.lsp文件是另一种可行的选择。这是一个简单的过程,适用于对LISP编程比较熟悉,并希望快速保存代码片段的用户。以下是手动创建和保存.lsp文件的步骤:

  1. 打开记事本或任何文本编辑器。
  2. 编写LISP代码。
  3. 选择“文件” > “另存为”。
  4. 在保存对话框中,选择一个文件夹,将文件名设置为所需的名称,并在“保存类型”中选择“所有文件( . )”。
  5. 在文件名栏中添加 .lsp 扩展名,例如 MyScript.lsp
  6. 点击“保存”。

2.2.3 文件格式与编码设置

确保.lsp文件使用正确的文件格式和编码对于脚本的正常执行至关重要。在大多数情况下,应该使用ANSI编码保存.lsp文件,因为它是Windows平台上的默认编码。

如果编辑.lsp文件时遇到了编码问题,可以尝试以下方法解决:

  • 确保文本编辑器使用的是ANSI编码。
  • 在保存文件时明确指定编码为ANSI。
  • 如果在AutoCAD中加载.lsp文件时出现错误,检查是否文件中包含了非法字符或非ASCII字符,这可能需要使用文本编辑器的查找和替换功能来清除。

在一些文本编辑器中,如Notepad++,可以轻松更改编码。只需保存文件时选择“编码”菜单中的“ANSI”或通过“另存为”对话框中的“编码”部分设置为“Western European (Windows) - Code page 1252”。

请注意,尽管这些措施提供了基本的编码和格式处理,但在实际的项目中,专业IDE或脚本编辑器仍然提供更为强大的支持,如版本控制集成、代码调试和语法高亮等。

3. 自动递增数字功能实现

3.1 设计思路与算法逻辑

3.1.1 功能需求分析

在CAD绘图过程中,经常会遇到需要标记一系列图纸或对象的情况。传统的手动标记方式不仅耗时,而且容易出现错误。通过编写LISP脚本来实现自动递增数字功能,可以提高绘图效率并减少人为错误。我们需求是,开发一个可以在AutoCAD中自动递增标记数字的LISP程序,它能够:

  • 从用户指定的起始数字开始递增。
  • 按照用户定义的增量递增(例如,每次递增1)。
  • 能够处理用户中断或完成操作的条件。

3.1.2 算法逻辑设计

我们的算法需要满足以下几点:

  1. 启动时接收用户输入的起始数字与递增的增量。
  2. 根据用户输入的数据,创建一个递增函数,该函数会持续运行直到满足停止条件。
  3. 递增函数应当能够提供反馈,即在每次递增操作后能够显示当前数字,并等待用户指示是否继续递增。
  4. 如果用户选择停止,程序应当能够优雅地终止,并记录最终的数字,以便后续使用。

3.2 LISP代码实现递增功能

3.2.1 编写递增函数

以下是一个简单的LISP递增函数实现,该函数将接收用户输入的起始值和增量,并不断打印递增后的数字,直到用户输入特定命令停止。

(defun c:AutoIncrement ( / start incr current)
  (setq start (getint "\nEnter the starting number: "))
  (setq incr (getint "\nEnter the increment: "))

  (setq current start)
  (while (princ "\nCurrent Number: ")
    (setq current (+ current incr))
    (princ current)
    (setq response (getstring "\nType 'stop' to end or hit Enter to continue: "))
    (if (= response "stop")
      (progn
        (princ "\nStopping at number: ")
        (princ current)
        (princ)
        (exit)
      )
    )
  )
)

3.2.2 测试与调试递增功能

在编写完上述递增函数后,测试和调试是确保其按预期工作的关键步骤。我们可以按照以下步骤进行测试:

  1. 加载我们的.lsp文件到AutoCAD中。
  2. 运行AutoIncrement函数。
  3. 输入起始数字和递增增量。
  4. 观察是否每次按Enter后数字递增,并且是否能够通过输入’stop’来停止递增。
  5. 检查控制台输出是否正确,以及函数是否在适当的时候退出。

测试时,可能需要考虑不同用户的输入方式和错误处理,例如,当用户输入非数字字符时,函数应当能够提示错误并重新请求输入。通过不断的测试与调整,我们可以确保LISP函数的鲁棒性。

以上所述的递增功能是一个基础示例,但已在满足日常需求的起点。通过进一步的开发和优化,这个功能可以根据更复杂的需求进行扩展和改进。

4. AutoCAD命令行接口使用

4.1 命令行接口简介

4.1.1 命令行的基本操作

AutoCAD的命令行接口是一个强大的工具,它允许用户直接与AutoCAD软件进行交互,执行命令、输入参数和控制绘图过程。命令行通常位于绘图界面的底部,用户可以在这里输入各种命令。命令行的基本操作包括输入命令、使用命令历史、输入命令参数以及查看命令提示。

要执行一个命令,用户只需在命令行中输入命令名称,然后按回车键。例如,输入“LINE”并按下回车键,就可以绘制一条直线。命令行会显示该命令的相关提示,指导用户输入相应的参数,如直线的起点和终点坐标。

命令历史是一个非常有用的特性,它记录了用户执行过的命令。用户可以通过按向上箭头键来调用最近执行的命令,无需重新输入整个命令名称,这提高了工作效率。

此外,命令行支持多种控制命令,如取消当前操作(按“ESC”键)、重复上一个命令(输入“.”并回车)等。用户还可以通过在命令行中输入“?”来获取关于特定命令的快速帮助信息。

4.1.2 命令行与LISP脚本的交互

命令行不仅限于执行AutoCAD的预定义命令,它还可以与LISP脚本进行交互。LISP脚本是一种用于编写AutoCAD命令和功能的强大语言。通过命令行,可以调用LISP脚本定义的函数,这使得自定义命令和自动化任务成为可能。

为了从命令行中调用LISP脚本,用户首先需要加载包含LISP函数定义的文件(.lsp)。加载之后,这些LISP函数就像是AutoCAD中的原生命令一样,可以直接在命令行中调用。

要调用一个LISP函数,用户只需在命令行中输入函数的名称。如果该函数需要参数,命令行会按照提示要求输入这些参数。例如,如果我们有一个名为“my_custom_command”的LISP函数,我们可以简单地输入“my_custom_command”并回车,然后根据命令行的提示输入所需的参数来执行该函数。

总之,AutoCAD命令行是一个多功能的界面,通过它不仅可以执行AutoCAD内置的命令,还可以扩展其功能以执行用户自定义的LISP脚本。

4.2 LISP脚本中的命令行应用

4.2.1 通过命令行执行LISP函数

LISP脚本在AutoCAD中的强大之处,在于它能够通过命令行被调用和执行。这允许用户自定义绘图命令,进一步优化和自动化他们的工作流程。在LISP脚本中,可以使用 command 函数直接从命令行执行特定的AutoCAD命令,也可以创建新的命令来执行复杂的操作。

例如,如果我们有一个LISP函数用来绘制一个特定样式的矩形,我们可以通过以下代码来实现:

(defun c:draw_rectangle ()
  (command "RECTANGLE")
  (setq p1 (getpoint "\nSpecify first corner: "))
  (setq p2 (getcorner p1 "\nSpecify opposite corner: "))
  (command p1 p2)
  (princ)
)

在这个例子中, c:draw_rectangle 是我们定义的一个新的LISP命令。用户在AutoCAD命令行中输入 draw_rectangle 即可调用该函数,然后按照提示指定矩形的两个对角点来完成绘制。使用 command 函数,我们能够在LISP脚本中执行任何AutoCAD命令,这样就大大扩展了AutoCAD的自定义能力。

4.2.2 使用命令行收集用户输入

除了执行命令,命令行还常用于从用户那里收集输入信息。在LISP脚本中,我们经常需要提示用户输入数值、点、字符串等信息,以便程序根据这些信息进行下一步操作。

例如,我们可以创建一个LISP函数来询问用户两个点的坐标,并计算这两点之间的距离:

(defun c:calculate_distance (/ p1 p2 dist)
  (setq p1 (getpoint "\nSpecify first point: "))
  (setq p2 (getpoint "\nSpecify second point: "))
  (setq dist (distance p1 p2))
  (princ (strcat "\nDistance between the points is: " (rtos dist)))
  (princ)
)

在这个 calculate_distance 函数中,我们使用 getpoint 函数来获取用户从命令行输入的点的坐标。然后我们计算两点之间的距离,并将结果返回给用户。

通过这种方式,我们可以构建复杂的交互式程序,通过命令行与用户进行对话,从而使LISP脚本更加动态和用户友好。

graph LR
A[开始] --> B{用户输入命令}
B --> C{AutoCAD查找命令}
C -->|内置命令| D[执行命令]
C -->|LISP函数| E[加载LISP脚本]
E --> F[执行LISP函数]
D --> G[命令完成]
F --> G

该流程图展示了当用户在命令行中输入命令时,AutoCAD是如何处理该命令的。无论命令是内置的还是LISP脚本中定义的,AutoCAD都会查找相应的命令并执行。这个过程对于理解和使用命令行接口以及LISP脚本是至关重要的。

通过本章节的介绍,我们已经深入了解了AutoCAD命令行接口的基本操作,以及如何在LISP脚本中应用命令行来执行命令和收集用户输入。掌握这些技能将极大地增强用户在AutoCAD中的工作效率和灵活性。

5. LISP内置函数应用

5.1 常用内置函数介绍

5.1.1 setq函数的使用

setq 是 LISP 中用于设置变量值的最基本函数。它将指定的值分配给一个变量。 setq 函数的语法非常简单,通常只需要两个参数:变量名和要赋的值。

(setq variable value)
  • variable : 这是你想要赋值的变量名。
  • value : 这是你想要分配给变量的值。

如果 value 是一个数字、字符串或布尔值等原子,它将被直接赋给 variable 。如果 value 是一个表达式,LISP 将首先计算该表达式,然后将结果赋给 variable

5.1.2 princ函数的输出技巧

princ 函数用于在 AutoCAD 的命令行窗口中输出信息,与 print 函数相比, princ 不会在输出内容前后添加额外的括号和引号。

(princ "Hello, World!")

上面的例子将在命令行输出 “Hello, World!”。 princ 输出的内容不会被双引号包围,看起来更符合用户的阅读习惯。

5.1.3 command函数的命令调用

在 LISP 中, command 函数允许你调用 AutoCAD 的任何命令,就像用户在命令行或界面中执行它们一样。使用这个函数,你可以编写宏来自动化任务。

(command "LINE"起点 终点)

command 函数使用字符串来表示命令名,接下来是命令所需的参数,参数可以是点(x, y, z 坐标)或其他值。

5.2 内置函数在实际中的应用

5.2.1 数据处理与交互

内置函数对于数据处理和交互非常有用。例如,使用 setq 可以轻松管理数据,而 command 可以用于创建与用户交互的自定义命令。

(defun c:DrawRectangle ()
  (setq width (getreal "\nEnter the width of rectangle: "))
  (setq height (getreal "\nEnter the height of rectangle: "))
  (command "RECTANG" '(0,0) (list width 0) (list width height) (list 0 height))
  (princ)
)

在上面的例子中,我们首先使用 setq 获取用户输入的矩形宽度和高度,然后使用 command 函数执行 RECTANG 命令来绘制矩形。

5.2.2 自动化命令执行

LISP 内置函数特别适合于自动化重复性任务。例如,我们可以通过一系列的内置函数来自动化绘制一系列的图形。

(defun c:DrawSeriesOfCircles ()
  (setq numCircles (getint "\nEnter number of circles to draw: "))
  (setq radius (getreal "\nEnter the radius of circles: "))
  (setq center (getpoint "\nEnter center point of first circle: "))
  (repeat numCircles
    (command "CIRCLE" center radius)
    (setq center (polar center pi radius)) ; Move center by radius along pi radians
  )
  (princ)
)

在这个例子中,我们创建了一个名为 DrawSeriesOfCircles 的函数,它要求用户输入要绘制的圆的数量和圆的半径,然后重复绘制这些圆。

LISP 内置函数提供了强大的工具集,可以用于执行复杂的任务。由于 LISP 在 AutoCAD 中的应用是如此广泛,理解并掌握这些内置函数对于提高工作效率至关重要。在下一章中,我们将讨论如何使用记事本进行 LISP 代码的编写和编辑,包括一些技巧和调试方法。

6. ```

第六章:使用记事本进行LISP代码编写和编辑

6.1 记事本环境配置

6.1.1 配置记事本以支持LISP语法高亮

为了在使用Windows系统中的记事本编写LISP代码时提高可读性和效率,我们可以借助一个名为Notepad++的工具,它提供了强大的插件和语法高亮支持。首先,需要从Notepad++官网下载并安装Notepad++。接着,安装“TextFX”插件,这是一个包含了多种文本处理功能的插件,其中包括了LISP语法高亮。

安装完TextFX插件之后,打开Notepad++,进入“语言”菜单,选择“定义自己的语言”进行LISP语法的自定义设置。在弹出的窗口中选择“添加新的语言定义”,命名为“LISP”。然后,在关键字列表中添加LISP语言的特定关键字,如:defun, setq, progn, etc.。设置完成后,将文件类型扩展名设置为“.lsp”,这样所有以“.lsp”结尾的文件都会自动应用LISP语法高亮,从而让LISP代码更加直观。

6.1.2 设置记事本的自动缩进和代码折叠

在Notepad++中,自动缩进可以确保代码格式的整洁和一致性,而代码折叠功能则有助于管理和浏览复杂的LISP程序。在“设置”菜单中选择“首选项”,然后在“编辑器”下的“制表符”选项卡中启用“自动缩进”功能,并设置合适的缩进宽度和缩进类型。通常,推荐使用空格代替制表符进行缩进,因为这样可以避免在不同编辑器间出现的对齐问题。

代码折叠可以通过“设置”菜单中的“语言”下的“语言属性”来设置。在LISP语法的设置中,启用“折叠”选项,然后定义折叠的标记,如:一对圆括号“()”,来指定哪些代码块可以被折叠。完成这些设置后,每次编写代码时,Notepad++会自动根据定义的规则进行代码折叠,使得我们能够更加集中地关注当前编辑的代码块。

6.2 编写与调试LISP代码

6.2.1 LISP代码的基本编写技巧

编写LISP代码时,有一些基本的技巧可以提高开发效率和代码质量。首先,了解LISP的函数式编程特性是十分重要的,LISP以其简洁的语法和强大的函数式特性著称。在编写过程中,合理利用递归和列表操作可以大大简化代码逻辑。例如,使用 mapcar 函数可以对列表中的每个元素应用同一函数,从而避免手动编写循环。

其次,良好的代码风格也是必不可少的。例如,合理使用空格和缩进可以让代码更易于阅读,而注释则能帮助维护者和未来的你理解代码的意图。LISP允许在代码中直接使用 ;; 进行行内注释,或者使用 ;;- ;;- 来分隔代码块,增加代码的可读性。将复杂的算法逻辑拆分成多个函数,并以 defun 关键字定义,是提高代码复用和可维护性的关键。

6.2.2 利用记事本进行代码调试

使用Notepad++进行LISP代码调试时,不能直接利用集成开发环境(IDE)中提供的高级调试工具,因此我们需要依靠一些间接的方法。一个常见的方法是使用日志输出,将代码中的关键变量和表达式的值输出到控制台。在LISP代码中,可以使用 princ 函数或者 print 函数来进行输出,以便于跟踪代码执行的流程和变量的变化。

另一种方法是在代码中设置断点,也就是在代码中的特定行前插入一个条件检查,例如使用 (if nil ...) 语句。当这段代码执行到时,它会由于条件永远为假(nil)而不会执行其内部的代码,从而起到类似断点的效果。通过这种方式,开发者可以在特定的执行阶段手动检查或修改程序状态。


以上内容按照【内容方向性】和【内容结构】要求,详尽阐述了使用记事本进行LISP代码编写和调试的技巧和方法。通过Notepad++的高级编辑功能,我们可以有效地提高代码的编写效率和可读性。同时,通过手动设置日志输出和断点,即使在没有专业IDE的情况下,也能进行有效的代码调试。整个章节内容不仅深入分析了记事本的环境配置和代码编写的技巧,而且提供了具体的操作示例,帮助读者掌握LISP编程实践。

# 7. AutoCAD中加载和执行.lsp文件的方法

## 7.1 .lsp文件的加载方法

在AutoCAD中使用LISP脚本文件(.lsp)能够让我们快速地执行一系列复杂的操作。为了更好地利用这些脚本文件,我们需要了解如何在AutoCAD中加载它们。

### 7.1.1 通过AutoCAD命令加载.lsp
加载一个.lsp文件到AutoCAD可以通过命令行接口来完成。这可以通过简单的几个步骤实现:

1. 打开AutoCAD。
2. 按 `Ctrl + 9` 打开AutoCAD的命令行界面。
3. 输入 `APPLOAD` 命令并按回车。
4. 在弹出的对话框中找到并选择你需要加载的.lsp文件。
5. 点击 `加载`,然后 `关闭`。

完成以上步骤后,.lsp 文件中的函数和程序就会加载到AutoCAD中并可以使用了。

### 7.1.2 利用菜单或工具栏加载.lsp
如果你希望在使用AutoCAD时能够快速地加载特定的.lsp文件,可以将它们添加到菜单或工具栏中。这样做可以让.lsp文件的加载更加直观和方便:

1. 打开AutoCAD。
2. 使用 `菜单设计器` 或 `工具栏自定义` 功能。
3. 通过这些工具,可以创建新的菜单项或工具栏按钮,然后将它们关联到APPLOAD命令,并指定要加载的.lsp文件。
4. 点击新的菜单项或工具栏按钮,即可加载.lsp文件。

### 代码示例:
假设有一个名为 `myLispFunctions.lsp` 的文件,它包含多个有用的LISP函数。首先,需要将其加载到AutoCAD中,然后才能使用其中定义的命令。

```lisp
; 加载.lsp文件的代码
(princ "\nLoading myLispFunctions.lsp...")
(appload "C:/path/to/myLispFunctions.lsp")
(princ "\nLoaded Successfully!")

7.2 执行.lsp文件中的函数

加载了.lsp文件之后,我们可以从命令行调用其中的函数,或者创建自定义的命令和快捷键,以便更高效地使用这些函数。

7.2.1 从命令行调用.lsp中的函数

一旦你加载了包含自定义函数的.lsp文件,就可以在AutoCAD命令行中直接调用这些函数。例如,如果你加载的文件中定义了一个名为 myCustomFunction 的函数,你可以通过以下步骤来调用它:

  1. 在命令行中输入 myCustomFunction
  2. 按下回车键执行该函数。

7.2.2 创建自定义命令与快捷键

为了便于使用,你还可以创建自定义命令,并将快捷键关联到这些命令,这样便能快速地执行.lsp文件中的函数:

  1. 在AutoCAD中,输入 ADCENTER 命令,打开设计中心。
  2. 在设计中心左侧的树状目录中找到工具选项卡。
  3. 右键点击工具,选择新建工具。
  4. 在创建工具的对话框中,指定工具的位置为加载的.lsp文件。
  5. 在命令行输入栏中指定要执行的函数名,例如 myCustomFunction
  6. 可以设置工具的名称、图标以及快捷键。
  7. 保存设置并关闭设计中心。

现在,你就可以通过设计中心快速访问并执行 myCustomFunction 函数,或者使用快捷键来执行这个函数了。

为了进一步优化你的AutoCAD使用体验,你可以将这些步骤封装成一个自动化的脚本,实现一键加载并执行LISP程序。通过这种方式,你可以在每次打开AutoCAD时,自动准备好所有自定义工具和快捷键,从而提高工作效率。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:这个压缩包提供了一个AutoCAD LISP程序,该程序可以通过记事本编辑为.lsp文件格式,并在AutoCAD中加载执行。该LISP脚本功能为在AutoCAD中点选数字后自动增加1,提高设计效率。使用文档说明了如何编辑、保存和运行这个脚本。对于AutoCAD用户和学习LISP编程的初学者来说,这是一个实用的工具和学习资源。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值