CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

AutoLISP 函数定义 (.NET)

2023-1-1 16:27| 发布者: admin| 查看: 1392| 评论: 0|来自: AutoCAD

定义 AutoLISP 函数时,可以使用属性。该属性需要一个字符串值用作正在定义的 AutoLISP 函数的全局名称。除了全局函数名称外,结构还可以接受以下值:LispFunctionLispFunctionLispFunction

  • 本地名称 - 本地函数名称,通常特定于语言
  • 帮助主题名称 - 应与 AutoLISP 函数关联的帮助主题名称
  • 帮助文件名 - 包含命令处于活动状态且按 F1 时应显示的帮助主题的帮助文件

定义 AutoLISP 函数的语法

下面演示如何创建定义名为 InsertDynamicBlock 的 AutoLISP 函数的属性。LispFunction

VB.NET

<LispFunction("InsertDynamicBlock")> _
Public Sub InsertDynamicBlock(ByVal rbArgs As ResultBuffer)
 . . .
End Sub

C#

[LispFunction("DisplayFullName")]
public static void DisplayFullName(ResultBuffer rbArgs)
{
 . . .
}

检索传递到 AutoLISP 函数中的值

使用 aloop 单步执行 AutoLISP 函数中返回的值。A是对象的集合。对象的属性可用于确定传递到 AutoLISP 函数的每个值的值类型。该属性用于返回对象的值。ForeachResultBufferResultBufferTypedValueTypeCodeTypedValueValueTypedValue

支持的数据类型包括:

  • 布尔值或布尔值
  • 双人或双人
  • 整数或整数
  • 无效或无效
  • 对象标识
  • 点2d
  • 点3d
  • 结果缓冲区
  • 选择集
  • 字符串或字符串
  • 类型化值

定义 AutoLISP 函数

此示例代码定义一个名为的 AutoLISP 函数。虽然 .NET 项目中定义的方法接受单个值,但 AutoLISP 函数需要两个字符串值才能生成正确的输出。DisplayFullName

将 .NET 项目加载到 AutoCAD 中,然后在命令提示符下输入以下内容:

(displayfullname "First" "Last")

以下是执行 AutoLISP 函数后显示的输出:

Name: First Last

VB.NET

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

C#

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
 
[LispFunction("DisplayFullName")]
public static void DisplayFullName(ResultBuffer rbArgs)
{
  if (rbArgs != null)
  {
      string strVal1 = "";
      string strVal2 = "";
 
      int nCnt = 0;
      foreach (TypedValue rb in rbArgs)
      {
          if (rb.TypeCode == (int)Autodesk.AutoCAD.Runtime.LispDataType.Text)
          {
              switch(nCnt)
              {
                  case 0:
                      strVal1 = rb.Value.ToString();
                      break;
                  case 1:
                      strVal2 = rb.Value.ToString();
                      break;
              }
 
              nCnt = nCnt + 1;
          }
      }
 
      Application.DocumentManager.MdiActiveDocument.Editor.
         WriteMessage("\nName: " + strVal1 + " " + strVal2);
  }
}

路过

雷人

握手

鲜花

鸡蛋

最新评论

AutoCAD VBA参数化绘图程序开发与实战

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-7 11:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部