2016-03-27 16 views
0

I Python bin mit einem Block in AutoCAD document.The Code einzufügen unten:mit Python einen Block in AutoCAD Dokument einzufügen, erfolglos

import comtypes.client 
app = comtypes.client.GetActiveObject("AutoCAD.Application") 
ms = app.ActiveDocument 
files = r"C:\Users\TOM\Desktop\02python\516.00-501.50.dwg" 
insertionPnt = [0,0,0] 
ms.ModelSpace.InsertBlock(insertionPnt, files, 1, 1, 1, 0) 

der Block in das Dokument eingefügt wird, aber der Modellbereich doesn‘ t anzeigen. Die Ausnahmen sind:

File "C:\Users\TOM\Documents\002pybookcode\backup_code\test.py", line 10, in <module> 
    ms.ModelSpace.InsertBlock(insertionPnt, files, 1, 1, 1, 0) 
_ctypes.COMError: (-2147024809, '\xb2\xce\xca\xfd\xb4\xed\xce\xf3\xa1\xa3', (None, None, None, 0, None)) 

Ich habe dieses Problem gelöst, und der folgende Code funktioniert.

import win32com.client 
import pythoncom 

def POINT(x,y,z): 
    return win32com.client.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_R8, (x,y,z)) 

acad = win32com.client.Dispatch("AutoCAD.Application") 
doc = acad.ActiveDocument 
ms = doc.ModelSpace 
files = r"C:\Users\TOM\Desktop\02python\516.00-501.50.dwg" 
doc.Utility.Prompt("hello World\n") 
pt1= POINT(0.0,0.0,0.0) 
ms.InsertBlock(pt1, files, 1.0,1.0,1.0, 0) 
+1

dank @Padraic Cunningham –

+0

Haben Sie versucht, suchen, was COM-Fehler -2147024809 bedeutet? Scheint so, als wäre das ein wichtiger Hinweis, was falsch ist ... – martineau

+0

Entschuldigung, ich weiß nicht, wie ich den Code hervorheben soll. –

Antwort

0

Obwohl Sie schien eine Lösung für das Problem zu finden, fand ich nur eine einfachere Lösung direkt in der comtypes Dokumentation http://www.pythonhosted.org/comtypes/#converting-data-types, wo das das Problem erklären und haben ein Beispiel für einen Punkt in Autocad einsetzen.

Kurz gesagt, ändern Sie Ihr Code:

import array 
import comtypes.client 
app = comtypes.client.GetActiveObject("AutoCAD.Application") 
ms = app.ActiveDocument 
files = r"C:\Users\TOM\Desktop\02python\516.00-501.50.dwg" 
insertionPnt = array.array('d', [0,0,0]) 
ms.ModelSpace.InsertBlock(insertionPnt, files, 1, 1, 1, 0)