hexagon logo

The shortest way to the center(scan)

When scanned in the shape shown in the figure

I want to know how to find the shortest distance between each point relative to the center.

There will be more than 140 such bends, so the we should be able to find them automatically.




For reference, the program version : PCDMIS 2019 R2 CAD++





Parents
  • New update because of (bad) using of ATAN...Disappointed
    SCN1 =FEAT/SCAN,FREEFORM,NUMBER OF HITS=8261,SHOW HITS=NO,SHOWALLPARAMS=NO
    MEAS/SCAN
    BASICSCAN/FREEFORM,NUMBER OF HITS=8261,SHOW HITS=NO,SHOWALLPARAMS=NO
    ENDSCAN
    ENDMEAS/
    CIR1 =FEAT/CIRCLE,CARTESIAN,IN,MAX_INSC,NO
    THEO/<0,-0.0005,0>,<0,0,1>,77.9904
    ACTL/<0,-0.0005,0>,<0,0,1>,77.9904
    CONSTR/CIRCLE,BF,3D,SCN1,,
    OUTLIER_REMOVAL/OFF,3
    FILTER/OFF,UPR=0
    C1 =COMMENT/INPUT,NO,FULL SCREEN=NO,
    Enter number of tooth
    ASSIGN/V1=360/C1.INPUT
    ASSIGN/V2=SQRT(DOT(SCN1.HIT[1..SCN1.NUMHITS].XYZ-CIR1.XYZ,SCN1.HIT[1..SCN1.NUMHITS].XYZ-CIR1.XYZ))
    ASSIGN/V3=SCN1.HIT[MININDEX(V2)].XYZ
    F1 =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<V3.X,V3.Y,V3.Z>,$
    MEAS/XYZ,<V3.X,V3.Y,V3.Z>,$
    NOM/IJK,<0,0,1>,$
    MEAS/IJK,<0,0,1>
    A1 =ALIGNMENT/START,RECALL:STARTUP,LIST=YES
    ALIGNMENT/LEVEL,ZPLUS,PLN1
    ALIGNMENT/ROTATE_CIRCLE,XPLUS,TO,CIR1,AND,F1,ABOUT,ZPLUS
    ALIGNMENT/TRANS,ZAXIS,PLN1
    ALIGNMENT/TRANS,XAXIS,CIR1
    ALIGNMENT/TRANS,YAXIS,CIR1
    ALIGNMENT/END
    ASSIGN/ANG_HIT=RAD2DEG(ATAN(SCN1.HIT[1..SCN1.NUMHITS].Y/SCN1.HIT[1..SCN1.NUMHITS].X))
    ASSIGN/COR_HIT1=((SCN1.HIT[1..SCN1.NUMHITS].X-ABS(SCN1.HIT[1..SCN1.NUMHITS].X))/(SCN1.HIT[1..SCN1.NUMHITS].X-ABS(SCN1.HIT[1..SCN1.NUMHITS].X)))
    ASSIGN/COR_HIT2=((SCN1.HIT[1..SCN1.NUMHITS].Y-ABS(SCN1.HIT[1..SCN1.NUMHITS].Y))/(SCN1.HIT[1..SCN1.NUMHITS].Y-ABS(SCN1.HIT[1..SCN1.NUMHITS].Y)))
    ASSIGN/ANG_COR=ANG_HIT+180*(COR_HIT1)+360*(COR_HIT2*(1-COR_HIT1))
    V4 =LOOP/START,ID=YES,NUMBER=C1.INPUT,START=1,SKIP=,
    OFFSET:XAXIS=0,YAXIS=0,ZAXIS=0,ANGLE=0
    ASSIGN/ANG1=V1*(V4-1)
    ASSIGN/V5=MININDICES(ABS(ANG_COR-ANG1))
    ASSIGN/V6=ARRAY(V2[V5[1]],V2[V5[2]],V2[V5[3]],V2[V5[4]],V2[V5[5]],V2[V5[6]])
    ASSIGN/V7=MININDEX(V6)
    ASSIGN/V8=SCN1.HIT[V5[V7]].XYZ
    F2 =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<V8.X,V8.Y,V8.Z>,$
    MEAS/XYZ,<V8.X,V8.Y,V8.Z>,$
    NOM/IJK,<0,0,1>,$
    MEAS/IJK,<0,0,1>
    LOOP/END
    ASSIGN/V9="F2[1.."+C1.INPUT+"]"
    CIR2 =FEAT/CIRCLE,CARTESIAN,IN,LEAST_SQR,NO
    THEO/<0.0001,0.0004,0>,<0,0,1>,78.0006
    ACTL/<0.0001,0.0004,0>,<0,0,1>,78.0006
    CONSTR/CIRCLE,BF,2D,V9,,
    OUTLIER_REMOVAL/OFF,3
    FILTER/OFF,UPR=0
Reply
  • New update because of (bad) using of ATAN...Disappointed
    SCN1 =FEAT/SCAN,FREEFORM,NUMBER OF HITS=8261,SHOW HITS=NO,SHOWALLPARAMS=NO
    MEAS/SCAN
    BASICSCAN/FREEFORM,NUMBER OF HITS=8261,SHOW HITS=NO,SHOWALLPARAMS=NO
    ENDSCAN
    ENDMEAS/
    CIR1 =FEAT/CIRCLE,CARTESIAN,IN,MAX_INSC,NO
    THEO/<0,-0.0005,0>,<0,0,1>,77.9904
    ACTL/<0,-0.0005,0>,<0,0,1>,77.9904
    CONSTR/CIRCLE,BF,3D,SCN1,,
    OUTLIER_REMOVAL/OFF,3
    FILTER/OFF,UPR=0
    C1 =COMMENT/INPUT,NO,FULL SCREEN=NO,
    Enter number of tooth
    ASSIGN/V1=360/C1.INPUT
    ASSIGN/V2=SQRT(DOT(SCN1.HIT[1..SCN1.NUMHITS].XYZ-CIR1.XYZ,SCN1.HIT[1..SCN1.NUMHITS].XYZ-CIR1.XYZ))
    ASSIGN/V3=SCN1.HIT[MININDEX(V2)].XYZ
    F1 =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<V3.X,V3.Y,V3.Z>,$
    MEAS/XYZ,<V3.X,V3.Y,V3.Z>,$
    NOM/IJK,<0,0,1>,$
    MEAS/IJK,<0,0,1>
    A1 =ALIGNMENT/START,RECALL:STARTUP,LIST=YES
    ALIGNMENT/LEVEL,ZPLUS,PLN1
    ALIGNMENT/ROTATE_CIRCLE,XPLUS,TO,CIR1,AND,F1,ABOUT,ZPLUS
    ALIGNMENT/TRANS,ZAXIS,PLN1
    ALIGNMENT/TRANS,XAXIS,CIR1
    ALIGNMENT/TRANS,YAXIS,CIR1
    ALIGNMENT/END
    ASSIGN/ANG_HIT=RAD2DEG(ATAN(SCN1.HIT[1..SCN1.NUMHITS].Y/SCN1.HIT[1..SCN1.NUMHITS].X))
    ASSIGN/COR_HIT1=((SCN1.HIT[1..SCN1.NUMHITS].X-ABS(SCN1.HIT[1..SCN1.NUMHITS].X))/(SCN1.HIT[1..SCN1.NUMHITS].X-ABS(SCN1.HIT[1..SCN1.NUMHITS].X)))
    ASSIGN/COR_HIT2=((SCN1.HIT[1..SCN1.NUMHITS].Y-ABS(SCN1.HIT[1..SCN1.NUMHITS].Y))/(SCN1.HIT[1..SCN1.NUMHITS].Y-ABS(SCN1.HIT[1..SCN1.NUMHITS].Y)))
    ASSIGN/ANG_COR=ANG_HIT+180*(COR_HIT1)+360*(COR_HIT2*(1-COR_HIT1))
    V4 =LOOP/START,ID=YES,NUMBER=C1.INPUT,START=1,SKIP=,
    OFFSET:XAXIS=0,YAXIS=0,ZAXIS=0,ANGLE=0
    ASSIGN/ANG1=V1*(V4-1)
    ASSIGN/V5=MININDICES(ABS(ANG_COR-ANG1))
    ASSIGN/V6=ARRAY(V2[V5[1]],V2[V5[2]],V2[V5[3]],V2[V5[4]],V2[V5[5]],V2[V5[6]])
    ASSIGN/V7=MININDEX(V6)
    ASSIGN/V8=SCN1.HIT[V5[V7]].XYZ
    F2 =GENERIC/POINT,DEPENDENT,CARTESIAN,$
    NOM/XYZ,<V8.X,V8.Y,V8.Z>,$
    MEAS/XYZ,<V8.X,V8.Y,V8.Z>,$
    NOM/IJK,<0,0,1>,$
    MEAS/IJK,<0,0,1>
    LOOP/END
    ASSIGN/V9="F2[1.."+C1.INPUT+"]"
    CIR2 =FEAT/CIRCLE,CARTESIAN,IN,LEAST_SQR,NO
    THEO/<0.0001,0.0004,0>,<0,0,1>,78.0006
    ACTL/<0.0001,0.0004,0>,<0,0,1>,78.0006
    CONSTR/CIRCLE,BF,2D,V9,,
    OUTLIER_REMOVAL/OFF,3
    FILTER/OFF,UPR=0
Children
No Data