「ADSとSDS」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
92行目: 92行目:
</pre>
</pre>


リンクチェーンのイメージ
[[ファイル:resbuf.png|リンクチェーンのイメージ]]
[[ファイル:resbuf.png]]
 


データの種類は、「short」型で表される。(下表参照)、実数であれば「RTREAL」、3D座標であれば「RT3DPOINT」などデータの形式を示し、図形データの場合にはDXFコードが入る。
データの種類は、「short」型で表される。(下表参照)、実数であれば「RTREAL」、3D座標であれば「RT3DPOINT」などデータの形式を示し、図形データの場合にはDXFコードが入る。

2012年10月17日 (水) 10:05時点における版

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」関数でリザルトバッファを単純に削除するとメモリリークが起こってしまう場合があるので十分な注意が必要である。また、メモリ管理上の問題から、構築・削除はそれぞれ専用の関数を使用する。

リザルトバッファコード
リクエスト コード 意味
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 リザルトバッファ

関連記事