hexagon logo

Does anyone know an easy way to project all the points in a group to a plane?

I have a group of points (a plane for example) and I want to project them all to a plane (simplest case == WORKPLANE). Is there some smart way to do it all at once (a.k.a. "the JEFMAN way") or is it only possible with a loop? I haven't found anything yet...

The object of this is to create a secondary tangent plane perpendicular to the primary by the following method:

- measure the secondary plane
- project all points up/down to the primary (WORKPLANE)
- construct a tangent plane from the original plane points + the projected points (guaranteed to be perpendicular to the primary as that is our projection direction)

As a follow-up question: How can I use an ARRAY variable in the same way as .HIT[...] in the construction of a tangent plane?
Parents
  • To give you an idea of what this is supposed to accomplish, here's [part of] my test program and some pictures. Just four points, creating a plane that is *not* perpendicular to the primary, projecting the four points and then creating a tangent plane (of all the points) that *is* perpendicular to the primary, touching the 'furthest' of the points of the plane:

    
    PNT2       =FEAT/CONTACT/VECTOR POINT/DEFAULT,CARTESIAN
                THEO/<38,0,-6>,<0,-1,0>
                ACTL/<38,-1,-6>,<0,-1,0>
                TARG/<38,-1,-6>,<0,-1,0>
                SNAP=NO
                REPORT VEC=<0,0,1>,UPDATE VEC=<0,0,1>
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    PNT3       =FEAT/CONTACT/VECTOR POINT/DEFAULT,CARTESIAN
                THEO/<38,0,-29>,<0,-1,0>
                ACTL/<38,1,-29>,<0,-1,0>
                TARG/<38,1,-29>,<0,-1,0>
                SNAP=NO
                REPORT VEC=<0,0,1>,UPDATE VEC=<0,0,1>
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    PNT4       =FEAT/CONTACT/VECTOR POINT/DEFAULT,CARTESIAN
                THEO/<180,0,-6>,<0,-1,0>
                ACTL/<180,-1,-6>,<0,-1,0>
                TARG/<180,-1,-6>,<0,-1,0>
                SNAP=NO
                REPORT VEC=<0,0,1>,UPDATE VEC=<0,0,1>
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    PNT5       =FEAT/CONTACT/VECTOR POINT/DEFAULT,CARTESIAN
                THEO/<180,0,-29>,<0,-1,0>
                ACTL/<180,1,-29>,<0,-1,0>
                TARG/<180,1,-29>,<0,-1,0>
                SNAP=NO
                REPORT VEC=<0,0,1>,UPDATE VEC=<0,0,1>
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=NO
    
    PLN2       =FEAT/PLANE,CARTESIAN,OUTLINE,NO
                THEO/<109,0,-17.5>,<0,-1,0>
                ACTL/[COLOR=#FF0000]<109,0,-17.5>,<0,-0.9962406,-0.0866296>[/COLOR]
                CONSTR/PLANE,TANGENT,PNT2,PNT3,PNT4,PNT5,,
                MATH_TYPE/CONSTRAINED_MINMAX,BF
    
    [COLOR=#008080]$ this is the part I want to accomplish as one (or a few) single commands, acting on the all the points at the same time. Just think of this on a scanned plane with thousands of points...
    
    PNT6       =FEAT/POINT,CARTESIAN,NO
                THEO/<38,0,0>,<0,0,1>
                ACTL/<38,-1,0>,<0,0,1>
                CONSTR/POINT,PROJ,PNT2,
    PNT7       =FEAT/POINT,CARTESIAN,NO
                THEO/<38,0,0>,<0,0,1>
                ACTL/<38,1,0>,<0,0,1>
                CONSTR/POINT,PROJ,PNT3,
    PNT8       =FEAT/POINT,CARTESIAN,NO
                THEO/<180,0,0>,<0,0,1>
                ACTL/<180,-1,0>,<0,0,1>
                CONSTR/POINT,PROJ,PNT4,
    PNT9       =FEAT/POINT,CARTESIAN,NO
                THEO/<180,0,0>,<0,0,1>
                ACTL/<180,1,0>,<0,0,1>
                CONSTR/POINT,PROJ,PNT5,[/COLOR]
    
    [COLOR=#008080]$ end of problematic area[/COLOR]
    
    PLN3       =FEAT/PLANE,CARTESIAN,OUTLINE,NO
                THEO/<109,0,-8.75>,<0,-1,0>
                ACTL/[COLOR=#0000FF]<109,-1,-8.75>,<0,-1,0>[/COLOR]
                CONSTR/PLANE,TANGENT,PNT2,PNT3,PNT4,PNT5,PNT6,PNT7,PNT8,PNT9,,
                MATH_TYPE/CONSTRAINED_MINMAX,BF
    
    




  • Oh, I was so confused before this picture. I thought you were trying to create a plane perpendicular to the scan points. Now, I get it. You want to force your tangent plane to be square to the primary, ie to be a simulated datum reference plane.

    For a feature that is nominally square to the primary/DRF, you can accomplish this by finding the point with the MAX value (in Y for the example given, or T for any surface) and then use that point as the Y value of a generic plane. Then set the generic plane vectors to your given chosen vector, eg (0,-1,0) for the given example.

    For a non-square surface, you would need to find the max T value, and then again, set the generic IJK to exactly the surface's nominal vector, and use the MAX point as the XYZ of the generic plane.
Reply
  • Oh, I was so confused before this picture. I thought you were trying to create a plane perpendicular to the scan points. Now, I get it. You want to force your tangent plane to be square to the primary, ie to be a simulated datum reference plane.

    For a feature that is nominally square to the primary/DRF, you can accomplish this by finding the point with the MAX value (in Y for the example given, or T for any surface) and then use that point as the Y value of a generic plane. Then set the generic plane vectors to your given chosen vector, eg (0,-1,0) for the given example.

    For a non-square surface, you would need to find the max T value, and then again, set the generic IJK to exactly the surface's nominal vector, and use the MAX point as the XYZ of the generic plane.
Children
No Data