当定义一个 AutoLISP 函数时,应该使用 LispFunction 属性。LispFunction 属性期待一个字符串值 ,它将当作 AutoLISP 函数的全局名称。和全局函数名称一起,LispFunction 结构还能接受如下值:
- Local Name - 本地化命令名称,通常用于特定语言。
- Help Topic Name - 将要与 AutoLISP 函数关联的帮助主题名称。
- Help File Name - 包含当命令激活并按 F1 键时将要显示其中帮助主题的帮助文件。
下面演示了使用LispFunction属性定义了一个名为 InsertDynamicBlock 的 AutoLISP 函数。
<LispFunction("InsertDynamicBlock")> _
Public Sub InsertDynamicBlock(ByVal rbArgs As ResultBuffer)
. . .
End Sub
通过 AutoLISP 函数,使用 Foreach 遍历 ResultBuffer 返回的值。ResultBuffer 是 TypedValue 对象的集合。TypedValue 对象的 TypeCode 属性可以用来确定每一个传递到 AutoLISP 函数的值的值类型。Value 属性用于返回 TypedValue 对象的值。
定义一个 AutoLISP 函数
这个代码定义一个命名为 DisplayFullName 的 AutoLISP 函数。 虽然在 .NET 工程中定义的这个方法接收一个值,但是这个 AutoLISP 函数期待两个字符串值以给出合适的输出。
加载 .NET 工程到 AutoCAD 中并在命令提示中输入下列的命令:
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
<LispFunction("DisplayFullName")> _
Public Sub DisplayFullName(ByVal rbArgs As ResultBuffer)
If Not rbArgs = Nothing Then
Dim strVal1 As String = "", strVal2 As String = ""
Dim nCnt As Integer = 0
For Each rb As TypedValue In rbArgs
If (rb.TypeCode = Autodesk.AutoCAD.Runtime.LispDataType.Text) Then
Select Case nCnt
Case 0
strVal1 = rb.Value.ToString()
Case 1
strVal2 = rb.Value.ToString()
End Select
nCnt = nCnt + 1
End If
Next
Application.DocumentManager.MdiActiveDocument.Editor. _
WriteMessage(vbLf & "Name: " & strVal1 & " " & strVal2)
End If
End Sub