LTCustomizer技術情報
ツイート以下は以前またたびソフトウェアで書かれたLTCustomizerの技術情報の写しです。
2010年 02月 18 日 15:07:25
update_select_data関数について
AutoCAD/LTのエンティティ情報を取得、更新する関数の中で、最後に図面上に更新情報を反映させるupdate_select_data関数はいかなる場合も成功するとは限りません。
ユーザ様から斜めになった寸法線の情報更新がうまくいかないというメールをいただき、こちらでテストしたところ確かにうまくいかないことを確認いたしました
update_select_data関数は既存図面に新たなるDXFファイルの情報をマージします。このときにAutoCAD LTが読み込んだDXFファイルに問題があると認定すると読み込みを中断してしまうのです。しかしdxfinコマンドではなくopenコマンドで問題のDXFファイルを読み込ませると、問題なく読める場合があります。寸法線の情報のあるDXFファイルはこれに当たります。
このようにupdate_select_data関数はAutoCADLT側でLTCustomizerが出力したDXFファイル入力を拒否されてしまうと正常動作しません。
この問題の対処方法は、
1.アプリケーションがLTCustomizerのselect関数、get_select…関数を使って変更すべきエンティティ情報を取得します。
2.アプリケーションが取得したエンティティ情報を変更して、それをLTCustomizerのcommand2,command関数か、もしくはLTCustomizerのスクリプト関数を使って、AutoCAD LTのコマンド(寸法線情報の更新なら_dimlinearと_dimedit)を実行させます。つまりDXFファイル経由で図面を更新しない方法にするのです。
The update_select_data function does not always succeed.
Though I got the mail which can’t modify oblique dimension line information from the user, I confirmed it.
This problem is because AutoCAD LT does not read DXF file that LTCustomizer generated with oblique dimension line information.
Avoidance method of this problem
1: Gets entity information using select and get_select… function of LTCustomizer.
2: Executes command(ex:_dimlinear,_dimedit) of AutoCAD LT using command or command2 or script functions in LTCutomizer. In the command of AutoCAD LT, writes modified data your application changed.
In short, this method does not use DXF file LTCustomizer generate.
2009年 06月 01 日
LTCustomizer3.01はAutoCAD 2010/LTに既に対応
注意:64bit版AutoCAD/LTでは動作確認していません
1.AutoCAD 2010/LTとの通信の仕方
2.AutoCAD2007~2009との通信の仕方
3.AutoCAD2007からの制限
4.その他
1.AutoCAD 2010/LTとの通信の仕方
AutoCAD 2010と通信するには
init(“18”)
とする必要があります。LT2010は従来通り
init(“0”)
で初期化してください
2.AutoCAD2007~2009との通信の仕方
AutoCAD2009~AutoCAD2007もLTCustomizerは対応している可能性は高いと思われますが、init()で初期化する値がわかりません。これはDDESPYでDDEサーバー名を探す必要があるのですが、レジストリエディタで
HKEY_CURRENT_USER\Software\Autodesk\AutoCAD
直下のサブキーの数値が該当AutoCADの初期化関数init()の引数である可能性が高く、この値を見て初期化してみてください。
3.AutoCAD2007からの制限
制限1
LT2007(AutoCAD2007)からはLTCustomizerが書き出すDXFファイルのテーブル情報を読み込んでくれない問題があります。具体的にはLTC_start_DXF()のビットコード2と4が使用できません。
そのため、サンプルアプリケーションの1つであるLTCustomizer test application(VB6)とLTCustomizer Sample App(VC++)の「output2」ボタンを押してもAutoCAD/LTにエンティティを出力できません。このボタンのハンドラに記述されてある、start_DXF()(C/C++ではLTC_start_DXF())の引数を0か1にすればうまくいきます。
制限2
select()関数でDXFバイナリを選択すると(例:select(“_L\n”,””,”_B”))、AutoCAD2007/LT以降のバージョンでは最新バージョンのDXFバイナリファイル読み込めません。DXFバージョンは2004以下にしてください。
例:select(“_L\n”,””,”V 2004 _B”)
また読み込んだDXFファイルをアップデート(update_select_data () )を実行したい場合はバージョンを2000以下にしてください。
select()関数のヘルプにもかかれていますが、select()の実行は、できるだけ出力するDXFファイルのフォーマットを古いものにするほど問題は発生しにくいです。
制限3
AutoCAD2007/LT以降の最新バージョンDXFファイルは、テキストの文字コードがUTF8になっています。LTCustomizerはShiftJISを前提にしていますので最新バージョンのDXFファイルをselect()で読み取ると、テキスト情報はうまく読み込めません。テキスト情報を読みたい場合はDXFバージョンを2004以下にしてください。
例:select(“_L\n”,””,”V 2004 “)
4.その他
Calculator BrokerはWindows7ではうまく動作しません。これはWindows付属の電卓のクラス名が違うためです。ソースコードの”SciCalc”を”CalcFrame”に変更すれば実行可能になります。
Posted: 2012 年 1月 26 日, カテゴリー LTCustomizer.