Откройте новый экземпляр Autocad через Python

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

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

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

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

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'

Теперь после удаления папки "gen" комтипов в @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))

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, которая была открыта последней.

Другие вопросы по тегам