2013-08-15 1 views
2

Есть ли у кого-нибудь опыт использования Python с Autocad? Я просто пытаюсь как тест проверить, могу ли я открыть новый экземпляр Autocad через Python, и хотя PyAutocad работал хорошо (не стесняйтесь предлагать другие предложения, если они есть)Открыть новый экземпляр Autocad через Python

В любом случае на основе документа (https://pypi.python.org/pypi/pyautocad/#downloads) - он говорит, что эти строки кода должны это делать, но пока ничего не случилось.

from pyautocad import Autocad, APoint 
    acad = Autocad() 
    acad.prompt("Hello, Autocad from Python\n" 

Просто эти строки кода должны генерировать информацию о командной строки, но вместо этого приводит к примерно 50 линий на сумму TRACEBACK (которую я могу размещать, а если кто-либо заинтересован) - какие-нибудь идеи?

Traceback (most recent call last): 
File "<pyshell#5>", line 1, in <module> 
acad.prompt("Hello, Autocad") 
File "C:\Python27\lib\site-packages\pyautocad\api.py", line 153, in prompt 
self.doc.Utility.Prompt(u"%s\n" % text) 
File "C:\Python27\lib\site-packages\pyautocad\api.py", line 65, in doc 
return self.app.ActiveDocument 
File "C:\Python27\lib\site-packages\pyautocad\api.py", line 54, in app 
self._app = comtypes.client.GetActiveObject('AutoCAD.Application') 
File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 180, in GetActiveObject 
obj = comtypes.GetActiveObject(clsid, interface=interface) 
File "C:\Python27\lib\site-packages\comtypes\__init__.py", line 1165, in GetActiveObject 
oledll.oleaut32.GetActiveObject(byref(clsid), None, byref(p)) 
File "_ctypes/callproc.c", line 941, in GetResult 
WindowsError: [Error -2147221021] Operation unavailable 

После добавления модуля VBA, то отслеживающий теперь гласит:

Traceback (most recent call last): 
    File "<pyshell#4>", line 1, in <module> 
    acad.prompt("Hello") 
    File "C:\Python27\lib\site-packages\pyautocad\api.py", line 153, in prompt 
    self.doc.Utility.Prompt(u"%s\n" % text) 
    File "C:\Python27\lib\site-packages\pyautocad\api.py", line 65, in doc 
    return self.app.ActiveDocument 
    File "C:\Python27\lib\site-packages\pyautocad\api.py", line 54, in app 
    self._app = comtypes.client.GetActiveObject('AutoCAD.Application') 
    File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 183, in GetActiveObject 
    return _manage(obj, clsid, interface=interface) 
    File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 188, in _manage 
    obj = GetBestInterface(obj) 
    File "C:\Python27\lib\site-packages\comtypes\client\__init__.py", line 112, in GetBestInterface 
    interface = getattr(mod, itf_name) 
AttributeError: 'module' object has no attribute 'IAcadApplication' 

Теперь после удаления comtypes' ген "папку за @reclosedev, Autocad теперь открывается, но строки текста все равно не будет появляются в командной строке - отслеживающий гласит:

Traceback (most recent call last): 
    File "<pyshell#4>", line 1, in <module> 
    acad.prompt("Hello") 
    File "C:\Python27\lib\site-packages\pyautocad\api.py", line 153, in prompt 
    self.doc.Utility.Prompt(u"%s\n" % text) 
    File "C:\Python27\lib\site-packages\pyautocad\api.py", line 65, in doc 
    return self.app.ActiveDocument 
    File "C:\Python27\lib\site-packages\pyautocad\api.py", line 59, in app 
    self._app.Visible = self._visible 
    File "C:\Python27\lib\site-packages\comtypes\client\dynamic.py", line 116, in __setattr__ 
    dispid = self._comobj.GetIDsOfNames(name)[0] 
    File "C:\Python27\lib\site-packages\comtypes\automation.py", line 643, in GetIDsOfNames 
    self.__com_GetIDsOfNames(riid_null, arr, len(names), lcid, ids) 
COMError: (-2147418111, 'Call was rejected by callee.', (None, None, None, 0, None)) 
+0

Отслеживание было бы полезно. Я бы сказал, что большинство людей, читающих этот вопрос, не имеют установленного AutoCAD, поэтому они не смогут проверить код, который вы опубликовали. –

+0

Gotcha, извините, что у меня тоже есть трассировка. Спасибо @JosephDunn – prestonsmith

+1

Какую версию AutoCAD вы используете? Убедитесь, что это не LT. Кроме того, если он выше 2010 года, убедитесь, что у вас установлен [AutoCAD VBA Module] (http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=12715668&linkID=9240618). – reclosedev

ответ

1

Рассматривали ли вы IronPython?

http://through-the-interface.typepad.com/through_the_interface/2009/03/using-ironpython-with-autocad.html

Вот краткий пример того, как может быть использована:

import clr 
import System 

from System import Type, Activator 

acApp = Activator.CreateInstance(Type.GetTypeFromProgID("AutoCAD.Application")) 
acApp.Visible = 1 
acApp.ActiveDocument.SendCommand("(Princ \"Hello World from Python!\")(Princ)\n") 

Очевидно, что ProgId будет соответствовать какой версии AutoCAD последний был открыт.

+0

Я закончил с помощью VisualStudio и скомпилировал все это с помощью C# - так как я переезжаю на другую территорию, я, вероятно, вернусь на Python с плагином VS2013. Спасибо за ответ, хотя @Locke! – prestonsmith

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

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