Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
Hello again,
I am trying to store the original index (pointindex) of an object in a new list with inserting it at the original position with this
nearestPoints.insert(point['i'], op.GetPoint(point['i']) * op.GetMg())
but i guess I am using the wrong python solution hence python "minimizes" the list to only its content (in this case 1+n items, most of the time just one)
is there a sane solution, googling didn't get me far
I want somthing like this:
# what i want index:37 Vector(-39.182, 97.869, 277.787) # what i get is index:0 Vector(-39.182, 97.869, 277.787)
thank you for your time. mogh
Hi,
The index in the list.insert() method is the local index of the list and therefor not identical to your point index. Assuming you want to store key value pairs, a hash map should be your data type of choice, which could be a dict in Python. The task of building key-value pairs is something Python's comprehension feature lends itself very well to. Something like this:
list.insert()
dict
local_points = op.GetAllPoints() global_points = { i: p * ~op.GetMg() for i, p in enumerate(local_points) } for index, point in global_points.items(): print index, point
Cheers, zipit
Thanks Zipit, still trying to understand it. Need to look for a comprehension tutorial.
hm ... this gives me all points ... ah ok this kinda works
local_points = op.GetAllPoints() point = vpSelect.GetNearestPoint(op, x, y, radius) global_points = { point['i']: op.GetPoint(point['i']) * ~op.GetMg() for i, p in enumerate(local_points) }
Is global_points a dict or a tuple ? not a plain list anymore I guess. I am sorry this is pulling the rug under my feet.
Thank you for your time. mogh
global_points ist a dict. The comprehension was just a more compact way to write this:
global_points
global_points = {} for i, p in enumerate(local_points): global_points[i] = p * ~op.GetMg()
Comprehensions are meant to build data in one go, but given your second example, you probably want to contiously store some proximity data obtained from a ViewportSelect. You cannot do that with a comprehension, you have to build you data structure the old fahsioned way then.
ViewportSelect
I don't have too much to add, @zipit already said everything needed.
Just a side note to retrieve the global position you should do LocalPointPostion * op.GetMg() and not LocalPointPostion * ~op.GetMg().
LocalPointPostion * op.GetMg()
LocalPointPostion * ~op.GetMg()
local_points = {} global_points = {} for i, p in enumerate(local_points): local_points[i] = p global_points[i] = p * op.GetMg()
And finally, keep in mind coping data is expensive even more if your PolygonObject is pretty heavy, its recommended to use PointObject.GetAllPoints that will return a list of all points in local position. Since its build-in C++ it will be way more performant on a huge mesh.
Cheers, Maxime.
Thanks Both of you @zipit @m_adam ,
Quote: "keep in mind coping data is expensive"
I had the feeling that the very nice example I am building on has some limitations (speed) as you mentioned. I guess I have to re organice this section (selecting points) and clean up.
My aproach as a beginner is more or less like this.
I have an old C++ code as an cheat sheet to get a general idea how a perfomant code could look like (selecting & working just inside one big point object list, as far as I understand it) , but at this stage I can't combine them jet hence the different selecting aproach.
Anyway I try to get somethingmore robust ...