hexagon logo

Iterative alignment and using XactMeasure

Alright here is my problem/question.
I have a part where Datum -A- (Z axis) is not prismatic, however datum -B- (X axis) and -C- (Y axis) are.

I do not have much experience with Iterative alignments other than that I have been to the Level 2 Hexagon class (Just don't use them or have the need too).

My thoughts were, this is a good time, to try an Iterative alignment.
I believe I have that part of the program correct:
I created 6 auto vector points on top (Datum -A-),
then 5 auto vector points on left side (Datum -B-)
then finally 5 auto vector points on the front of the part (Datum -C-).

When I create the Iterative alignment I pick top 6 points as level (Datum -A-),
5 points on left rotate (Datum -B-),
then 5 points on front as origin (Datum -C-).

After completing this Iterative alignment my trihedron doesn't move from before the alignment.
So I constructed planes out of the five points for datum -B- and -C- respectively.
I then origin my "X" to Datum -B- and my "Y" to datum -C-.
How do I origin my "Z", and how do I assign my datum -A- for exact measure? Where did I go wrong? Please any help would be greatly appreciated.
  • Alright here is my problem/question.
    I have a part where Datum -A- (Z axis) is not prismatic, however datum -B- (X axis) and -C- (Y axis) are.

    I do not have much experience with Iterative alignments other than that I have been to the Level 2 Hexagon class (Just don't use them or have the need too).

    My thoughts were, this is a good time, to try an Iterative alignment.
    I believe I have that part of the program correct:
    I created 6 auto vector points on top (Datum -A-),
    then 5 auto vector points on left side (Datum -B-)
    then finally 5 auto vector points on the front of the part (Datum -C-).

    When I create the Iterative alignment I pick top 6 points as level (Datum -A-),
    5 points on left rotate (Datum -B-),
    then 5 points on front as origin (Datum -C-).

    After completing this Iterative alignment my trihedron doesn't move from before the alignment.
    So I constructed planes out of the five points for datum -B- and -C- respectively.
    I then origin my "X" to Datum -B- and my "Y" to datum -C-.
    How do I origin my "Z", and how do I assign my datum -A- for exact measure? Where did I go wrong? Please any help would be greatly appreciated.


    Sorry, but I just had to edit your original post for clarity.

    There are three issues here:
    1) You missed in Level 2 that Iterative doesn't require you to set origins at all, it takes the nominals and actuals of each point and fits a coordinate system to minimize the error between the two. This is why you must have nominals from a CAD file or a print. If you do this with jogbox-created points, the nominals and actuals are exactly equal (in Startup coordinate system of course) and no useful alignment is done. The trihedron doesn't move because no fitting is being performed.

    2) There is a disconnect between Iterative's basic methodology of near-random surface points as 'reference datums' and XactMeasure's GD&T-specific usage of discrete geometric features as 'real datums'. You must have discrete planes, cylinders, circles, etc features to assign datum letters to.
    So, is A a plane? Then measure it as a plane, and assign it datum letter A.
    XactMeasure will create it's own coordinate system fit to these datum features to report what you need of it.

    3) You wrote, "Datum -A- (Z axis) is not prismatic" - what do you mean by that? Is it a tilted plane whose vector is not pointing in +Z?
    That's not a problem. In the regular alignment dialog there is an Offset field in the Rotate section where you can enter in a decimal degrees offset to rotate your coordinate system around an axis of your choice. No iterative is needed.
    As you observed, tilted A plane then becomes a poor choice to set your Z origin on - a better one would be an imaginary Constructed Line where A plane intersects the B side plane.
  • Sorry, but I just had to edit your original post for clarity.

    There are three issues here:
    1) You missed in Level 2 that Iterative doesn't require you to set origins at all, it takes the nominals and actuals of each point and fits a coordinate system to minimize the error between the two. This is why you must have nominals from a CAD file or a print. If you do this with jogbox-created points, the nominals and actuals are exactly equal (in Startup coordinate system of course) and no useful alignment is done. The trihedron doesn't move because no fitting is being performed.

    2) There is a disconnect between Iterative's basic methodology of near-random surface points as 'reference datums' and XactMeasure's GD&T-specific usage of discrete geometric features as 'real datums'. You must have discrete planes, cylinders, circles, etc features to assign datum letters to.
    So, is A a plane? Then measure it as a plane, and assign it datum letter A.
    XactMeasure will create it's own coordinate system fit to these datum features to report what you need of it.

    3) You wrote, "Datum -A- (Z axis) is not prismatic" - what do you mean by that? Is it a tilted plane whose vector is not pointing in +Z?
    That's not a problem. In the regular alignment dialog there is an Offset field in the Rotate section where you can enter in a decimal degrees offset to rotate your coordinate system around an axis of your choice. No iterative is needed.
    As you observed, tilted A plane then becomes a poor choice to set your Z origin on - a better one would be an imaginary Constructed Line where A plane intersects the B side plane.


    First let me apologize for the cluster, and thank you for clarifying for me.

    1) Ok I think I understand. I am programming offline so no worries with "jog-box created" points. I can create auto vector points from model and get Iterative alignment to work? My trihedron will not move. Does an Iterative alignment control 6 DOF?

    2 & 3) Datum -A- is not a plane, cylinder, or any other auto feature it is a surface with a very slight curve ("not prismatic", maybe not the right terminology) So if it can't be labeled datum -A- with my datum feature label for my dimensions in exact measure and my Iterative alignment doesn't translate my origins to my datums, how do I report my true position and profile dimensions to my A-B-C feature control frame?
  • First let me apologize for the cluster, and thank you for clarifying for me.

    No worries, you are thinking rapidly which is a good sign!

    1) Ok I think I understand. I am programming offline so no worries with "jog-box created" points. I can create auto vector points from model and get Iterative alignment to work? My trihedron will not move.

    Ok, time to pull out the Big Explanation...
    So: we are going to measure a 123 block.
    We get a CAD file of the 123 block, and it's laying down with 1" being Z height, 2" being front-back Y width, and 3" left-right X length.
    In the CAD model:
    -> X zero = left face,
    -> Y zero = front face,
    -> Z zero = top face.

    Running offline, you do the same exact Iterative plan of attack that you posted originally:
    -> Some points on top face, all nominal Z zero, for the Level group.
    -> Some points on front face, all nominal Y zero, for the Rotate group.
    -> Some points on left face, all nominal X zero, for the origin group.

    Running offline,
    -> all those points on top plane with nominal Z zero also have actual of Z zero,
    -> all those points on front plane with nominal Y zero also have actual of Y zero,
    -> all those points on left plane with nominal X zero also have actual of X zero.

    So when you create the Iterative Alignment, it looks at each point's deviation from nominal to actual and then shifts and twists and tweaks the coordinate system around to try to reduce those deviations.
    Running offline, it has a very easy job - all deviations are zero. The trihedron... Does. Not. Move.

    So, then we take this PRG to the CMM and measure a 123 block In Real Life.
    First, with the cursor BEFORE the alignment, observe that the trihedron of the CAD model is on the part, but look at your probe readout and understand that you're currently in machine Startup coordinate system.
    For sake of argument I'm assuming that it's upper left front, your machine may vary.

    So, after you measure the 123 block sitting on the granite you get real actuals as defined by Startup coordinate system, with the cursor BEFORE the alignment:
    -> all those points on top plane with nominal Z zero now have actual of Z negative "whatever inches the block is below machine home",
    -> all those points on front plane with nominal Y zero now have actual of Y positive "whatever inches the block is away from machine home",
    -> all those points on left plane with nominal X zero now have actual of X positive "whatever inches the block is to the right of machine home".

    Then - the final step - the Iterative Alignment works it's background magic:
    It shifts and twists and tweaks the coordinate system around to try to reduce those deviations between nominal and actual.
    It makes a new alignment, one where:
    -> the X deviations of the left plane points are reduced from "whatever inches the block is to the right of machine home" to zero.
    -> the Y deviations of the front plane points are reduced from "whatever inches the block is away from machine home" to zero.
    -> the Z deviations of the top plane points are reduced from "whatever inches the block is below machine home" to zero.

    Click your cursor AFTER the iterative alignment and dimension the points to verify.
    Notice the trihedron does not move as it's an artifact of the CAD file. All the alignment is doing is 'bringing' the actuals closer to the nominals.


    Does an Iterative alignment control 6 DOF?

    It does control 6 DOF as long as your sets of points don't all have the same vector. Your plan does control all 6 DOF.


    Final explanation:
    Instead of putting origins at datums, Iterative merely puts actual datum results as close to their nominals as possible.

    That 123 block could be a car part hanging at some crazy angle in some huge complete-car XYZ coordinate system, with different random XYZ nominals for every point on the faces - and the Iterative would work to shift and twist and tweak the actuals until they fit those crazy nominals.
    And the trihedron would still not move, because origin is not moving - only actuals are being moved.

    Additional note:
    The reason the Iterative repeats the measurement is that during initial manual run, each point has probing cosine error from clumsy human. Then, it repeats it again because the first couple DCC runs have decreasing probing cosine error as it tries to get alignments closer and closer to perfect.

    NOTE: Do not add any material modifiers on datums (there better not be any for this datum scheme anyway) with Legacy. That's an old flaw


    ~~~

    2 & 3) Datum -A- is not a plane, cylinder, or any other auto feature it is a surface with a very slight curve ("not prismatic", maybe not the right terminology) So if it can't be labeled datum -A- with my datum feature label for my dimensions in exact measure and my Iterative alignment doesn't translate my origins to my datums, how do I report my true position and profile dimensions to my A-B-C feature control frame?

    What you have is an Irregular Datum Feature.
    Your very best course of action is to switch from Xactmeasure to Legacy mode.
    Then create Legacy position dimensions, which will neatly report the positions of the features according to the Current Alignment, which is your Iterative. Also put Report Comment before the dimension stating what datums the results are relative to: A, B and C.

    Finishing touches: sometimes we even add the T values of the A, B, and C datum points to the report with tiny tolerances (which is fine because the results will be super close to or exactly zero) to drive home the fact that we are datumed on those surfaces.
  • That's a great explanation Josh. You should make this an "Iterative Alignment" sticky Sunglasses
  • Thank you for the thorough explanation of Iterative alignments. I think there is one misunderstanding, that is entirely my fault, because I did not explain it entirely.Slight smile My customer supplied model comes to me with the CAD origin (Trihedron) in aircraft/car body coordinates. I then transform my model in a way that it is square with my machine and the origin is now in a hole that we do a read point alignment with and run the entire part in DCC. So my question is if my trihedron is not at the A-B-C alignment, how do I report my true position, and profile dimensions to a A-B-C FCF? I do not want my report in aircraft or car body coordinates either. I want my dimensions to come from my Datums A-B-C. I think this eliminates using a Iterative alignment, because I did some tests today and the Iterative alignment will use the origin from wherever it is on the model, not necessarily from the Datums?
  • [hijack]
    Josh, I appreciate the detailed explanations here. Like BWIZZLE, I went to Level 2 training but never fully grasped Iterative alignments because our shop does not make use of them. I have to ask, though, if the origin does not move following iteration then what is the value of this type of alignment?

    I only use alignments to manipulate the coordinate system as a means for measuring other features. If Iterative Alignment instead moves the measured values closer to the nominals then is the goal only to reduce probing error of the alignment features? Would I then create a regular alignment to move my coordinate system to the alignment features?

    I've tried many times to wrap my head around this, but I just can't seem to understand the application.
    [/hijack]
  • Thank you for the thorough explanation of Iterative alignments. I think there is one misunderstanding, that is entirely my fault, because I did not explain it entirely.Slight smile My customer supplied model comes to me with the CAD origin (Trihedron) in aircraft/car body coordinates. I then transform my model in a way that it is square with my machine and the origin is now in a hole that we do a read point alignment with and run the entire part in DCC. So my question is if my trihedron is not at the A-B-C alignment, how do I report my true position, and profile dimensions to a A-B-C FCF? I do not want my report in aircraft or car body coordinates either. I want my dimensions to come from my Datums A-B-C. I think this eliminates using a Iterative alignment, because I did some tests today and the Iterative alignment will use the origin from wherever it is on the model, not necessarily from the Datums?


    If you transform the origin to be where the origin of ABC is, then when you run the iterative alignment, it will be in the ABC datum reference frame.

    [hijack]
    Josh, I appreciate the detailed explanations here. Like BWIZZLE, I went to Level 2 training but never fully grasped Iterative alignments because our shop does not make use of them. I have to ask, though, if the origin does not move following iteration then what is the value of this type of alignment?

    I only use alignments to manipulate the coordinate system as a means for measuring other features. If Iterative Alignment instead moves the measured values closer to the nominals then is the goal only to reduce probing error of the alignment features? Would I then create a regular alignment to move my coordinate system to the alignment features?

    I've tried many times to wrap my head around this, but I just can't seem to understand the application.
    [/hijack]


    The origin doesn't move because you are moving the measured data as close to nominal as possible. It is similar to putting a part on a fixture. The fixture doesn't move, the part fits to the fixture. In this same line of thought, you are moving the part (measured data) onto the fixture (nominal data). This is most useful when you are required to report part coordinates in car body alignment, rather than to the DRF. Or, more technically, the DRF is car body, and the cad nominals give your basic offsets and rotations, such that the part is positioned to the car body DRF.
  • Thank you for the thorough explanation of Iterative alignments. I think there is one misunderstanding, that is entirely my fault, because I did not explain it entirely.Slight smile My customer supplied model comes to me with the CAD origin (Trihedron) in aircraft/car body coordinates. I then transform my model in a way that it is square with my machine and the origin is now in a hole that we do a read point alignment with and run the entire part in DCC. So my question is if my trihedron is not at the A-B-C alignment, how do I report my true position, and profile dimensions to a A-B-C FCF? I do not want my report in aircraft or car body coordinates either. I want my dimensions to come from my Datums A-B-C. I think this eliminates using a Iterative alignment, because I did some tests today and the Iterative alignment will use the origin from wherever it is on the model, not necessarily from the Datums?

    1. You're totally overthinking this.
    2. See below.


    [hijack]
    Josh, I appreciate the detailed explanations here. Like BWIZZLE, I went to Level 2 training but never fully grasped Iterative alignments because our shop does not make use of them. I have to ask, though, if the origin does not move following iteration then what is the value of this type of alignment?

    I only use alignments to manipulate the coordinate system as a means for measuring other features. If Iterative Alignment instead moves the measured values closer to the nominals then is the goal only to reduce probing error of the alignment features? Would I then create a regular alignment to move my coordinate system to the alignment features?

    I've tried many times to wrap my head around this, but I just can't seem to understand the application.
    [/hijack]



    Head wrapping for all:
    Let's say the 123 block is given to you in a CAD file, but in that CAD file the corner of the A, B, and C planes is sitting at X 1000, Y -500, and Z 300.
    Also, the block is tilted 45 degrees in YZ and 10 degrees in ZX.

    You pick a minimum of 3 points on Datum A face, a minimum of 2 points on Datum B face, and minimum 1 point on Datum C face.
    Note these points will have wacky nominal XYZ values in the X 1000, Y -500, and Z 300 neighborhhod - as well as wacky IJK values as the faces are at compound angles.

    You create the Iterative, and run it.
    Your manual points are taken and PC-DMIS creates an alignment that tries to MOVE all actual measured results as a package to get each of them as close to their nominals as possible.
    It gets close, and then re-measures the points in DCC for less cosine error and repeats the process until it gets as little deviation as possible.
    When it's done, the part is fully aligned to the datums.
    However, the datum points are not sitting at zero on each X, Y and Z scale - they are sitting at their nominal coordinates as defined in the original CAD coordinate system. So the corner of the block is now sitting at X 1000, Y -500, and Z 300, and points taken on those datum faces will have wacky XYZ-IJK nominals but T-value deviations very close to zero (if the faces are flat ha ha).

    The model's nominals are in a CAD coordinate system, and Iterative merely takes the CMM-Startup-relative actuals and moves them as close as possible to the CAD coordinate system.

    ~~~

    Xactmeasure mode is different than Legacy Mode.
    In Legacy Mode, the nominals and actuals are relative to the current alignment.
    In Xactmeasure, the datum inputs are used to create a miniature custom alignment and new nominals and actuals are calculated internally based on that.

    So, on the Tilted-in-CAD 123 block: we need to measure a hole drilled in the A face to ABC. The nominal centerpoint of the hole is some wacky XYZ number near the X 1000, Y -500, and Z 300 area - but in a print view tilted to look normal down at the Datum A face we see that the hole is really 1" from the B edge and 0.5" from the C edge.

    In Xactmeasure mode, a miniature custom alignment and new nominals and actuals are calculated: the new nominals of that hole for dimensioning purposes only are X 1.000, Y 0.500, Z 0.00, and the results will be in similar format.

    In Legacy mode with the Iterative Alignment as current, the results would be output in the X 1000, Y -500, and Z 300 area system...

    ...unless you went and made Another Alignment that leveled to a plane on A, rotated to a line/plane on B, and origined on C. Then you would see results in the X 1.000 Y 0.500 Z 0.000 system you just made.

    On BWIZZLE's part, there is no way to Level to the irregular A datum. There's also no way to define it as a single 3D feature (plane or cylinder) that could be used for leveling by an Xactmeasure internal calculation. Therefore, the best way is (as I explained above) a good Iterative - which has been written - and some good Legacy position dimensions.

    /THREAD
  • If you transform the origin to be where the origin of ABC is, then when you run the iterative alignment, it will be in the ABC datum reference frame.


    As stated above Datum "A" is not a flat surface, nor is it an auto feature like a plane, cylinder, sphere, etc. I have no way to origin on datum "A". If it was that easy I would not be on here.

  • On BWIZZLE's part, there is no way to Level to the irregular A datum. There's also no way to define it as a single 3D feature (plane or cylinder) that could be used for leveling by an Xactmeasure internal calculation. Therefore, the best way is (as I explained above) a good Iterative - which has been written - and some good Legacy position dimensions.

    /THREAD


    I'm looking for a way to get my nominals to come from the datums, not from my trihedron. Iterative alignment will align to trihedron not the datums. I guess my problem is making Datum "A" an origin more than the Iterative alignment. The Iterative alignment part of the problem is just what I thought would fix the problem, and apparently it will not. All of the information on Iterative alignments is great, but is not the answer I'm looking for. I guess all I really want to know is how do you origin on an irregular CAD surface?

    Iterative alignments are great for measuring parts in aircraft/car body coordinates, but that seems to be about it. When you need your report to measure from the datums and not the trihedron, its not effective alone.