CADデータ選択関数  LTCustomizer21 for AutoCAD LT リファレンスマニュアル

ActiveX
   Function select(option As String, [layer_cmd As String], [dxfout_option As String]) As Integer
C/C++
    int WINAPI LTC_select(const wchar_t *option,const wchar_t *layer_cmd =NULL,const wchar_t *dxfout_option=NULL);

パラメータ
option :AutoCAD LTのselectコマンドを実行したときに利用できるオプション文字列。一番最初に"/UNICODE "を指定すると、全てのパラメータがUNICODEで出力
layer_cmd:AutoCAD LTのlayerコマンドを実行したときに利用できるコマンド文字列
dxfout_option:AutoCAD LTのdxfoutコマンドのオプション文字列

返り値
選択したCADデータの数

CADデータ選択関数は、AutoCAD LTにDXFファイルを作成させて、 LTCustomizer21がそれを読み込むことで実現しています(ENTITIESセクションのみ)。(この関数はselectコマンドと同じことを内部でしているのでcommand2("select _p ")などを予め実行する必要はありません。)基本的には select()とget_select_data()の2つの関数ですべてのCADデータを取得できますが、DXFファイルのフォーマットを知っていることが前提です。そのため、LTCustomizer21は単純でよく使われるデータタイプならget_select_data()を使用しないで取得できる関数を用意しています。

select()はAutoCAD LT上でデータを選択して、DXFファイルに書き込み、LTCustomizer21にそのファイルを読み込ませます。optionまたはlayer_cmd,dxfout_optionは、AutoCAD LTのコマンドであるselectやlayerコマンド,dxfoutコマンドを実行時にそのまま渡される文字列です。しかし、これらのパラメータで使える各コマンドは限られています。

optionは、基本的に_Lや_P以外は使いません。ユーザのマウス入力を促すものは必ずこの関数では失敗します。オプションの詳細はAutoCAD LTのヘルプでselectコマンドの部分を参照してください。

layer_cmdは、実質的にフリーズ(F)しか使用しません。その他のコマンドは使用できますが、この関数内では意味がありません。layer_cmdは選択して欲しくないレイヤ上のCADデータを指定するために使用します。CADのアプリケーションの開発者は複数のレイヤを設けて各レイヤにそれぞれ違う属性のデータを書き込んで管理しますので、そのようなデータ管理の場合、layer_cmdで選択対象にしたくないレイヤをあらかじめ設定することで、処理の高速化を図ることができます。
ちなみにレイヤ名の指定はワイルドカードを使用できます。レイヤ名TEST11,TEST22,TEST23があった場合layer_cmdに"_F\nTEST2*\n"と指定すると、TEST22とTEST23がフリーズされそれらレイヤ上にあるCADデータは選択されません。(\nは改行を意味します)
layer_cmdでフリーズされたレイヤは選択後、直ちにフリーズ解除されます。

フリーズしたいレイヤが多く、選択したいレイヤが少ない場合、全レイヤをいったんフリーズした後、フリーズ解除(T)で指定したレイヤのみフリーズ解除すると言う方法があります。
(例では見やすさのために区切り文字としてスペースを使っていますが、実際は改行またはタブを使用してください。)
例: “F * T TEST1 T TEST2* “
これは全レイヤをフリーズした後、TEST1とTEST2が前方に付く全レイヤをフリーズ解除にして選択可能なレイヤにします。(ただしカレントレイヤは全レイヤをフリーズしてもはじかれます。)

dxfout_optionは、DXFOUTコマンドのオプション文字列を指定します。バージョン指定、精度(テキスト形式のDXFファイルのとき)、バイナリDXFを指定します。何も指定しない場合は、最新の形式のテキスト形式のDXFファイルを作成します。もし使用するCADがLT97,LT98,AutoCAD R14で、この関数を使用した後、選択したデータを変更して値を更新する場合(update_select_data()を使用する)、AutoCAD R12のテキスト形式のDXFで書き込む必要があります。それ以外のタイプだとうまく更新ができません。
例:select("P ","","R12 16");(直前に選択したデータをAutoCAD R12形式DXFで最高の精度で書き込みます。)

注意
1.layer_cmdの区切り文字はスペースを使用しないでください。改行(\n、VBならchr(10))もしくはタブ(\t,VBならchr(9))を使って区切ってください。AutoCAD LT2000からスペースを含んだレイヤ名を作成できるようになったからです。
2.使用するCADより前のバージョンの形式のDXFで出力することは情報の欠落を生じます。例えば楕円はR12形式で書き込むとポリラインに変換されます。マルチテキストは複合図形になります。選択したデータを更新しないのであればできるだけ最新の形式で書き込むようにしてください。(LT2000の場合は最新の形式でも問題ありません) 逆にselectするデータタイプが確定していてそれがR12JでもサポートしているタイプならR12J形式を指定すべきです。なぜなら、R13J以降はAutoCAD/LT以外には関係ないグループコード(100番など)が多数出てくるので不必要なメモリを消費するからです。
3.バイナリ形式のDXFファイルは読み込み時うまく読み込めない場合があります。バイナリ形式のDXFはLTCustomizer21がすべてのフォーマットを知っている必要があり、すべて解析しているわけではありませんので、もしうまく読み込めないメッセージが出たら、アスキー形式で書き込むようにしてください。(一応、AutoCADのヘルプに記載されているタイプはすべてサポートしてありますが、バイナリ形式だと若干ヘルプと食い違うものがありました)
4.パラメータoption, layer_cmdに入れる文字列の最後には、区切り文字(改行,スペースなど)を入れてください。 dxfout_optionもDXFファイルの精度(数値)もしくはバイナリファイルの指定(B)を最後に指定しない限り、区切り文字を最後に付加する必要があります。
5.最初の引数(option )に"/UNICODE "(最後にスペースを一つ入れる)という文字列を最初に入れると、全てのパラメータの内容がUNICODEでCADに送られます。SHIFT-JIS(ANSI)では文字化けするレイヤ名を指定する場合に指定してください

参照
get_select_data ()
set_select_data()選択したCADデータの更新関数
update_select_data()更新したデータをAutoCAD/LTに反映する