AutoLISP 関数定義(.NET)

AutoLISP 関数を定義するときは、LispFunction 属性を使用します。LispFunction 属性では、定義する AutoLISP 関数のグローバル名として文字列値を使用する必要があります。LispFunction 構造体は、グローバル関数名と共に次の値を使用することができます。

AutoLISP 関数を定義する構文

次の例は、DisplayFullName という AutoLISP 関数を定義する LispFunction 属性の作成を示しています。

C# の例

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

AutoLISP 関数に渡す値を取得する

Foreach ループを使用して、AutoLISP 関数が ResultBuffer で返す値をステップ実行します。ResultBuffer は、TypedValue オブジェクトのコレクションです。TypedValue オブジェクトの TypeCode プロパティは、AutoLISP 関数に渡される各値の型を判断するために使用できます。Value プロパティは、TypedValue オブジェクトの値を返すために使用されます。

サポートされるデータ タイプは、次のとおりです。

AutoLISP 関数を定義するには

このコード例では、DisplayFullName という名前の AutoLISP 関数を定義します。.NET プロジェクトで定義されたメソッドは 1 つの値を受け入れますが、この AutoLISP 関数が正しい出力を生成するには 2 つの文字列値が必要です。

.NET プロジェクトを AutoCAD にロードし、コマンド プロンプトに次のように入力します。

(displayfullname "First" "Last")

AutoLISP 関数を実行すると、次の出力が表示されます。

Name: First Last

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);
  }
}