How to select edge by only horizontal angle

   3008   1   0
User Avatar
Member
38 posts
Joined: June 2019
Offline
Hello,

Im making a road pathfinding tool, and i need to group all edges with a low slope.

1. Keep by normal doesn't do the job, it act like a “mask by slope”, it should have flat edge on the mountain selected

2. Include by edge doesn't work either, i have to select "use angle between edge to have some result, which don't really work
Edited by samuelbrunner - Aug. 9, 2019 09:55:55

Attachments:
normal.png (2.2 MB)
edge.png (1.1 MB)

User Avatar
Member
21 posts
Joined: Sept. 2018
Offline
int getNeighs[] = neighbours(0, @ptnum);

float angle = chf('Angle');

for ( int i = 0; i<len(getNeighs); i++ )
{
    vector pone = point(0, "P", getNeighs[i]);
    vector N = normalize(pone-@P);
    vector up = {0,1,0};
    float getDot = abs(dot(N, up));

    if ( getDot < angle)
    {
        setedgegroup(0, "vertical_edges", @ptnum, getNeighs[i], 1);
    }
}

Dump that in a point wrangle and create the slider for angle. Compares angle of edge between every set of points to straight up (y=1) via dot product, groups edge if below slider's threshold.

If there's a better solution I would love to hear it.
  • Quick Links