hexagon logo

Alignment from FCF Datum Shift



I think what vpt (and me) were hoping for was a way to create an alignment that uses the Xact fit shift. There are all sorts of applications for this. Using the available options in best-fit alignment is not the same, because they do not attempt to fit within a tolerance zone.

A few years old but I haven't found anything using search.

SPH1       =GENERIC/SPHERE,DEPENDENT,CARTESIAN,OUT,$
            NOM/XYZ,<0,0,0>,$
            MEAS/XYZ,<0,0,0>,$
            NOM/IJK,<0,0,1>,$
            MEAS/IJK,<0,0,1>,$
            DIAMETER/1,1.1
DIM LOC1= LOCATION OF SPHERE SPH1
AX    NOMINAL       +TOL       -TOL       MEAS        DEV     OUTTOL
D       1.0000     0.2500    -0.2500     1.1000     0.1000     0.0000 ------#--
END OF DIMENSION LOC1
            DATDEF/FEATURE=SPH1,A
            DISPLAYPRECISION/6
FCFLOC1 =POSITION : CIR152_1,CIR152_2,CIR152_3,...
            FEATCTRLFRAME/SHOWNOMS=NO,SHOWPARAMS=NO,SHOWEXPANDED=NO
              SIZE TOLERANCES/33,DIAMETER,0.375,0.005,-0.005
              PRIMARY DIMENSION/POSITION,DIAMETER,0.01,MMC,A,MMC,,
              NOTE/FCFLOC1
            FEATURES/CIR152_1,CIR152_2,CIR152_3,CIR152_4,CIR152_5,
                                CIR152_6,CIR152_7,CIR152_8,CIR152_9,CIR152_10,
                                CIR152_11,CIR152_12,CIR152_13,CIR152_14,
                                CIR152_15,CIR152_16,CIR152_17,CIR152_18,
                                CIR152_19,CIR152_20,CIR152_21,CIR152_22,
                                CIR152_23,CIR152_24,CIR152_25,CIR152_26,
                                CIR152_27,CIR152_28,CIR152_29,CIR152_30,
                                CIR152_31,CIR152_32,CIR152_33,,
            ASSIGN/V1=GETTEXT("DRF_SHIFTX",1,{FCFLOC1})
            ASSIGN/V2=GETTEXT("DRF_SHIFTY",1,{FCFLOC1})
            ASSIGN/V3=GETTEXT("DRF_SHIFTZ",1,{FCFLOC1})
            ASSIGN/V4=GETTEXT("DRF_ROTATIONX",1,{FCFLOC1})*-1
            ASSIGN/V5=GETTEXT("DRF_ROTATIONY",1,{FCFLOC1})*-1
            ASSIGN/V6=GETTEXT("DRF_ROTATIONZ",1,{FCFLOC1})*-1
            FORMAT/TEXT, , ,HEADINGS, , ;NOM,MEAS, , , , , 
DIM BEFORE= LOCATION OF CIRCLE CIR152_1
AX     NOMINAL        MEAS
X     10.153721   10.154507
Y    -27.402826  -27.405035
Z     -8.032519   -8.025360
END OF DIMENSION BEFORE
ALIGN1     =ALIGNMENT/START,RECALL:PREVIOUS,LIST=YES
              ALIGNMENT/ROTATE_OFFSET,V4,ABOUT,XPLUS
              ALIGNMENT/ROTATE_OFFSET,V5,ABOUT,YPLUS
              ALIGNMENT/ROTATE_OFFSET,V6,ABOUT,ZPLUS
              ALIGNMENT/TRANS_OFFSET,XAXIS,V1
              ALIGNMENT/TRANS_OFFSET,YAXIS,V2
              ALIGNMENT/TRANS_OFFSET,ZAXIS,V3
            ALIGNMENT/END
DIM AFTER= LOCATION OF CIRCLE CIR152_1
AX     NOMINAL        MEAS
X     10.151373   10.152161
Y    -27.394485  -27.396694
Z     -8.041472   -8.034312
D      0.376500    0.377383
END OF DIMENSION AFTER
            COMMENT/REPT,
            "Xshift:  "+V1
            "Yshift:  "+V2
            "Zshift:  "+V3
            "Rotation X:  "+V4*-1
            "Rotation Y:  "+V5*-1
            "Rotation Z:  "+V6*-1

The FCF output with datum shift is:


Using a sphere as the only datum seems to allow all 6 degrees to float. There is some small round-off error due to the numbers being used limited to the current DISPLAYPRECISION (not much).

Now what? Trying to actually use this has me baffled. I'd like to simulate the FCF output having the transformed measured coordinates evaluated against the model nominal values. The BEFORE dim has the nominals I want but the AFTER dim has the measured I want (like the FCF output). Inserting & Recalling alignments, Updating Dependent Commands (answering both yes and no) leaves me feeling like I've found my way into a rabbit hole. Maybe Profile dims behave differently?

I'm aware that some settings may influence the results: Update Dependent Commands (warning), UpdateBelowChangedAlignmentDuringExecution (registry), Ignore CAD to part (F5 settings), Allow Fine Tuning of Alignment (F5 settings). I'd really like to get this working inline without resorting to any type of external automation if possible. Can someone throw me a bone here? There's gotta be a way to get some mileage out of this.
Parents
  • The SUMMARY_MEAS enum has XYZ values strung one after the other. For this FCF with 33 features there ends up being 99 fields (33x3).

    3 of the features are selected from the FCF to provide spatial separation. The main thing is that they not be coincident or co-linear.

    FCF measured XYZ values are assigned to variables (these have received the FCF datum shift).

    Generic points for each of the 3 selected features are constructed.
    The nominals are assigned the FCF measured values.
    The measured values come from the measured values of the original feature
    The vectors are assigned from the measured feature (I don't think this really matters).

    A 3D bestfit alignment constructed from the 3 generic points...

    SPH1       =GENERIC/SPHERE,DEPENDENT,CARTESIAN,OUT,$
                NOM/XYZ,<0,0,0>,$
                MEAS/XYZ,<0,0,0>,$
                NOM/IJK,<0,0,1>,$
                MEAS/IJK,<0,0,1>,$
                DIAMETER/1,1.1
                DATDEF/FEATURE=SPH1,A
    FCFLOC1 =POSITION : CIR152_1,CIR152_2,CIR152_3,...
                FEATCTRLFRAME/SHOWNOMS=NO,SHOWPARAMS=YES,SHOWEXPANDED=YES
                  SIZE TOLERANCES/33,DIAMETER,0.375,0.005,-0.005
                  PRIMARY DIMENSION/POSITION,DIAMETER,0.01,MMC,A,MMC,<size>,<dat>,<dat>
                  SECONDARY DIMENSION/<Dim>,<tol>,<MC>,<dat>,<dat>,<dat>
                  NOTE/FCFLOC1
                FEATURES/CIR152_1,CIR152_2,CIR152_3,CIR152_4,CIR152_5,
                                    CIR152_6,CIR152_7,CIR152_8,CIR152_9,CIR152_10,
                                    CIR152_11,CIR152_12,CIR152_13,CIR152_14,
                                    CIR152_15,CIR152_16,CIR152_17,CIR152_18,
                                    CIR152_19,CIR152_20,CIR152_21,CIR152_22,
                                    CIR152_23,CIR152_24,CIR152_25,CIR152_26,
                                    CIR152_27,CIR152_28,CIR152_29,CIR152_30,
                                    CIR152_31,CIR152_32,CIR152_33,,
    $$ NO,
                * 1st feature in FCF
                ASSIGN/BF1_X=GETTEXT("SUMMARY_MEAS",1,{FCFLOC1})
                ASSIGN/BF1_Y=GETTEXT("SUMMARY_MEAS",2,{FCFLOC1})
                ASSIGN/BF1_Z=GETTEXT("SUMMARY_MEAS",3,{FCFLOC1})
    $$ NO,
                * 11th feature in FCF
                ASSIGN/BF2_X=GETTEXT("SUMMARY_MEAS",31,{FCFLOC1})
                ASSIGN/BF2_Y=GETTEXT("SUMMARY_MEAS",32,{FCFLOC1})
                ASSIGN/BF2_Z=GETTEXT("SUMMARY_MEAS",33,{FCFLOC1})
    $$ NO,
                * 24th feature in FCF
                ASSIGN/BF3_X=GETTEXT("SUMMARY_MEAS",70,{FCFLOC1})
                ASSIGN/BF3_Y=GETTEXT("SUMMARY_MEAS",71,{FCFLOC1})
                ASSIGN/BF3_Z=GETTEXT("SUMMARY_MEAS",72,{FCFLOC1})
    $$ NO,
                * 1st feature in FCF
    PT_BF1     =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<BF1_X,BF1_Y,BF1_Z>,$
                MEAS/XYZ,<CIR152_1.X,CIR152_1.Y,CIR152_1.Z>,$
                NOM/IJK,<CIR152_1.TI,CIR152_1.TI,CIR152_1.TK>,$
                MEAS/IJK,<CIR152_1.TI,CIR152_1.TI,CIR152_1.TK>
    $$ NO,
                * 11th feature in FCF
    PT_BF2     =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<BF2_X,BF2_Y,BF2_Z>,$
                MEAS/XYZ,<CIR152_11.X,CIR152_11.Y,CIR152_11.Z>,$
                NOM/IJK,<CIR152_11.TI,CIR152_11.TJ,CIR152_11.TK>,$
                MEAS/IJK,<CIR152_11.TI,CIR152_11.TJ,CIR152_11.TK>
    $$ NO,
                * 24th feature in FCF
    PT_BF3     =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<BF3_X,BF3_Y,BF3_Z>,$
                MEAS/XYZ,<CIR152_24.X,CIR152_24.Y,CIR152_24.Z>,$
                NOM/IJK,<CIR152_24.TI,CIR152_24.TJ,CIR152_24.TK>,$
                MEAS/IJK,<CIR152_24.TI,CIR152_24.TJ,CIR152_24.TK>
    $$ NO,
                * 
    ALIGN3     =ALIGNMENT/START,RECALL:PREVIOUS,LIST=YES
                  ALIGNMENT/BF3D,LEAST_SQR,CREATE WEIGHTS=NO,ROTANDTRANS,USE SCALING=NO,0.003736,-0.007117,0.00653,-0.004491,-0.00306,-0.005415
                  ITERATEANDREPIERCECAD=NO
                  Deviation Threshold=0.002
                  SHOWALLINPUTS=YES,SHOWALLPARAMS=YES
                    ID=PT_BF1,Points,,1,YES,YES,YES,YES
                    ID=PT_BF3,Points,,1,YES,YES,YES,YES
                    ID=PT_BF2,Points,,1,YES,YES,YES,YES
                    ID=


    I tried stuffing the GETTEXT commands directly into the generic points but it wouldn't take. This requires just a little more effort than the datum shift approach but may be more appropriate for some.

    A "feature" of this is that it appears to provide the alignment DJAMS was interested in.

    I've only been able to try this on a few datasets but it seems to be working repeatably. If anyone comes across any surprises please share. This is a work in progress - consider it a beta version.

    "Use with caution and only when allowed by engineering requirements (dwg or MBD)"



    Tried your luck adressing the devs directly, Gomo?

    I think vpt knew more than he let on but I'm glad he let me stumble around.
Reply
  • The SUMMARY_MEAS enum has XYZ values strung one after the other. For this FCF with 33 features there ends up being 99 fields (33x3).

    3 of the features are selected from the FCF to provide spatial separation. The main thing is that they not be coincident or co-linear.

    FCF measured XYZ values are assigned to variables (these have received the FCF datum shift).

    Generic points for each of the 3 selected features are constructed.
    The nominals are assigned the FCF measured values.
    The measured values come from the measured values of the original feature
    The vectors are assigned from the measured feature (I don't think this really matters).

    A 3D bestfit alignment constructed from the 3 generic points...

    SPH1       =GENERIC/SPHERE,DEPENDENT,CARTESIAN,OUT,$
                NOM/XYZ,<0,0,0>,$
                MEAS/XYZ,<0,0,0>,$
                NOM/IJK,<0,0,1>,$
                MEAS/IJK,<0,0,1>,$
                DIAMETER/1,1.1
                DATDEF/FEATURE=SPH1,A
    FCFLOC1 =POSITION : CIR152_1,CIR152_2,CIR152_3,...
                FEATCTRLFRAME/SHOWNOMS=NO,SHOWPARAMS=YES,SHOWEXPANDED=YES
                  SIZE TOLERANCES/33,DIAMETER,0.375,0.005,-0.005
                  PRIMARY DIMENSION/POSITION,DIAMETER,0.01,MMC,A,MMC,<size>,<dat>,<dat>
                  SECONDARY DIMENSION/<Dim>,<tol>,<MC>,<dat>,<dat>,<dat>
                  NOTE/FCFLOC1
                FEATURES/CIR152_1,CIR152_2,CIR152_3,CIR152_4,CIR152_5,
                                    CIR152_6,CIR152_7,CIR152_8,CIR152_9,CIR152_10,
                                    CIR152_11,CIR152_12,CIR152_13,CIR152_14,
                                    CIR152_15,CIR152_16,CIR152_17,CIR152_18,
                                    CIR152_19,CIR152_20,CIR152_21,CIR152_22,
                                    CIR152_23,CIR152_24,CIR152_25,CIR152_26,
                                    CIR152_27,CIR152_28,CIR152_29,CIR152_30,
                                    CIR152_31,CIR152_32,CIR152_33,,
    $$ NO,
                * 1st feature in FCF
                ASSIGN/BF1_X=GETTEXT("SUMMARY_MEAS",1,{FCFLOC1})
                ASSIGN/BF1_Y=GETTEXT("SUMMARY_MEAS",2,{FCFLOC1})
                ASSIGN/BF1_Z=GETTEXT("SUMMARY_MEAS",3,{FCFLOC1})
    $$ NO,
                * 11th feature in FCF
                ASSIGN/BF2_X=GETTEXT("SUMMARY_MEAS",31,{FCFLOC1})
                ASSIGN/BF2_Y=GETTEXT("SUMMARY_MEAS",32,{FCFLOC1})
                ASSIGN/BF2_Z=GETTEXT("SUMMARY_MEAS",33,{FCFLOC1})
    $$ NO,
                * 24th feature in FCF
                ASSIGN/BF3_X=GETTEXT("SUMMARY_MEAS",70,{FCFLOC1})
                ASSIGN/BF3_Y=GETTEXT("SUMMARY_MEAS",71,{FCFLOC1})
                ASSIGN/BF3_Z=GETTEXT("SUMMARY_MEAS",72,{FCFLOC1})
    $$ NO,
                * 1st feature in FCF
    PT_BF1     =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<BF1_X,BF1_Y,BF1_Z>,$
                MEAS/XYZ,<CIR152_1.X,CIR152_1.Y,CIR152_1.Z>,$
                NOM/IJK,<CIR152_1.TI,CIR152_1.TI,CIR152_1.TK>,$
                MEAS/IJK,<CIR152_1.TI,CIR152_1.TI,CIR152_1.TK>
    $$ NO,
                * 11th feature in FCF
    PT_BF2     =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<BF2_X,BF2_Y,BF2_Z>,$
                MEAS/XYZ,<CIR152_11.X,CIR152_11.Y,CIR152_11.Z>,$
                NOM/IJK,<CIR152_11.TI,CIR152_11.TJ,CIR152_11.TK>,$
                MEAS/IJK,<CIR152_11.TI,CIR152_11.TJ,CIR152_11.TK>
    $$ NO,
                * 24th feature in FCF
    PT_BF3     =GENERIC/POINT,DEPENDENT,CARTESIAN,$
                NOM/XYZ,<BF3_X,BF3_Y,BF3_Z>,$
                MEAS/XYZ,<CIR152_24.X,CIR152_24.Y,CIR152_24.Z>,$
                NOM/IJK,<CIR152_24.TI,CIR152_24.TJ,CIR152_24.TK>,$
                MEAS/IJK,<CIR152_24.TI,CIR152_24.TJ,CIR152_24.TK>
    $$ NO,
                * 
    ALIGN3     =ALIGNMENT/START,RECALL:PREVIOUS,LIST=YES
                  ALIGNMENT/BF3D,LEAST_SQR,CREATE WEIGHTS=NO,ROTANDTRANS,USE SCALING=NO,0.003736,-0.007117,0.00653,-0.004491,-0.00306,-0.005415
                  ITERATEANDREPIERCECAD=NO
                  Deviation Threshold=0.002
                  SHOWALLINPUTS=YES,SHOWALLPARAMS=YES
                    ID=PT_BF1,Points,,1,YES,YES,YES,YES
                    ID=PT_BF3,Points,,1,YES,YES,YES,YES
                    ID=PT_BF2,Points,,1,YES,YES,YES,YES
                    ID=


    I tried stuffing the GETTEXT commands directly into the generic points but it wouldn't take. This requires just a little more effort than the datum shift approach but may be more appropriate for some.

    A "feature" of this is that it appears to provide the alignment DJAMS was interested in.

    I've only been able to try this on a few datasets but it seems to be working repeatably. If anyone comes across any surprises please share. This is a work in progress - consider it a beta version.

    "Use with caution and only when allowed by engineering requirements (dwg or MBD)"



    Tried your luck adressing the devs directly, Gomo?

    I think vpt knew more than he let on but I'm glad he let me stumble around.
Children
No Data