2012-02-17 1 views
1

Мне нужно подключить и управлять Autocad через интерфейс Com. Для этой цели я использую Python. В моем первом испытании с очень базовым фрагментом я получил ошибку. КодОшибка соединения Win32Com с Autocad через Python

import win32com.client 
acad = win32com.client.Dispatch("AutoCAD.Application") 
doc = acad.ActiveDocument 
doc.Utility.Prompt("Hello from Python\n") 

и когда я пытаюсь запустить его, я получаю это:

Traceback (most recent call last): 
    File "C:\Users\SBYSMR10\Desktop\recipe-440493-1.py", line 2, in <module> 
    acad = win32com.client.Dispatch("AutoCAD.Application") 
    File "C:\Python26\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch 
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx) 
    File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 108, in _GetGoodDispatchAndUserName 
    return (_GetGoodDispatch(IDispatch, clsctx), userName) 
    File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 85, in _GetGoodDispatch 
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch) 
com_error: (-2147221005, 'Invalid class string', None, None) 

У меня есть Python 2.6 и Autocad LT 2009 установлен. Я искал в сети решение, но не смог найти. Так вы могли бы помочь мне исправить эту проблему?

Заранее спасибо

+1

Привет! :-) Это код подключения AutoCAD-Python из моего блога? Круто! –

+0

насколько я помню, да :) – Shansal

ответ

5

AutoCAD LT версии не поддерживает автоматизацию (discussion in Autodesk group).

Если вы сможете установить полную версию AutoCAD, я предлагаю вам использовать пакет comtypes. С win32com вы не можете добавлять объекты в документ, потому что для параметров AutoCAD требуются VARIANT с typecodes VT_ARRAY | VT_I2 or VT_ARRAY | VT_R8. InsertionPoint.

См. examples in comtypes documentation

+0

Если это сработает, это просто потрясающе. Я надеюсь попробовать и сообщить. –

+0

На самом деле win32com действительно работает (с Acad2010), но для этого потребовалась дополнительная работа. Варианы действительно вызывают проблему, но не потому, что win32com не знает, как с ними справиться. Проблема (в моем случае) заключалась в том, что makepy/genpy неправильно задавал все * вставки * прокси (которые я тщательно исправил вручную). Оказывается, AutoCAD ожидал VARIANT_ARRAY of VARIANTS, но makepy не определял несколько избыточный внешний VARIANT_ARRAY, а только массив типизированных вариантов. Как только я завернул все аргументы функции дополнительным массивом, INSERT ENTITY работал просто отлично! – user2097818

 Смежные вопросы

  • Нет связанных вопросов^_^