Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Variant type object arrays
#1
Good day everyone,

I've been making some scripts with Autohotkey before and decided to move forwards and learn python(i know there is ironpython for making .NET scritps for autocad, but for now, id like to learn "basics").
Just started, few days ago, and wanted to make COM object to connect to autocad.
I managed to do everyting and connect to COM object with the help of "pyautocad" library.
where i'm stuck is in making selection set filter parameters, as its is not documented in pyautocad(maybe?).

So, in Autohotkey script looks like this(syntax is simmilar, shouldnt be problem as example):
So, i make 2 objects/variables : FilterType, FilterData.
FilterType := VarArrayCreate(VT_I2 := 2, "0", "8") # i send 3 variables to my function VarArrayCreate(below), with variables VT_I2 := 2 is same as just sending "2", but we can see datatype more clearly, not just digit. so, 2 stands for "16-bit signed int" in autohotkey, for more read here - autohotkey Object types. , next variable is "0" - autocad dxfCode, baiscly 0 is for autocad object types, like: lines, circle, polyline, etc..., last variable "8" - same, as 0, just for Layers.
FilterData := VarArrayCreate(VT_VARIANT := 0xC, "line", "LayerName") # Basicly same as above, just the type of 0xC is VARIANT.
So with FilterType i call funtion below. and create array object of "16-bit signed int", and with FilterData "VARIANT" type array.


VarArrayCreate(Type=0xC, Values*) #VarArrayCreate - this is function name, in python case, class ???
{
arr := ComObjArray(Type, Values.MaxIndex()) #this basicly creates ComObject with datatype that have sent parameters.
for i, v in Values{
arr[i-1] := v # -1 is needed becouse in autohotkey array starts with 1, and in autocad it should start from 0
}
return arr
}
So in General i need two arrays, one of 16bit integers, and other with variant type.
Looks kinda simple function, yet i cant figure out how to create such object array with specific type of data.
Any help appreciated,
And please make short example with core only, and not 300 lines codes, im new, i wont figure out such things(unless they work and all i need to send my variables :) )
To provoke on answer, one should ask, is Python inferior in object based arrays than AutoHotkey ? :D
Reply
#2
(Jul-28-2018, 05:37 PM)anbra Wrote: where i'm stuck is in making selection set filter parameters, as its is not documented in pyautocad(maybe?).
did you check http://pyautocad.readthedocs.io/en/latest/

what does selection set filter parameters mean?
(Jul-28-2018, 05:37 PM)anbra Wrote: And please make short example with core only, and not 300 lines codes, im new, i wont figure out such things(unless they work and all i need to send my variables :) )
To provoke on answer, one should ask, is Python inferior in object based arrays than AutoHotkey ? :D

This is not going to provoke answers... Show us your code so far and we can try to help from there...
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#3
Code so far :
import pyautocad
import os
import comtypes
import time

from pyautocad import *
ACAD = Autocad(create_if_not_exists=True)
try:
    ACAD.ActiveDocument.SelectionSets.Item("SS2").Delete()
except:
    pass 
SS2obj = ACAD.ActiveDocument.SelectionSets.Add("SS2")
FilterType = "0" #it should be array of integers
FilterData = "Line" # this should be array of variants(strings)
SS2obj.Select("5","","", FilterType, FilterData) #[url=https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-ActiveX/files/GUID-A809CD71-4655-44E2-B674-1FE200B9FE30-htm.html]Here[/url]link whats needed in autocad, cant link directly, go to selectionSet, Select(under Methods) #Also, noticed i cannot make empty commas. ",,," so i guess ,"","", should work ?
SS2obj.Highlight("1")
This how it looks in autohotkey wihtout comments:
SS2obj := ACAD.ActiveDocument.SelectionSets.Add("SS2")
FilterType := VarArrayCreate(2, "0", "8")		
FilterData := VarArrayCreate(0xC, "Line", "LayerName") 
SS2obj.Select("5",,, FilterType, FilterData)

VarArrayCreate(Type=0xC, Values*)
{
	arr := ComObjArray(Type, Values.MaxIndex())
	for i, v in Values{ 
		arr[i-1] := v
		; MsgBox % v "," i
	}
	return arr
}
This is the error Visual Studio shows, if this helps :
_ctypes.COMError: (-2147352567, 'Exception occurred.', ('Invalid argument FilterType in Select', 'AutoCAD', 'C:\Program Files\Autodesk\AutoCAD 2018\HELP\OLE_ERR.CHM', -2145320939, None))
Also, quick note. there is in pyautocad some arrays with types in the link you gave above, but there are no "variant" array, and integer of 32 bit is burried in library, for me as newb, a bit hard to "extract" into simple function.
This is the array given in pyautocad of integers
pyautocad.types.aInt(*seq)
Returns array.array of ints (ā€˜lā€™ code) for passing to AutoCAD
Reply
#4
Just a bump, with some notes.
Can anyone at least lead me on the path, how to define variables ?
Is there any functions to make variables, 16-bit signed int, and/or, "variant" ?
something like this returns 32 bit integer ? :
MyVar = float(MyVar)
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  declaring object parameters with type JonWayn 2 853 Dec-13-2022, 07:46 PM
Last Post: JonWayn
Star Type Error: 'in' object is not callable nman52 3 3,328 May-01-2021, 11:03 PM
Last Post: nman52
  TypeError: 'type' object is not subscriptable Stef 1 4,439 Aug-28-2020, 03:01 PM
Last Post: Gribouillis
  Type coercion with Numpy arrays Mark17 2 2,486 Jul-24-2020, 02:04 AM
Last Post: scidam
  isinstance() always return true for object type check Yoki91 2 2,498 Jul-22-2020, 06:52 PM
Last Post: Yoki91
  AttributeError: type object 'FunctionNode' has no attribute '_TestValidateFuncLabel__ binhduonggttn 0 2,219 Feb-19-2020, 11:29 AM
Last Post: binhduonggttn
  Type hinting - return type based on parameter micseydel 2 2,425 Jan-14-2020, 01:20 AM
Last Post: micseydel
  Object of type set is not JSON serializable enigma619 5 12,127 Dec-19-2019, 03:30 PM
Last Post: enigma619
  type of object as a string Skaperen 1 2,249 Dec-02-2019, 08:01 AM
Last Post: midarq
  Object of type Scoreboard is not JSON serializable lsepolis123 9 9,344 Aug-13-2019, 11:22 AM
Last Post: lsepolis123

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020