Using AutoCAD via OLE works.

However, there is a problem regarding an argument which is of type VT_VARIANT and needs to be an array of three VT_R8 values.

Case in question: addCircle(center,radius), the online documentation for this method is at: <https://help.autodesk.com/view/OARX/2022/ENU/?guid=GUID-837C702F-91A7-445B-8713-3099B94664BE>. This reference also depicts a VBA and a Lisp program that uses this method.

The following ooRexx program tries to use the addCircle() method, but unfortunately does not work, an OLE error 80070057 (wrong argument) gets raised:

   say "... creating AutoCAD.Application"
   myApp = .oleobject~new("AutoCAD.Application")
   myApp~visible = .true      -- show window
   myDwg = myApp~ActiveDocument
   say "myDwg~name:" myDwg~name
   Space = myDwg~ModelSpace  -- space to draw
   say "space~name:" space~name
   center=(0,0,0)       -- array for center point
   radius=5.7
   res=space~addCircle(center,radius)   -- <-- does not work
   myApp~quit

---

When using OLEObject to learn about the published interfaces to "space" (a model space) yields the following type information for AddCircle:

Using both information, the AutoCAD and the OLEObject supplied one, I tried to use OLEVariant to cast the Center argument as:

 * Rexx array as: VT_ARRAY,VT_R8
 * Rexx arrayas: VT_VARIANT,VT_ARRAY

Then creating OLEVariants of type VT_R8 for the center coordinates (x,y,z) and storing them in a Rexx array and then cast again as above, to no avail.

Also casting Radius to VT_R8 and combining the invocations with all the above 
casts.

All attempts yield the OLE error 80070057.

(Originally left out the third param argument, then explicitly supplied 'IN' to 
no avail.)

Maybe I am doing something obvious wrong (the test code is at the end, followed 
by its output).

Any help, any ideas appreciated!

---rony

P.S.: If you have AutoCAD you need to install the appropriate OLE support from <https://knowledge.autodesk.com/support/autocad/downloads/caas/downloads/content/download-the-microsoft-vba-module-for-autocad.html>.

P.S.S.: Test code:

   say "... creating AutoCAD.Application"
   myApp = .oleobject~new("AutoCAD.Application")
   say "sleeping 5 secs ..."
   call SysSleep 5
   myApp~visible = .true      -- show window
   myDwg = myApp~ActiveDocument
   say "myDwg~name:" myDwg~name
   Space = myDwg~ModelSpace
   say "space~name:" space~name

   -- call createOleInfo space, "AutoCad ModelSpace", 0
   -- call createOleInfo space, "AutoCad ModelSpace", 1

   center=(0,0,0)
   radius=5.7
   res=addCircle(space,center,radius)
   say
   vt8radius=.oleVariant~new(radius, "VT_R8", "IN")
   vCenter=.oleVariant~new(center,"VT_VARIANT,VT_ARRAY", "IN")

   res=addCircle(space,center,vt8radius)
   res=addCircle(space,vCenter,radius)
   res=addCircle(space,vCenter,vt8radius)
   say

   vCenter=.oleVariant~new(center,"VT_ARRAY,VT_R8", "IN")
   res=addCircle(space,vCenter,radius)
   res=addCircle(space,vCenter,vt8radius)
   say

   say "="~copies(70)
   vtr8_0=.oleVariant~new(0,"VT_R8")
   vArr=(vtr8_0, vtr8_0, vtr8_0)
   varArr=.oleVariant~new(vArr, "VT_VARIANT,VT_ARRAY", "IN")
   res=addCircle(space,varArr,radius)
   res=addCircle(space,varArr,vt8radius)
   say

   vArr=(vtr8_0, vtr8_0, vtr8_0)
   varArr2=.oleVariant~new(vArr, "VT_ARRAY,VT_R8", "IN")
   res=addCircle(space,varArr2,radius)
   res=addCircle(space,varArr2,vt8radius)


   myApp~quit



   ::routine addCircle
      use arg space, center, radius
      signal on syntax
      say "-"~copies(70)
      say "arrived in addCircle, space:" space
      info="center:"
      if center~isA(.oleVariant) then info = info "oleVariant(" -
         "varValue=("center~!varValue_~toString('L',',')"), varType="center~!varType_", 
paramflags="center~!paramflags_ ")"
      else
         info=info "("center~toString('L',',')")"
      say "addCircle(), center:"
      say "09"x info

      info="radius:"
      if radius~isA(.oleVariant) then info = info "oleVariant(" -
         "varValue="radius~!varValue_", varType="radius~!varType_", 
paramflags="radius~!paramflags_ ")"
      else
         info=info radius
      say "addCircle(), radius:"
      say "09"x info
      res=space~addCircle(center,radius)
      say "addCircle(): OK!"
      return res
   syntax:
      co=condition('obj')
      say "addCircle(): syntax error raised ..."
      say co~condition", line:" co~position "code:" co~code co~errortext "msg:" 
co~message
      say co~stackframes~makearray
      return .nil

P.S.S.S.: Output of running the test code:

   E:\test>rexx test.rex
   ... creating AutoCAD.Application
   myDwg~name: Zeichnung1.dwg
   space~name: *Model_Space
   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: (0,0,0)
   addCircle(), radius:
             radius: 5.7
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        13 *-* res=addCircle(space,center,radius)

   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: (0,0,0)
   addCircle(), radius:
             radius: oleVariant( varValue=5.7, varType=VT_R8, paramflags=IN )
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        18 *-* res=addCircle(space,center,vt8radius)
   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: oleVariant( varValue=(0,0,0), varType=VT_VARIANT,VT_ARRAY, 
paramflags=IN )
   addCircle(), radius:
             radius: 5.7
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        19 *-* res=addCircle(space,vCenter,radius)
   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: oleVariant( varValue=(0,0,0), varType=VT_VARIANT,VT_ARRAY, 
paramflags=IN )
   addCircle(), radius:
             radius: oleVariant( varValue=5.7, varType=VT_R8, paramflags=IN )
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        20 *-* res=addCircle(space,vCenter,vt8radius)

   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: oleVariant( varValue=(0,0,0), varType=VT_ARRAY,VT_R8, 
paramflags=IN )
   addCircle(), radius:
             radius: 5.7
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        24 *-* res=addCircle(space,vCenter,radius)
   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: oleVariant( varValue=(0,0,0), varType=VT_ARRAY,VT_R8, 
paramflags=IN )
   addCircle(), radius:
             radius: oleVariant( varValue=5.7, varType=VT_R8, paramflags=IN )
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        25 *-* res=addCircle(space,vCenter,vt8radius)

   ======================================================================
   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: oleVariant( varValue=(an OLEVariant,an OLEVariant,an 
OLEVariant), varType=VT_VARIANT,VT_ARRAY, paramflags=IN )
   addCircle(), radius:
             radius: 5.7
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        32 *-* res=addCircle(space,varArr,radius)
   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: oleVariant( varValue=(an OLEVariant,an OLEVariant,an 
OLEVariant), varType=VT_VARIANT,VT_ARRAY, paramflags=IN )
   addCircle(), radius:
             radius: oleVariant( varValue=5.7, varType=VT_R8, paramflags=IN )
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        33 *-* res=addCircle(space,varArr,vt8radius)

   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: oleVariant( varValue=(an OLEVariant,an OLEVariant,an 
OLEVariant), varType=VT_ARRAY,VT_R8, paramflags=IN )
   addCircle(), radius:
             radius: 5.7
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        38 *-* res=addCircle(space,varArr2,radius)
   ----------------------------------------------------------------------
   arrived in addCircle, space: an OLEObject
   addCircle(), center:
             center: oleVariant( varValue=(an OLEVariant,an OLEVariant,an 
OLEVariant), varType=VT_ARRAY,VT_R8, paramflags=IN )
   addCircle(), radius:
             radius: oleVariant( varValue=5.7, varType=VT_R8, paramflags=IN )
   addCircle(): syntax error raised ...
   SYNTAX, line: 66 code: 92.906 OLE error. msg: OLE exception: Code: 80070057 
Source: unavailable Description: unavailable.
           *-* Compiled method "UNKNOWN" with scope "OLEObject".
        66 *-* res=space~addCircle(center,radius)
        39 *-* res=addCircle(space,varArr2,vt8radius)

   E:\test>



_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to