すべてを正しく機能させることは、本来あるべきと思われるよりも多くの作業になる可能性があります。Pythonを使用してデータを読み取る。そんなに悪くない。データの書き込み、少しトリッキー。カジュアルユーザー/初心者; あなたが何に入っているかについて警告されます。
おそらく必要なもの
autolispに精通している場合は、非常に役立ちます。これは、autolispがより適切に機能し(この場合)、より適切に文書化され、より適切に統合されるためです。あなたに言っていません。(lisp関数のvlax-およびvla-シリーズを参照してください)。
次に、コマンドラインからwin32com make_pyおよびgen_pyスクリプトが必要です。または、ほとんどがPythonのままでwin32com.client.gencodeを使用できます。
非常に醜いテキストを視覚的に解析する準備をしてください(そして私はlisp =]についてさえ話していませんでした)。失敗する準備をして、その理由を見つけるために興奮してください。
そのほとんどはCOMバリアントと関係があります。そして、Variant-Variant-Arraysのような奇妙なものを手に入れます。win32com.client.pythoncomをチェックアウトすると、すべてのデータ型が整数にマップされていることがわかります。(たとえば、VT_BOOLは11です)。
ニッティグリッティ
次にModelSpace.AddCircleを試行するときは、取得するデバッグ出力に注意してください。InvokeTypesに渡されるすべてのパラメーターは、注意する必要があるものです...(これは、Autocad登録済みインターフェイスのmake-py出力から取得されます。
def AddLine(self, StartPoint=defaultNamedNotOptArg, EndPoint=defaultNamedNotOptArg):
ret = self._oleobj_.InvokeTypes(
1581, LCID, 1, (9, 0), ((12, 1), (12, 1)),StartPoint, EndPoint)
if ret is not None:
ret = Dispatch(ret, u'AddLine', '{DF524ECB-D59E-464B-89B6-D32822282778}'
これにより、必要なCOMタイプwin32com THINKSが正確にわかるため、少なくともそれに一致していることを確認してください。
多くの入力関数が実際に文書化され、間違って呼び出されていることがわかりました(AutoLispで何度も行ったり来たりしてこれを学びました)。上に表示されているものは、外側に1581の値(実際にはデータ型ではなくクラス名のようなもの)があり、基本的に(DISPATCH、EMPTY):(9,0)と言うタプル、そしてVT_VARIANTS:((12,1)、(12,1))。
通常、COMが期待していた外部ラッパーが欠落しており、何らかの理由でmake-pyはこれを認識しません。広範なAutoLispvlax-ナンセンスを実行すると、それらがそのラッパーの追加ラッパーであることがわかります。それはVARIANT_ARRAYか、文字通りVARIANT-VARIANT-ARRAY(4つのポインターか何か)のどちらかだと思います。このためのコードは(vt_array = 8192、vt_variant = 12)です。
申し訳ありませんが、詳細は覚えていませんが、((12,1)、(12,1))を読んでいる部分は、(8192、12、((12,1)、(12,1)))になるはずです。、またはそのようなもの。あなたがそれがどうあるべきかを理解したとしても、彼らが迅速な解決策であるかどうかはわかりません。AutoCAD 2010の時点で、これは私にとって、信じられないほど大きなgen_py出力を調べ、本当に必要な関数を見つけ、COMが期待していたものと一致するようにInvokeTypes()呼び出しを手動で変更することを意味しました。
その後、すべてが期待どおりに機能しました。
考えられる回避策
COMは醜いです。Pythonを初めて使用するが、AutoCADに半経験がある場合(つまり、かなり大量の自動化を実行したい場合)は、python->win32com->AutoCADパイプラインに近づかないでください。LISPを使用します。それが私が言うのが苦痛である限り、あなたはあなたのPythonの苦痛に伴う非常に多くのLISPテストケースとデバッガーを書くことになるでしょう、あなたはただコミットしたほうがよいでしょう。
- Ironpythonと.NET
- このインターフェースは一般的にCOMよりもはるかにサポートされていると思います
- Visual Studio Professional(2008以降)
- 私は公式のVS-Proツール(PythonWINとMINGWを使用しました)を使用したことはありません。win32comがAutoCADを処理する方法を変更する追加の魔法が提供されているかどうかはわかりません。公式のAutoCADARX拡張機能がStudioプロジェクトでソースを提供していることを知っています。最悪の場合、実際のドキュメントが手元にあり、Python-AutoCADのこのトピック全体が汚染されます。