一般的には、AutoLISP プログラムを最新リリースで実行するために必要な変更はわずかです。
ただし、AutoLISP プログラムが最新リリースで適切に機能しなくなる場合もあります。これは、AutoLISP 関数、または AutoCAD ベースの製品のコマンドまたはシステム変数が変更または廃止されたことが原因です。
カスタム プログラムで、廃止されたコマンドとシステム変数を確認してください。コマンド プロンプトに直接入力できず、ユーザ インタフェースからもアクセスできない廃止されたコマンドやシステム変数がカスタム プログラムでは、引き続き使用できる場合があります。
廃止されたコマンドやシステム変数がカスタム プログラムで使用できるかどうか試す場合に、次の方法が役に立つことがあります。
INSERT[ブロック挿入]コマンドを実行すると[ブロック]パレットが表示され、新しい CLASSICINSERT[旧ブロック挿入]コマンドを使用すると従来の[ブロック挿入]ダイアログ ボックスが表示されます。AutoLISP プログラム内で[ブロック挿入]ダイアログ ボックスが使用されている場合は、既存のプログラムを変更する必要があります。以前は、次の AutoLISP 構文を使用して[ブロック挿入]ダイアログ ボックスを表示していました。
(initdia) (command "insert")
AutoLISP プログラムで引き続き[ブロック挿入]ダイアログ ボックスを表示するには、次のいずれかの方法を利用するように既存のプログラムを変更する必要があります。
(initcommandversion 2) (initdia) (command "insert")
(command "classicinsert")
システム変数 CDATE および DATE に格納される値は、現在の日時をミリ秒単位または 100 分の 1 秒単位で表さなくなりました。現在は、秒がこれら 2 つのシステム変数の値で表される時間の最小単位です。1 秒未満の単位で時間間隔を計測する必要がある場合は、システム変数 MILLISECS が返す値の使用を検討してください。このシステム変数には、ワークステーションを起動してからの経過時間がミリ秒単位で格納されています。
次の日付/時刻関連システム変数も、ミリ秒の除去の影響を受けています。
既存のプログラムで時間の差をミリ秒単位で表す必要がある場合は、システム変数 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)))
)
)
)
AutoCAD 2016 Update 1で導入されたシステム変数 EPDFSHX は、名前が PDFSHX に変更されました。名前を変更した結果、システム変数 EPDFSHX を参照するすべての AutoLISP 文を改定する必要があります。カスタム プログラムでこの変更の影響を最も受けると思われる関数は、次のとおりです。
AutoLISP ファイルは、デジタル署名できるようになりました。AutoLISP ファイルにデジタル署名することにより、ファイルが信頼できないという警告が表示されることなく、AutoCAD 図面環境に AutoLISP ファイルをロードすることができます。デジタル署名された VLX ファイルを AutoCAD 2015 ベース以前の製品にロードすることはできません。
osnap 関数では、クイック(qui)オブジェクト スナップ モードはサポートされなくなりました。qui モードへの参照は、AutoLISP プログラムの osnap 関数を使用するすべてのステートメントから削除する必要があります。削除しない場合、osnap 関数は、作図領域の有効な点の座標値ではなく、nil を返します。