Hello,

I'm having problem implementing a "AddPoint" method in AutoCAD.  From the search I've done,  seems the problem is variable type: I supplied a list as the x,y,z coordinates of a point, why seems what is expected is a Variant (three-element array of doubles).

The python code I tested with is:

[code]

import win32com.client

acad = win32com.client.Dispatch("AutoCAD.Application")
acad.WindowState = 3
acad.Visible = 1

doc = acad.ActiveDocument
ms = doc.ModelSpace
print str(ms.ObjectName)
try:
    ms.AddPoint([0.0, 0.0, 0.0])   # this line gives the problem
finally:
    print "\nTest finished."

[/code]

This is the error I got:

Traceback (most recent call last):
  File "<string>", line 65, in run_nodebug
  File "C:\Programming\Python\Codes\acad_add_point.py", line 11, in ?
    ms.AddPoint([0.0, 0.0, 0.0 ])
  File "C:\Python24\lib\site-packages\win32com\gen_py\1EFD8E85-7F3B-48E6-9341-3C8B2F60136Bx0x1x1.py", line 12688, in AddPoint
    ret = self._oleobj_.InvokeTypes(1562, LCID, 1, (9, 0), ((12, 1),),Point
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147024809), None)


python code for AddPoint method from makepy:

# Result is of type IAcadPoint
def AddPoint(self, Point=defaultNamedNotOptArg):
    """Creates a Point object at a given location"""
    ret = self._oleobj_.InvokeTypes(1562, LCID, 1, (9, 0), ((12, 1),),Point)
    if ret is not None:
        ret = Dispatch(ret, 'AddPoint', '{35AF3AB5-755E-4AC9-8BAF-31B532870751}', UnicodeToString=0)
    return ret


And finally, below is the VBA doucumentation provided with AutoCAD.

Signature

RetVal = object.AddPoint(Point)

Object

ModelSpace Collection, PaperSpace Collection, Block
The object or objects this method applies to.

Point

Variant (three-element array of doubles); input-only
The coordinates of the point to be created.

RetVal

Point object
The newly created Point object.

Example:

Sub Example_AddPoint()
    ' This example creates a point in model space.
    Dim pointObj As AcadPoint
    Dim location(0 To 2) As Double
   
    ' Define the location of the point
    location(0) = 5#: location(1) = 5#: location(2) = 0#
   
    ' Create the point
    Set pointObj = ThisDrawing.ModelSpace.AddPoint(location)
    ZoomAll
   
End Sub

Sorry for the long post.  I've actually spent more than 2 or 3 hours searching the web for an answer.  And I did see lots of discussions related to this sort of issue: safearray, variant array, etc..  But I didn't see a definite answer.  More than likely it is because I'm a beginner in Python and could not make sense out of those discussion.  Can someone elaborate a little bit on this? 

Thanks a lot for just reading my long message.

--

Regards,
- wcc

_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to