カスタマイズ‎ > ‎LISP‎ > ‎

AutoLISPの移植

LISP は AutoLISP との互換性が高く、プログラムのソースコードについては、多くの場合、そのまま利用することができます。
サポートされていない部分もありますので、移植時には結果を必ず確認してください。


移植時のポイント

■ ファイル形式

ソースコードについて互換性は高く、ソースファイル(拡張子[lsp])についてはそのままロードできます。
高速ロード用の最適化された拡張子[fas]ファイル(バイナリ)やVLアプリケーションの拡張子[vlx]ファイル(バイナリ)については互換性がなく、ロードしても使うことはできません。
拡張子[lsp]ファイルについて、ソースを公開したくない場合、Bricsys より暗号化するにツールが提供されていますので、ご利用ください。


■ 関数

LISPでは、AutoLISPの持つ関数(vl関数を含む)の中でダミーとして提供し、実質サポートされていない関数もあります。また、サポートしている関数でも、結果が異なるものがあります。必ず実行してみて、機能や結果について確認してください。

文字列操作関連の関数
(strlen) などの文字列を扱う関数について、LISP では文字数のカウント方法がAutoLISPとは異なっています。文字数を扱う処理をしている部分について、改良が必要です。
AutoLISPでは、ひらがなや漢字など全角文字の場合は、1文字を 「2」 とカウントしますが、LISPでは「1」 とカウントします。

例えば、
文字列 "ABCDE" を (strlen)関数に引き渡すと、LISPでもAutoLISPでも 「5」 を返します。
文字列 "あいう" を (strlen)関数に引き渡すと、AutoLISPは 「6」 を返すのに対し、LISPは 「3」 を返します。このように AutoLISPは文字数をバイト数として扱いますが、LISPは文字数を文字の個数として扱います。

■ システム変数

BricsCADでは、AutoCADの持つシステム変数の中でサポートしていないものがあります。
また、サポートはしているが、AutoCADでは読み書きできるが、BricsCADでは読み込み専用になっているものもあります。
(setvar)関数や(getvar)関数を使っている部分について、システム変数の有無などを確認してください。

例えば、
システム変数[DTextEd](AutoCAD2010以降)はサポートしていません。
システム変数[SDI]は、Bricscadでは読み込み専用のシステム変数となり、常に [0] を返します。

■ 環境変数

BricsCADでは、AutoCADの持つ環境変数の中でサポートしていないものがあります。
(getenv)関数を使っている部分について、環境変数の有無などを確認してください。

例えば、
環境変数[PrinterConfigDir]はサポートしていません。

■ コマンド

BricsCADでは、AutoCADの持つコマンドの中でサポートしていないものがあります。
また、サポートはしているが、AutoCADとは引数やオプションが異なるものもあります。
(command)関数を使っている部分について、コマンドの有無などを確認してください。

例えば、
コマンド[SaveAs]では、テンプレートとして保存するためのオプション[T]や標準仕様として保存するためのオプション[S]はサポートしていません。

open コマンド、quit コマンド
AutoCAD では、 LISP では図面を開く方法として open コマンドを使いますが、使い方として2つの方法があります。
  1. システム変数[SDI] を [1] にして、 open コマンドを実行する。
  2. スクリプトファイルを生成して、script コマンドを実行して図面を開く。
1. の場合、BricsCAdではそのまま open コマンドが実行できますので、システム変数[SDI]を変更する必要はありません。システム変数[SDI]の値が [0] のときに、open コマンドが使えない警告をするプログラムの場合は変更が必要です。

2.の場合、AutoCADのスクリプトファイルでは、以下のように書くことがあります。

quit
y
open
C:\temp\sample1.dwg

AutoCADの場合、quit コマンドの後に処理が続く場合は、AutoCADは終了せず、スクリプトの次のコマンドを実行しますが、BricsCAD の場合は、BricsCADが終了してしまい、次のコマンドに進みません。図面を閉じる処理を入れる場合は、以下のように記述してください。

close
n
open
C:\temp\sample1.dwg