hexagon logo

Pierce a Plane with a Circle

Can you pierce a plane with a Circle? I have a radius that meets a plane and I need the intersection point. Thanks!

Attached Files
  • No, you can't pierce a plane with a circle. You may be able to do it by turning the hits of the circle into a curve but that curve would have to actually pass through the plane surface - if the curve and the plane surface are coincident or separated slightly it won't work.

    CIR1       =FEAT/CONTACT/CIRCLE/DEFAULT,CARTESIAN,OUT,LEAST_SQR
                THEO/<-108.585,50.8,-225.55>,<0,0,1>,44.45,0
                ACTL/<-108.585,50.8,-225.55>,<0,0,1>,44.45,0
                TARG/<-108.585,50.8,-225.55>,<0,0,1>
                START ANG=0,END ANG=360
                ANGLE VEC=<1,0,0>
                DIRECTION=CCW
                SHOW FEATURE PARAMETERS=NO
                SHOW CONTACT PARAMETERS=YES
                  NUMHITS=10,DEPTH=0,PITCH=0
                  SAMPLE METHOD=SAMPLE_FEATURE
                  SAMPLE FEATURE=NONE
                  AVOIDANCE MOVE=BOTH,DISTANCE BEFORE=10,DISTANCE AFTER=10,DIRECTION=ALONG FEATURE VECTOR
                  FIND HOLE=DISABLED,ONERROR=NO,READ POS=NO
                SHOW HITS=NO
                MOVE/POINT,NORMAL,<-108.574,60.8,-215.55>
    PLN1       =FEAT/PLANE,CARTESIAN,OUTLINE
                THEO/<-108.563,55,-223.261>,<0,1,0>
                ACTL/<-108.563,55,-223.261>,<0,1,0>
                MEAS/PLANE,4
                  HIT/BASIC,NORMAL,<-146.404,55,-216.919>,<0,1,0>,<-146.404,55,-216.919>,USE THEO=YES
                  HIT/BASIC,NORMAL,<-144.908,55,-231.066>,<0,1,0>,<-144.908,55,-231.066>,USE THEO=YES
                  HIT/BASIC,NORMAL,<-70.095,55,-230.566>,<0,1,0>,<-70.095,55,-230.566>,USE THEO=YES
                  HIT/BASIC,NORMAL,<-72.846,55,-214.493>,<0,1,0>,<-72.846,55,-214.493>,USE THEO=YES
                ENDMEAS/
    SCN1       =FEAT/SET,CARTESIAN
                THEO/<-107.207,65.85,-224.556>,<0,0,1>
                ACTL/<-107.207,65.85,-224.556>,<0,0,1>
                CONSTR/SET,BASIC,CIR1.HIT[..],,
    CRV1       =FEAT/CURVE,DEPENDENT,12,10,TOLERANCE,0
                THEO/61.368
                MEAS/61.368
                CONSTR/CURVE,SCN1,,
    PNT1       =FEAT/POINT,CARTESIAN,NO
                THEO/<-86.761,55,-224.556>,<0,1,0>
                ACTL/<-86.761,55,-224.556>,<0,1,0>
                CONSTR/POINT,INT,CRV1,PLN1​
    
  • neil.challinor : I would say "you can't directly do it"...
    You can do it with a little trig, which will give a better solution than curve if the circle has not enough hits (IMO)
    ASSIGN/V1=CROSS(CE1.IJK,PL1.IJK)
    ASSIGN/V2=CROSS(V1,CE1.IJK)
    ASSIGN/V3=DOT(CE1.XYZ-PL1.XYZ,PL1.IJK)
    ASSIGN/V4=DOT(V3,PL1.IJK)
    ASSIGN/V5=ASIN((V3/V4)/CE1.R)
    ASSIGN/V6=CE1.XYZ+(V3/V4)*V2+CE1.R*SIN(V5)*V1


    Then construct a generic point with V6.X, V6.Y and V6.Z.

    In V6, you could have to change "+" by "-" (one or the 2) because there are 2 solutions, and both cross products depend on the actual part (side of center from the plane, direction of vectors...)​
  • hello,

    However, you can create a "Pierce Point" from a line and a diameter.
    You simply take the line on the said plane.
    (the line points in the direction of the circle)
    if it is a cylinder then you can repeat it at different heights

    The work plane and the vector from the line affect the result

    https://docs.hexagonmi.com/pcdmis/2022.1/en/helpcenter/mergedProjects/core/16_const_topics/Constructing_a_Pierce_Point.htm
  • If you want to use variables, if this was a 3D circle, one could create an alignment to the circle, recall the plane into that alignment, then use trig to assign positions to offset point(s). This, of course, makes the assumption that your circle is round, but most CMM software makes that assumption, anyway.
  • Create a generic line from the circle then project a point to the plane make sure the line has the circle's proper vector data so that the point will follow the correct path.

  • Update in V4 !!!!!

    ASSIGN/V1=CROSS(CE1.IJK,PL1.IJK)
    ASSIGN/V2=CROSS(V1,CE1.IJK)
    ASSIGN/V3=DOT(CE1.XYZ-PL1.XYZ,PL1.IJK)
    ASSIGN/V4=DOT(V2,PL1.IJK)
    ASSIGN/V5=ASIN((V3/V4)/CE1.R)
    ASSIGN/V6=CE1.XYZ+(V3/V4)*V2+CE1.R*SIN(V5)*V1
  • Tried offline, it works whatever the vectors, if the intersection exists... (ACOS instead of ASIN in V5 !!!!!)
    PL1 =GENERIC/PLANE,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<10,20,-30>,$
    MEAS/XYZ,<10,20,-30>,$
    NOM/IJK,<0.3106849,0.7192875,0.6213698>,$
    MEAS/IJK,<0.3106849,0.7192875,0.6213698>
    CE1 =GENERIC/CIRCLE,DEPENDENT,CARTESIAN,OUT,$
    NOM/XYZ,<5,-10,10>,$
    MEAS/XYZ,<5,-10,10>,$
    NOM/IJK,<0.7071068,0,0.7071068>,$
    MEAS/IJK,<0.7071068,0,0.7071068>,$
    RADIUS/50,50
    ASSIGN/V1=CROSS(CE1.IJK,PL1.IJK)
    ASSIGN/V2=CROSS(V1,CE1.IJK)
    ASSIGN/V3=DOT(CE1.XYZ-PL1.XYZ,PL1.IJK)
    ASSIGN/V4=DOT(V2,PL1.IJK)
    ASSIGN/V5=ACOS((V3/V4)/CE1.R)
    ASSIGN/V6=CE1.XYZ-(V3/V4)*V2-CE1.R*SIN(V5)*V1
    F2 =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<V6.X,V6.Y,V6.Z>,$
    MEAS/XYZ,<V6.X,V6.Y,V6.Z>,$
    NOM/IJK,<0,0,1>,$
    MEAS/IJK,<0,0,1>
    ASSIGN/V7=DOT(F2.XYZ-CE1.XYZ,CE1.IJK)
    ASSIGN/V8=DOT(F2.XYZ-PL1.XYZ,PL1.IJK)
    ASSIGN/V6B=CE1.XYZ-(V3/V4)*V2+CE1.R*SIN(V5)*V1
    F3 =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<V6B.X,V6B.Y,V6B.Z>,$
    MEAS/XYZ,<V6B.X,V6B.Y,V6B.Z>,$
    NOM/IJK,<0,0,1>,$
    MEAS/IJK,<0,0,1>
    ASSIGN/V7B=DOT(F3.XYZ-CE1.XYZ,CE1.IJK)
    ASSIGN/V8B=DOT(F3.XYZ-PL1.XYZ,PL1.IJK)
    DIM DIST1= 3D DISTANCE FROM POINT F2 TO PLANE PL1,SHORTEST=OFF,NO_RADIUS UNITS=MM,$
    GRAPH=OFF TEXT=OFF MULT=10.00 OUTPUT=BOTH
    AX NOMINAL +TOL -TOL MEAS DEV OUTTOL
    M 0.0000 0.0100 0.0100 0.0000 0.0000 0.0000 ----#----
    DIM DIST3= 3D DISTANCE FROM POINT F3 TO PLANE PL1,SHORTEST=OFF,NO_RADIUS UNITS=MM,$
    GRAPH=OFF TEXT=OFF MULT=10.00 OUTPUT=BOTH
    AX NOMINAL +TOL -TOL MEAS DEV OUTTOL
    M 0.0000 0.0100 0.0100 0.0000 0.0000 0.0000 ----#----
    DIM DIST4= 3D DISTANCE FROM POINT F2 TO CIRCLE CE1,SHORTEST=OFF,NO_RADIUS UNITS=MM,$
    GRAPH=OFF TEXT=OFF MULT=10.00 OUTPUT=BOTH
    AX NOMINAL +TOL -TOL MEAS DEV OUTTOL
    M 50.0000 0.0100 0.0100 50.0000 0.0000 0.0000 ----#----
    DIM DIST5= 3D DISTANCE FROM POINT F3 TO CIRCLE CE1,SHORTEST=OFF,NO_RADIUS UNITS=MM,$
    GRAPH=OFF TEXT=OFF MULT=10.00 OUTPUT=BOTH
    AX NOMINAL +TOL -TOL MEAS DEV OUTTOL
    M 50.0000 0.0100 0.0100 50.0000 0.0000 0.0000 ----#----


    Distances between points and plane are zero, distances between points and circle center are radius.​
  • hello,

    However, you can create a "Pierce Point" from a line and a diameter.
    You simply take the line on the said plane.
    (the line points in the direction of the circle)
    if it is a cylinder then you can repeat it at different heights

    The work plane and the vector from the line affect the result

    https://docs.hexagonmi.com/pcdmis/2022.1/en/helpcenter/mergedProjects/core/16_const_topics/Constructing_a_Pierce_Point.htm

    Right I remembered this while at home that night lol

    kinda sad that PC DMIS can’t do cylinder plane though