Class XyzabcSolver
Support to two-way conversion between MC (machine coordinate) and NP (Normal and Point).
public class XyzabcSolver : IMachineKinematics
- Inheritance
-
XyzabcSolver
- Implements
- Inherited Members
- Extension Methods
Constructors
XyzabcSolver(IXyzabcChain)
Ctor.
public XyzabcSolver(IXyzabcChain srcDevice)
Parameters
srcDeviceIXyzabcChaintarget device
Methods
IsAxisAExisted()
Whether rotary column A exists on this chain (non-null transformer).
public bool IsAxisAExisted()
Returns
IsAxisBExisted()
Whether rotary column B exists on this chain (non-null transformer).
public bool IsAxisBExisted()
Returns
IsAxisCExisted()
Whether rotary column C exists on this chain (non-null transformer).
public bool IsAxisCExisted()
Returns
McAbcToMat(Vec3d)
Converts machine ABC coordinates to a tilt matrix. the tilt matrix is the transformation matrix from table to attacher.
public Mat4d McAbcToMat(Vec3d mcAbc_rad)
Parameters
mcAbc_radVec3dThe machine ABC coordinates in radians
Returns
- Mat4d
The tilt matrix
McToMat(DVec3d)
Converts machine coordinates to an attacher matrix.
public Mat4d McToMat(DVec3d mc)
Parameters
mcDVec3d
Returns
- Mat4d
The attacher matrix
McToPn(DVec3d)
Machine coordinate to tool attacher Pn (Point and Normal). The Pn is from table buckle to tool attacher.
public DVec3d McToPn(DVec3d mc)
Parameters
mcDVec3d
Returns
- DVec3d
tool attacher Pn (Point and Normal)
OrientationToMcAbc(Mat4d, out Vec3d)
Converts a tilt matrix to machine ABC coordinates.
the tilt matrix is the transformation matrix from table to attacher.
the solution only fit the orientation part of the tiltMat.
public bool OrientationToMcAbc(Mat4d tiltMat, out Vec3d mcAbc_rad)
Parameters
tiltMatMat4dThe tilt matrix to convert
mcAbc_radVec3dOutput parameter that will contain the machine ABC coordinates in radians
Returns
- bool
Whether the conversion was successful
OrientationToMcAbc(Mat4d, Func<Vec3d, bool>, out Vec3d)
OrientationToMcAbc(Mat4d, out Vec3d) restricted to the
rotary positions isMcAbcAdmissible accepts (the
machine's rotary travel, typically). A full orientation fixes the
rotary positions up to axis periodicity, so a solution the predicate
refuses is a posture this machine cannot take: the conversion then
fails (false) and leaves the solver state as it was, so that the
caller can fall back to OrientationToMcAbc(Vec3d, Func<Vec3d, bool>, out Vec3d),
where the free rotation about the tool axis opens the other branch.
A null predicate admits everything.
public bool OrientationToMcAbc(Mat4d tiltMat, Func<Vec3d, bool> isMcAbcAdmissible, out Vec3d mcAbc_rad)
Parameters
tiltMatMat4dThe tilt matrix to convert.
isMcAbcAdmissibleFunc<Vec3d, bool>Accepts a machine ABC (radians) or refuses it; null admits everything.
mcAbc_radVec3dOutput machine ABC coordinates in radians.
Returns
- bool
Whether an admissible conversion was found.
OrientationToMcAbc(Vec3d, out Vec3d)
Converts a target tool axial direction (endpoint orientation) to machine ABC coordinates. Only the axial alignment is constrained; rotation about the tool axis is free.
Use this in place of OrientationToMcAbc(Mat4d, out Vec3d) when the
rotation about the tool axis is irrelevant (e.g. G53.1 rotary positioning). The
axial-only solve avoids the redundant 6-target full-matrix constraint and is more
likely to converge for tilt configurations such as G68.2 I180 J90 K0.
public bool OrientationToMcAbc(Vec3d toolAxialNormal, out Vec3d mcAbc_rad)
Parameters
toolAxialNormalVec3dTarget tool axial direction in table coordinates (the third row of the tilt matrix; e.g. AxialNormal).
mcAbc_radVec3dOutput machine ABC coordinates in radians.
Returns
- bool
Whether the conversion was successful.
OrientationToMcAbc(Vec3d, Func<Vec3d, bool>, out Vec3d)
OrientationToMcAbc(Vec3d, out Vec3d) preferring the
solution branch isMcAbcAdmissible accepts. The
axial-only problem has two branches on a two-rotary-axis machine
(on a table-table A/C: (A, C) and (−A, C+180°)); the plain overload
returns the branch nearest the solver's seed, which from the rotary
pole (A0 C0) is the one the tilt's azimuth happens to favour — half
the time the branch a cradle table with an asymmetric tilt travel
cannot reach (CHEM20180926 N100: G68.2 I210 J-90 + G53.1
solved to A=+90° on a −120°…+30° A axis). When the nearest branch is
refused, an implementation with a real solver searches the other
branches and returns the admissible one nearest the seed; when none
is admissible it returns the refused solution and true, and the
stroke-limit check downstream reports it. A null predicate makes this
the plain overload. The default implementation is the plain solve —
the predicate is advisory for an implementation without a solver.
public bool OrientationToMcAbc(Vec3d toolAxialNormal, Func<Vec3d, bool> isMcAbcAdmissible, out Vec3d mcAbc_rad)
Parameters
toolAxialNormalVec3dTarget tool axial direction in table coordinates.
isMcAbcAdmissibleFunc<Vec3d, bool>Accepts a machine ABC (radians) or refuses it; null admits everything.
mcAbc_radVec3dOutput machine ABC coordinates in radians.
Returns
- bool
Whether the conversion was successful (admissible or not).
PnToMc(DVec3d, out DVec3d)
Tool attacher Pn (Point and Normal) to machine coordinate. The Pn is from table buckle to tool attacher.
public bool PnToMc(DVec3d np, out DVec3d mcXyzabc_rad)
Parameters
Returns
- bool
whether conversion succeeded
Rebuild()
Rebuild the solver. It should be called after the kinematic chain of Hi.Numerical.Xyzabc.XyzabcSolver.SrcDevice is modified.
public void Rebuild()
SetPn(DVec3d, out DVec3d)
Cutter location to machine coordinate. On failure nothing is written back and the solver state (the implicit seed of the next solve) is restored to what it was on entry; the out value still reports the failed solve's parameters.
public bool SetPn(DVec3d pn, out DVec3d mc)
Parameters
Returns
- bool
true if solved