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
  • : I tried with Your points, it seems to work...
    I just add an if statement on V2 direction, to ensure that the sign doesn't change.
    At the end, I change PL3 in Y+ just to check if there are 2 points at 0 en the others negatives.
    Hope this help...
    ​​​​​​​
    F1         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<38,0,-6>,$
                MEAS/XYZ,<38,-1,-6>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F2         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<38,0,-29>,$
                MEAS/XYZ,<38,1,-29>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F3         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<180,0,-6>,$
                MEAS/XYZ,<180,-1,-6>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F4         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<180,0,-29>,$
                MEAS/XYZ,<180,1,-29>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F5         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<115,0,-17>,$
                MEAS/XYZ,<115,-2,-17>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    PL1        =FEAT/PLANE,CARTESIAN,TRIANGLE,NO
                THEO/<110.2,0,-17.4>,<0,-1,0>
                ACTL/<110.2,-1.9535,-17.5351>,<0,-0.9962406,-0.0866296>
                CONSTR/PLANE,TANGENT,F1,F2,F3,F4,F5,,
                MATH_TYPE/CONSTRAINED_MINMAX,BFRE
    PL2        =FEAT/PLANE,CARTESIAN,TRIANGLE,NO
                THEO/<0,0,0>,<0,0,1>
                ACTL/<0,0,0>,<0,0,1>
                CONSTR/PLANE,ALIGN,WORKPLANE
    LN1        =FEAT/LINE,CARTESIAN,UNBOUNDED,NO
                THEO/<55.1,0,0>,<-1,0,0>
                ACTL/<55.1,-3.4783,0>,<-1,0,0>
                CONSTR/LINE,INTOF,PL1,PL2
                ASSIGN/V1=PL1.HIT[1..5].XYZ*MPOINT(1,1,0)
    [COLOR=#FF0000]ASSIGN/V2=CROSS(PL2.IJK,LN1.IJK)
                IF/DOT(V2.IJK,PL1.IJK)<0
                  ASSIGN/V2=-V2
                END_IF/[/COLOR]
                ASSIGN/V3=DOT(PL1.HIT[1..5].XYZ-LN1.XYZ,V2)
                ASSIGN/V4=MAXINDICES(V3)
                ASSIGN/V5=V4[1]
                ASSIGN/V6=V4[2]
                ASSIGN/V7=PL1.HIT[V5].XYZ*MPOINT(1,1,0)
    F6         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<PL1.HIT[V5].X,PL1.HIT[V5].Y,PL1.HIT[V5].Z>,$
                MEAS/XYZ,<PL1.HIT[V5].X,PL1.HIT[V5].Y,PL1.HIT[V5].Z>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F7         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<PL1.HIT[V6].X,PL1.HIT[V6].Y,PL1.HIT[V6].Z>,$
                MEAS/XYZ,<PL1.HIT[V6].X,PL1.HIT[V6].Y,PL1.HIT[V6].Z>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F8         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<V7.X,V7.Y,V7.Z>,$
                MEAS/XYZ,<V7.X,V7.Y,V7.Z>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    PL3        =FEAT/PLANE,CARTESIAN,OUTLINE,NO
                THEO/<132.6667,1,-19.3333>,<0,-1,0>
                ACTL/<89.3333,-1.6667,-7.6667>,<-0.0129859,-0.9999157,0>
                CONSTR/PLANE,BF,F6,F7,F8,,
                OUTLIER_REMOVAL/OFF,3
                FILTER/OFF,WAVELENGTH=0
                ASSIGN/V8=DOT(PL1.HIT[1..5].XYZ-PL3.XYZ,PL3.IJK)
    REF1       =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ÉMARRAGE,LIST=YES
                  ALIGNMENT/LEVEL,YPLUS,PL3
                  ALIGNMENT/TRANS,YAXIS,PL3
                ALIGNMENT/END
    DIM LOC1= LOCATION OF POINT F1  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500     0.0000     0.0000     0.0000 ----#----
    END OF DIMENSION LOC1
    DIM LOC2= LOCATION OF POINT F2  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500    -1.9998    -1.9998     1.9498 <--------
    END OF DIMENSION LOC2
    DIM LOC3= LOCATION OF POINT F3  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500    -1.8440    -1.8440     1.7940 <--------
    END OF DIMENSION LOC3
    DIM LOC4= LOCATION OF POINT F4  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500    -3.8438    -3.8438     3.7938 <--------
    END OF DIMENSION LOC4
    DIM LOC5= LOCATION OF POINT F5  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500     0.0000     0.0000     0.0000 ----#----
    END OF DIMENSION LOC5
Reply
  • : I tried with Your points, it seems to work...
    I just add an if statement on V2 direction, to ensure that the sign doesn't change.
    At the end, I change PL3 in Y+ just to check if there are 2 points at 0 en the others negatives.
    Hope this help...
    ​​​​​​​
    F1         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<38,0,-6>,$
                MEAS/XYZ,<38,-1,-6>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F2         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<38,0,-29>,$
                MEAS/XYZ,<38,1,-29>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F3         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<180,0,-6>,$
                MEAS/XYZ,<180,-1,-6>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F4         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<180,0,-29>,$
                MEAS/XYZ,<180,1,-29>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F5         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<115,0,-17>,$
                MEAS/XYZ,<115,-2,-17>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    PL1        =FEAT/PLANE,CARTESIAN,TRIANGLE,NO
                THEO/<110.2,0,-17.4>,<0,-1,0>
                ACTL/<110.2,-1.9535,-17.5351>,<0,-0.9962406,-0.0866296>
                CONSTR/PLANE,TANGENT,F1,F2,F3,F4,F5,,
                MATH_TYPE/CONSTRAINED_MINMAX,BFRE
    PL2        =FEAT/PLANE,CARTESIAN,TRIANGLE,NO
                THEO/<0,0,0>,<0,0,1>
                ACTL/<0,0,0>,<0,0,1>
                CONSTR/PLANE,ALIGN,WORKPLANE
    LN1        =FEAT/LINE,CARTESIAN,UNBOUNDED,NO
                THEO/<55.1,0,0>,<-1,0,0>
                ACTL/<55.1,-3.4783,0>,<-1,0,0>
                CONSTR/LINE,INTOF,PL1,PL2
                ASSIGN/V1=PL1.HIT[1..5].XYZ*MPOINT(1,1,0)
    [COLOR=#FF0000]ASSIGN/V2=CROSS(PL2.IJK,LN1.IJK)
                IF/DOT(V2.IJK,PL1.IJK)<0
                  ASSIGN/V2=-V2
                END_IF/[/COLOR]
                ASSIGN/V3=DOT(PL1.HIT[1..5].XYZ-LN1.XYZ,V2)
                ASSIGN/V4=MAXINDICES(V3)
                ASSIGN/V5=V4[1]
                ASSIGN/V6=V4[2]
                ASSIGN/V7=PL1.HIT[V5].XYZ*MPOINT(1,1,0)
    F6         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<PL1.HIT[V5].X,PL1.HIT[V5].Y,PL1.HIT[V5].Z>,$
                MEAS/XYZ,<PL1.HIT[V5].X,PL1.HIT[V5].Y,PL1.HIT[V5].Z>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F7         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<PL1.HIT[V6].X,PL1.HIT[V6].Y,PL1.HIT[V6].Z>,$
                MEAS/XYZ,<PL1.HIT[V6].X,PL1.HIT[V6].Y,PL1.HIT[V6].Z>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    F8         =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<V7.X,V7.Y,V7.Z>,$
                MEAS/XYZ,<V7.X,V7.Y,V7.Z>,$
                NOM/IJK,<0,-1,0>,$
                MEAS/IJK,<0,-1,0>
    PL3        =FEAT/PLANE,CARTESIAN,OUTLINE,NO
                THEO/<132.6667,1,-19.3333>,<0,-1,0>
                ACTL/<89.3333,-1.6667,-7.6667>,<-0.0129859,-0.9999157,0>
                CONSTR/PLANE,BF,F6,F7,F8,,
                OUTLIER_REMOVAL/OFF,3
                FILTER/OFF,WAVELENGTH=0
                ASSIGN/V8=DOT(PL1.HIT[1..5].XYZ-PL3.XYZ,PL3.IJK)
    REF1       =ALIGNMENT/START,RECALL[emoticon:6D505171FAA4497C85C5CA27290C555D]ÉMARRAGE,LIST=YES
                  ALIGNMENT/LEVEL,YPLUS,PL3
                  ALIGNMENT/TRANS,YAXIS,PL3
                ALIGNMENT/END
    DIM LOC1= LOCATION OF POINT F1  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500     0.0000     0.0000     0.0000 ----#----
    END OF DIMENSION LOC1
    DIM LOC2= LOCATION OF POINT F2  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500    -1.9998    -1.9998     1.9498 <--------
    END OF DIMENSION LOC2
    DIM LOC3= LOCATION OF POINT F3  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500    -1.8440    -1.8440     1.7940 <--------
    END OF DIMENSION LOC3
    DIM LOC4= LOCATION OF POINT F4  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500    -3.8438    -3.8438     3.7938 <--------
    END OF DIMENSION LOC4
    DIM LOC5= LOCATION OF POINT F5  UNITS=MM ,$
    GRAPH=OFF  TEXT=OFF  MULT=10.00  OUTPUT=BOTH  HALF ANGLE=NO
    AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
    Y       0.0000     0.0500     0.0500     0.0000     0.0000     0.0000 ----#----
    END OF DIMENSION LOC5
Children
No Data