概要 - AutoLISP の互換性

一般的には、AutoLISP プログラムを最新リリースで実行するために必要な変更はわずかです。

ただし、AutoLISP プログラムが最新リリースで適切に機能しなくなる場合もあります。これは、AutoLISP 関数、または AutoCAD ベースの製品のコマンドまたはシステム変数が変更または廃止されたことが原因です。

注: AutoCAD 2014 ベースの製品から、システム変数 SECURELOAD を 1 または 2 に設定している場合は、カスタム アプリケーションはセキュア モードでのみ機能するようになりました。セキュア モードで動作している場合、AutoCAD ベースの製品はコードを含むファイルを信頼する場所からロードおよび実行するように制限されます。信頼する場所は、システム変数 TRUSTEDPATHS で指定します。詳細は、「概要 - ウイルスに対するセキュリティと保護」を参照してください。

一般的な情報

廃止されたコマンドとシステム変数

カスタム プログラムで、廃止されたコマンドとシステム変数を確認してください。コマンド プロンプトに直接入力できず、ユーザ インタフェースからもアクセスできない廃止されたコマンドやシステム変数がカスタム プログラムでは、引き続き使用できる場合があります。

注: 廃止されたコマンドやシステム変数が引き続きカスタム プログラムで機能したとしても、製品の将来のリリースでも機能し続けるという保証はありません。廃止されたコマンドやシステム変数はいっさい使用しないように、カスタム プログラムを書き直すことをお勧めします。

廃止されたコマンドやシステム変数がカスタム プログラムで使用できるかどうか試す場合に、次の方法が役に立つことがあります。

  • コマンド名の前にピリオドを付ける。たとえば、.BLIPMODE とすることにより、BLIPMODE[マーカー表示]コマンドを使用することができます。
  • 廃止されたシステム変数は COMMAND 関数を使用して実行しないでください。このようにすると、「不明なコマンド」エラー メッセージが表示される場合があります。代わりに、GETVARSETVAR 関数を使用してください。たとえば、(getvar "BLIPMODE") はシステム変数 BLIPMODE の現在の値を返します。
注: 製品から削除されたコマンドとシステム変数は、前述の方法を使用しても復元することはできません。

AutoCAD 2021 以降の AutoCAD ベースの製品

Unicode のサポート

AutoLISP 環境が更新され、Unicode 文字をサポートするようになりました。Unicode 文字は、操作に使用する関数や文字列値を返す関数に影響します。Unicode をサポートするように更新された関数の詳細については、「AutoLISP の新機能または変更点」を参照してください。

プログラムで使用されている関数に基づいて、Unicode 文字を処理するために変更が必要になる場合があります。たとえば、関数に Unicode 文字が渡された場合、ASCII 関数の戻り値が 255 を超えたり、旧リリースと異なる可能性があります。システム変数 LISPSYS を使用して、プログラムにロードされる既定の AutoLISP 環境を識別およびコントロールすることができます。0 と 2 は MBCS サポート(旧環境)、1 は Unicode サポートです。

次のコード スニペットは、プログラムに現在ロードされている AutoLISP 環境を判別し、ロードされている環境に基づいてコードの実行をコントロールする方法を示しています。

(if (= (getvar "LISPSYS") 1)
  (alert (strcat 
             "Unicode support enabled"
             "\n(ASCII \"€\") returns 8364"
         )
  )
  (alert (strcat 
             "MBCS (Legacy) support enabled"
             "\n(ASCII \"€\") returns 128"
         )
  )
)
注: Visual LISP 統合開発環境(VL IDE)または MAKELISPAPP[LISP アプリを作成]コマンドを使用して AutoLISP ソース(LSP)ファイルをコンパイルする場合、システム変数 LISPSYS の現在の値がファイルのコンパイル形式をコントロールします。LISPSYS を値 1 (Unicode 形式)に設定してコンパイルしたファイルを、AutoCAD 2020 以前のリリースにロードすることはできません。旧リリースでもロードできるようにするには、ファイルをコンパイルする前に LISPSYS の値を 0 または 2 に設定する必要がありますが、これを行うと Unicode サポートが制限されます。

AutoCAD 2020 以降の AutoCAD ベースの製品

INSERT[ブロック挿入]コマンド

INSERT[ブロック挿入]コマンドを実行すると[ブロック]パレットが表示され、新しい CLASSICINSERT[旧ブロック挿入]コマンドを使用すると従来の[ブロック挿入]ダイアログ ボックスが表示されます。AutoLISP プログラム内で[ブロック挿入]ダイアログ ボックスが使用されている場合は、既存のプログラムを変更する必要があります。以前は、次の AutoLISP 構文を使用して[ブロック挿入]ダイアログ ボックスを表示していました。

(initdia)
(command "insert")

AutoLISP プログラムで引き続き[ブロック挿入]ダイアログ ボックスを表示するには、次のいずれかの方法を利用するように既存のプログラムを変更する必要があります。

  • (initcommandversion 2)
    (initdia)
    (command "insert")
  • (command "classicinsert")

AutoCAD 2019 以降の AutoCAD ベースの製品

システム変数 LOCALE

システム変数 LOCALE は、言語とサブ言語を表す 3 文字の省略形ではなく、現在の言語を表す 2 文字以上の省略形を含むコードを返すようになりました。2 文字以上の省略形は、Windows の GetLocaleInfo 関数(定数 LOCALE_SISO639LANGNAME を使用)に基づきます。

AutoCAD 2019 ベースより前の製品では、このコードは Windows の GetLocaleInfo 関数(定数 LOCALE_SABBREVLANGNAME を使用)が返す 3 文字の省略形でした。3 文字の省略形は、2 文字の言語の省略形とサブ言語を示す 3 番目の文字という 2 種類の情報に基づいていました。たとえば、ENU は、英語の省略形(EN)とサブ言語の米国(U)との組合せを表していました。

AutoCAD 2017 以降の AutoCAD ベースの製品

CDATE、DATE、その他の日付/時刻関連システム変数

システム変数 CDATE および DATE に格納される値は、現在の日時をミリ秒単位または 100 分の 1 秒単位で表さなくなりました。現在は、秒がこれら 2 つのシステム変数の値で表される時間の最小単位です。1 秒未満の単位で時間間隔を計測する必要がある場合は、システム変数 MILLISECS が返す値の使用を検討してください。このシステム変数には、ワークステーションを起動してからの経過時間がミリ秒単位で格納されています。

次の日付/時刻関連システム変数も、ミリ秒の除去の影響を受けています。

  • TDCREATE
  • TDINDWG
  • TDUCREATE
  • TDUPDATE
  • TDUSRTIMER
  • TDUUPDATE

既存のプログラムで時間の差をミリ秒単位で表す必要がある場合は、システム変数 MILLISECS に格納されている値の最後の 2 桁または 3 桁を取得し、これをシステム変数 CDATE によって返された値に追加することができます。システム変数 CDATE は、AutoCAD 2016 以前の AutoCAD ベース製品のシステム変数 CDATE によって返される値に相当する値を生成します。次のサンプル コードでは、対象となる AutoCAD リリースに基づいて、ミリ秒を含む日時値を取得する方法を示しています。

; Returns a CDATE value that includes milliseconds based on release
; Usage: (CDate)
; Replaces (rtos (getvar "CDATE") 2 8)
(defun CDate ( / ms)
  ; Check to see which AutoCAD release is being used
  (if (<= (atof (getvar "ACADVER")) 22.0)
    (rtos (getvar "CDATE") 2 8)
    (progn
      ; Get the current milliseconds and append it to the CDATE value
      (setq ms (itoa (getvar "MILLISECS")))
      (strcat (rtos (getvar "CDATE") 2 6)(substr ms (- (strlen ms) 2)))
    )
  )
)
システム変数 EPDFSHX

AutoCAD 2016 Update 1で導入されたシステム変数 EPDFSHX は、名前が PDFSHX に変更されました。名前を変更した結果、システム変数 EPDFSHX を参照するすべての AutoLISP 文を改定する必要があります。カスタム プログラムでこの変更の影響を最も受けると思われる関数は、次のとおりです。

  • GETVAR: 0 や 1 の整数値ではなく nil 値が返されます。
  • SETVAR: プログラムの実行が中断され、エラー メッセージ ; error: AutoCAD variable setting rejected: "epdfshx" が生成される場合があります。
  • COMMAND: プログラムの実行が中止され、エラー メッセージ EPDFSHX Unknown command "EPDFSHX" が生成される場合があります。

AutoCAD 2016 以降の AutoCAD ベースの製品

デジタル署名されたファイル

AutoLISP ファイルは、デジタル署名できるようになりました。AutoLISP ファイルにデジタル署名することにより、ファイルが信頼できないという警告が表示されることなく、AutoCAD 図面環境に AutoLISP ファイルをロードすることができます。デジタル署名された VLX ファイルを AutoCAD 2015 ベース以前の製品にロードすることはできません。

osnap 関数

osnap 関数では、クイック(qui)オブジェクト スナップ モードはサポートされなくなりました。qui モードへの参照は、AutoLISP プログラムの osnap 関数を使用するすべてのステートメントから削除する必要があります。削除しない場合、osnap 関数は、作図領域の有効な点の座標値ではなく、nil を返します。