私はwin32comを使用して、かなりの時間AutoCADにアクセスしています。 makepyユーティリティを適用すると対話型プロンプトでユーザーフレンドリーな体験ができることを知ったので、それを実行して「AutoCAD 2006 Type Library」を追加しました。現在、私がアクセスした共通の属性はもはや利用できません。コードを考えてみましょう:私はmakepy走ったまでは、AutoCAD用のmakepyを介してtypelibを追加しました。現在、win32comはAutoCAD用に動作していません。
acad = win32com.client("AutoCAD.Application")
doc = acad.Documents.Open('mydoc.dwg')
ms = doc.ModelSpace
count = ms.Count #counts all entities in dwg
for i in range(count):
item = ms.Item(i)
if 'block' in item.ObjectName.lower():
print item.Name
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 462, in
__getattr__ raise AttributeError("'%s' object has no attribute '%s'"
(repr(self),attr))
AttributeError: '<win32com.gen_py.AutoCAD 2006 Type Library.IAcadEntity instance
at 0x34894552>' object has no attribute 'Name'
名前は常にブロックのアクセス属性となっています。私はそれをリセットするかどうかを確認するためにWindows用のPythonを再インストールしようとしましたが、動作しませんでした。
私は削除する必要がある実装で別のファイルを作成しますか?
多くのスクリプトは、Name属性に依存しています。あなたが提供できる提案や助けがあれば幸いです。
まあ、問題に結びついたTempディレクトリにあるgen_pyディレクトリが見つかりました。 gen_pyディレクトリを削除すると、それに応じてすべてが再び動作します。 makepyとAutoCADの間のAPIにバグがありますか? 生成したファイルを解析すると、「名前」がacdbBlock/acdbBlockReferenceクラスのプロパティとして認識されました。スクリプトを実行するときになぜ登録していないのか分かりません。 – ionalchemist