「ADSとSDS」の版間の差分
編集の要約なし  | 
				 (→SDS)  | 
				||
| (同じ利用者による、間の8版が非表示) | |||
| 1行目: | 1行目: | ||
{{SDS}}  | |||
== ADS ==  | == ADS ==  | ||
ADS (AutoCAD® Development System) は AutoCAD GX-5 より登場し、AutoCAD 2000のバージョンまで利用可能だった C 言語によるカスタマイズ API 環境。<br />  | ADS (AutoCAD® Development System) は AutoCAD GX-5 より登場し、AutoCAD 2000のバージョンまで利用可能だった C 言語によるカスタマイズ API 環境。<br />  | ||
| 10行目: | 11行目: | ||
カスタマイズの範囲や特徴も ADS と同様となるが、ADS の関数が ads_ のプレフィクスであるのに対し、SDS は sds_ プレフィックスで始まっているという違いがある。SDSのヘッダファイルで、ADS関数からSDS関数へ define 定義されているので、等価なSDS関数がないもの以外であればリネームはいらない形にはなっている。  | カスタマイズの範囲や特徴も ADS と同様となるが、ADS の関数が ads_ のプレフィクスであるのに対し、SDS は sds_ プレフィックスで始まっているという違いがある。SDSのヘッダファイルで、ADS関数からSDS関数へ define 定義されているので、等価なSDS関数がないもの以外であればリネームはいらない形にはなっている。  | ||
また、ADS は(基本的には)AutoCAD 2000   | また、ADS は(基本的には)AutoCAD 2000 以降のAutoCADで利用できなくなったのに対し、SDSはIntelliCADの初期バージョン以降ずっと利用可能となっている。 (2010年5月現在)  | ||
| 80行目: | 81行目: | ||
|}  | |}  | ||
== リザルトバッファ ==  | |||
リザルトバッファはデータの入出力などで利用され、1単位のデータが「resbuf」構造体として定義されている。「resbuf」構造体のメンバ変数は、データの種類・データの値・次データへのポインタの3つで、次の構造体へのポインタでリンクチェーンになっている。リンクチェーンの最後のデータの場合は、リンクチェーンの値は「NULL」になる。  | |||
<pre class="brush:c;">  | |||
struct resbuf {                                                    | |||
        struct resbuf *rbnext; // Allows them to be "linked"  | |||
        short restype;  | |||
        union ads_u_val resval;  | |||
};  | |||
</pre>  | |||
[[ファイル:resbuf.png|link=|リンクチェーンのイメージ]]  | |||
データの種類は、「short」型で表される。(下表参照)、実数であれば「RTREAL」、3D座標であれば「RT3DPOINT」などデータの形式を示し、図形データの場合にはDXFコードが入る。  | |||
データの値は、実データが入るが、様々な型が入るためにUNIONになっている。  | |||
文字列を格納する場合は、リザルトバッファで設定されるのは、その文字列(文字配列の先頭)へのポインタであり、「delete」演算子・「free」関数でリザルトバッファを単純に削除するとメモリリークが起こってしまう場合があるので十分な注意が必要である。また、メモリ管理上の問題から、構築・削除はそれぞれ専用の関数([[sds_newrb]]、[[sds_relrb]])を使用する。  | |||
{| class="wikitable"  | {| class="wikitable"  | ||
| 124行目: | 144行目: | ||
| RTRESBUF || 5023 || リザルトバッファ    | | RTRESBUF || 5023 || リザルトバッファ    | ||
|}  | |}  | ||
== 関連記事 ==  | == 関連記事 ==  | ||
2025年4月30日 (水) 05:09時点における最新版
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 | リザルトバッファ |