ADSとSDS
ADS
ADS (AutoCAD® Development System) は AutoCAD GX-5 より登場し、AutoCAD 2000のバージョンまで利用可能だった C 言語によるカスタマイズ API 環境。
ADS 環境では、基本的に AutoLISP 関数と対応する関数(ads_のプレフィクスで始まる)が用意されおり、AutoLISP と同様にカスタムコマンドや AutoLISP 関数の作成が可能であった。
既存の C 言語ライブラリを ADS に組み込んで使用することができたため、AutoLISP では実行できない機能を実装することも可能であった。 ADS カスタマイズの後継環境としては、ObjectARX となっており、ADS から ObjectARX の移行期間のバージョン(AutoCAD R13、R14)では ADSRX という開発環境があった。
SDS
SDS (Solutions Development System) は上述の ADS と環境互換となるIntelliCAD の C++ 言語によるカスタマイズ API 環境。
カスタマイズの範囲や特徴も ADS と同様となるが、ADS の関数が ads_ のプレフィクスであるのに対し、SDS は sds_ プレフィックスで始まっているという違いがある。SDSのヘッダファイルで、ADS関数からSDS関数へ define 定義されているので、等価なSDS関数がないもの以外であればリネームはいらない形にはなっている。
また、ADS は(基本的には)AutoCAD 2000 以降のAutoCADで利用できなくったのに対し、SDSはIntelliCADの初期バージョン以降ずっと利用可能となっている。 (2010年5月現在)
- 以下の関数は等価なSDS関数がない。
-
- ads_arxload
- ads_arxloaded
- ads_arxunload
- ads_ssgetx
- ads_ssGetKwordCallbackPtr
- ads_ssGetOtherCallbackPtr
- adsw_acadMainWnd
- adsw_acadDocWnd
- 以下の関数は、SDSで追加されている関数
-
- sds_name_clear
- sds_name_equal
- sds_name_nil
- sds_name_set
- sds_point_set
- sds_progresspercent
- sds_progressstart
- sds_progressstop
- sds_readaliasfile
- sds_sendmessage
- sds_swapscreen
SDS 関数の戻り値 | ||
---|---|---|
リクエスト | コード | 意味 |
RSRSLT | 1 | 結果を返す。 |
RSERR | 3 | 評価のエラー。結果は返されない。 |
RQSAVE | 14 | 図面を保存中。 |
RQEND | 15 | 終了中。 |
RQQUIT | 16 | 終了中。 |
RQCFG | 22 | IntelliCAD がコンフィグコマンドから戻った。 |
RQXLOAD | 100 | 外部の機能をロードした。 |
RQXUNLD | 101 | アプリケーションをアンロードした。 |
RQSUBR | 102 | 外部サブルーチン要求。 |
RQHUP | 105 | IntelliCAD はアプリケーションから切断される。 |
RQXHELP | 118 | 機能のためのヘルプを定義してください。 |
RTERROR | -5001 | エラーが発生した。 |
RTCAN | -5002 | ユーザが Esc を押してコマンドを中止した。 |
RTREJ | -5003 | 無効なフォーマットのために、リクエストを拒否した。 |
RTFAIL | -5004 | SDS と IntelliCADのリンク失敗。 |
RTKWORD | -5005 | getxxx によるルーチンのキーワード。 |
RTNORM | 5100 | 成功。 |
リザルトバッファ
リザルトバッファはデータの入出力などで利用され、1単位のデータが「resbuf」構造体として定義されている。「resbuf」構造体のメンバ変数は、データの種類・データの値・次データへのポインタの3つで、次の構造体へのポインタでリンクチェーンになっている。リンクチェーンの最後のデータの場合は、リンクチェーンの値は「NULL」になる。
struct resbuf { struct resbuf *rbnext; // Allows them to be "linked" short restype; union ads_u_val resval; };
データの種類は、「short」型で表される。(下表参照)、実数であれば「RTREAL」、3D座標であれば「RT3DPOINT」などデータの形式を示し、図形データの場合にはDXFコードが入る。
データの値は、実データが入るが、様々な型が入るためにUNIONになっている。
文字列を格納する場合は、リザルトバッファで設定されるのは、その文字列(文字配列の先頭)へのポインタであり、「delete」演算子・「free」関数でリザルトバッファを単純に削除するとメモリリークが起こってしまう場合があるので十分な注意が必要である。また、メモリ管理上の問題から、構築・削除はそれぞれ専用の関数(sds_newrb、sds_relrb)を使用する。
リザルトバッファコード | ||
---|---|---|
リクエスト | コード | 意味 |
RTNONE | 5000 | 返り値なし |
RTREAL | 5001 | 実数 |
RTPOINT | 5002 | 2次元ポイント(X,Y座標). |
RTSHORT | 5003 | 短整数 |
RTANG | 5004 | 角度 |
RTSTR | 5005 | 文字列. |
RTENAME | 5006 | エンティティ名. |
RTPICKS | 5007 | 選択セット |
RTORINT | 5008 | オリエンテーション |
RT3DPOINT | 5009 | 3次元ポイント (X,Y,Z座標). |
RTLONG | 5010 | 長整数 |
RTVOID | 5014 | 空シンボル |
RTLB | 5016 | リストの始まり |
RTLE | 5017 | リストの終わり |
RTDOTE | 5018 | ドットペア |
RTNIL | 5019 | nil |
RTDXF0 | 5020 | DXF コード 0 (sds_buildlist のみで使用) |
RTT | 5021 | T (true) アトム |
RTRESBUF | 5023 | リザルトバッファ |