Hello.
I am trying to put a grid of points on a surface that can be selected from Revit. The important thing is that I want the points to be at a specific distance from the start point of the surface’s horizontal edge, which I call the A set. After creating the A set, I want the A set to be copied or multiplied to another set of points that are on the surface’s vertical edge from the start point of the vertical edge with a specific distance, which I call the B set. To cut it short I want the A set to be copied to the B set.
What solutions are possible for the rest of the node scripts to solve this issue?
Thank you, Daan,
but my points’ coordinates rely on the surface’s edge that can be selected from a Revit project, which is being divided into a desired segment length from the start point of the line, so if the length of the edge changes, the last segment might not be equal to the other segments. This is true on both of the edges, Vertical and Horizontal.
Another thing is that the selected face might be located on be on the Y/Z or it might have X/Y/Z coordinates or the face’s edge might be an arc. It depends on the form, the length and the position of the face at the coordinate system.
I see, you could however approach a surface, even a curved one, in the same way.
Using, for example, the Surface.PointAtParameter node you could place points (transformed to parameters along your edges) as parameter-values (from 0 to 1).
My first suggestion would be to echo @Daan and use PointAtParameter to create the whole array based on U,V locations. If that’s not possible you could create Lines at each point (as long as you know their direction) and find the intersections.
thank you @Nick_Boyts and @Daan. UV’s is the best solution, however, my issue with UVs is that I cannot determine the distance between lines of Us and Vs and it doesn’t have properties of Autocad’s measure command.
Is it possible to determine the distance between lines of Us and Vs. I don’t want them to divide a surface into equal divisions, I need equal segment length, and if the final part is not equal to other segments it would not be important.
We’d likely have to know how you’re initially getting the edge points, but you should be able to base it off the same logic. The difference between equal divisions and equal segments is just in how you create your U,V sequences.
UVs are relative to the geometry, meaning they range from 0 to 1. You don’t really use a length directly when dealing with UVs. You would convert the length to relative parameter or percentage of the geometry.
Just like you can use PointAtParameter to define a point at a given relative location, you can go the opposite direction with UVParameterAtPoint to get the relative UV location from a given point. So in your case you would get the parameters from the points and then create a new UV array using those parameters.
I would recommend you find the points based on length first, pretty much as you are. However you should have only one continuous list of nodes for the isocurves and point generation, which can readily be accomplished by list lacing and levels. Those extra nodes are costing you in performance, which may not yet be an issue but it will as things scale.