RickWork Posted September 26, 2006 Share Posted September 26, 2006 Hello, I'm working with Vex and I'm trying to get an atribute to hold a value based off a dynamic condition. I'm calculating the distance between 2 points. If the distance is less than 1, I want to either add an attribute (with a val of 1) or create a point group called "KurtisBlow". The catch is, once the point is inside the group (or the atrribute has a value of 1), I don't want them to be removed from the group (or attribute value changed) if the distance happens to change. I want to keep history that these points were once within a distance of 1. I hope I'm clear explaining what i'm trying to achieve. In other languages I would create an accumilating arrary or list of the point numbers and then perform an operation on that list. Any ideas would be most welcome. Thanks! Here's what I have so far but of course it's not working...... #pragma opmininputs 2 #pragma opmaxinputs 2 sop HITME() { vecotor oP; float dist; // Import P from OPinput2 import("P", oP, 1, 0); // Calc dist bet cur pt and oP dist = distance(P, oP); // add dist attr for debugging addattribute("dist2oP", dist); if(dist <= 1)} addatribute("KurtisBlow", 1); } Quote Link to comment Share on other sites More sharing options...
edward Posted September 27, 2006 Share Posted September 27, 2006 Generally, SOPs (and Objects) are not history dependent. There are exceptions but not with VEX. I'm sure everyone will have their favourite solution to this problem. Here's one by using the Group POP's Preserve Group option. dynamic_proximity.hip Quote Link to comment Share on other sites More sharing options...
symek Posted September 27, 2006 Share Posted September 27, 2006 Generally, SOPs (and Objects) are not history dependent. There are exceptions but not with VEX. I'm sure everyone will have their favourite solution to this problem. Here's one by using the Group POP's Preserve Group option. edward! Please! Could you explain whata's going on in your hip! Sorry, but I don't get it. What this POP does? Quote Link to comment Share on other sites More sharing options...
edward Posted September 27, 2006 Share Posted September 27, 2006 The Group POP in the hip file adds all the points that are found in the "inside" group from the second input of the popnet (ie. /obj/model/group1) into its own group (also called "inside"). Normally, it creates a group with only those points that match its condition (ie. the haspoint() expression) but with Preserve Group enabled, it will only add to its group, not remove. The reason why this works is because in POPs, the same geometry is being reused across frames (as opposed to SOPs which make a new copy each time). The Source POP is used to essentially cache a copy of the points from input1 (at frame 1), effectively doing what Rick talks about creating a separate list and accumulating. Finally, the copy_from_popnet AttribCreate SOP copies the result of the "inside" group in the popnet as an attribute (also named "inside") which the Paint SOP then uses for its visualization. Perhaps I confused things a bit by calling everything "inside". The only other trick in the .hip file is to copy spheres to the input2 geometry and then using the Bounding Object option of the Group SOP to effectively do what Rick was trying to do with his distance calculations. BTW, if you happen to see anything weird in the results, it will be from the Cache SOP (cache1), because it attempted to cache the POP while going backwards which can't work for POPs. To fix this, you can go to frame 1, click on Clear Cache, hit play to cache the POP simulation again. Quote Link to comment Share on other sites More sharing options...
symek Posted September 27, 2006 Share Posted September 27, 2006 Thank you edward! Now I think I got it... more or less. Gosh! I used to have the same problem and I didn't find the solution: how to add points to groups but never take them off from it... but it was 6 months ago again, thanks for your explanation! cheers, Sy Quote Link to comment Share on other sites More sharing options...
edward Posted September 27, 2006 Share Posted September 27, 2006 jlait notes that using the Bounding Object option with spheres to this type of operation is not that efficient. Using the VEX point clouds to do it would be the most efficient. Quote Link to comment Share on other sites More sharing options...
RickWork Posted September 27, 2006 Author Share Posted September 27, 2006 jlait notes that using the Bounding Object option with spheres to this type of operation is not that efficient. Using the VEX point clouds to do it would be the most efficient. Cheers Edward. That sure does work. I was hoping to do it all in vex to exercise my vex muscles but using the group pop makes sense. I'll investigate point clouds. Thanks! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.