2013-08-15 2 views
2

누구나 Autocad에서 Python을 사용해 본 경험이 있습니까? 나는 Python을 통해 Autocad의 새로운 인스턴스를 열 수 있는지, 그리고 PyAutocad가 잘 작동 하는지를 테스트하기 위해 노력 중이다. (어떤 제안이라도 있으면 다른 제안을해라.)Python을 통해 Autocad의 새로운 인스턴스 열기

어쨌든 doc을 기반으로한다. (https://pypi.python.org/pypi/pyautocad/#downloads) -이 코드 라인은 그렇게해야한다고 말하고 있지만 아직까지는 아무 것도 일어나지 않았습니다.

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' 

@reclosedev 당 comtypes ' "세대"폴더를 삭제 한 후, 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, 그 점에 대해서 미안하다. 역 추적도있다. Thanks @JosephDunn – prestonsmith

+1

어떤 AutoCAD 버전을 사용합니까? LT가 아닌지 확인하십시오. 또한 2010보다 높은 경우 [AutoCAD VBA 모듈] (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#을 통해 모든 것을 컴파일했습니다. 즉, 다른 영역으로 이동하고 있기 때문에 VS2013 플러그인을 사용하여 Python으로 돌아갈 것입니다. @Locke하지만 대답 주셔서 감사합니다! – prestonsmith