Table of Contents

Class AbcTravel

Namespace
Hi.Numerical.Xyzabc
Assembly
HiMech.dll

The rotary travel an inverse-kinematics solve is asked to respect, as data: the configured negative / positive end of each rotary axis A, B, C in degrees, null where an end is not configured (unbounded). This is the managed form of the native mechkinematicsabc_travel_t (abc_travel_t.h) that XyzabcSolver hands to core.dll: the solver's inverse kinematics runs there, so a rotary-travel admissibility test crosses the boundary as this record, never as a delegate.

public sealed class AbcTravel
Inheritance
AbcTravel
Inherited Members
Extension Methods

Remarks

RotaryTravel(IEnumerable<INcDependency>) builds one from the IStrokeLimitConfig of a dependency list, and the two travel-aware overloads of IMachineKinematics (OrientationToMcAbc(mat4d_t, AbcTravel, out vec3d_t), OrientationToMcAbc(vec3d_t, AbcTravel, out vec3d_t)) take it. A null record, or one without any configured end (HasAnyLimit false), does not restrict: the plain solve, bit for bit. IsAdmissible(vec3d_t) is the admissibility test: an axis whose two limits span a full turn or more is always admissible, a narrower span is tested on the angle wrapped into the turn that starts at the negative limit, a NaN component (an axis the chain does not have) is not tested — IsWithinRotaryTravel(double, double?, double?).

Constructors

AbcTravel(double?, double?, double?, double?, double?, double?)

Ctor: the two ends of each rotary axis in degrees. null, NaN and an infinity all mean “not configured” (the reading of DescribeUnlimitedAxes(IEnumerable<string>, Func<string, double?>, Func<string, double?>): the legacy HardNcEnv boxes default to an infinite box).

public AbcTravel(double? negativeA_deg, double? positiveA_deg, double? negativeB_deg, double? positiveB_deg, double? negativeC_deg, double? positiveC_deg)

Parameters

negativeA_deg double?

The negative end of A, or null.

positiveA_deg double?

The positive end of A, or null.

negativeB_deg double?

The negative end of B, or null.

positiveB_deg double?

The positive end of B, or null.

negativeC_deg double?

The negative end of C, or null.

positiveC_deg double?

The positive end of C, or null.

Properties

HasAnyLimit

Whether any end of any rotary axis is configured. False means the record does not restrict: nothing to test, the plain solve (RotaryTravel(IEnumerable<INcDependency>) returns null rather than such a record).

public bool HasAnyLimit { get; }

Property Value

bool

Methods

GetNegativeLimit_deg(int)

The negative end of the rotary axis dir (0 = A, 1 = B, 2 = C) in degrees; null when unbounded.

public double? GetNegativeLimit_deg(int dir)

Parameters

dir int

Returns

double?

Exceptions

ArgumentOutOfRangeException

dir is not 0, 1 or 2.

GetPositiveLimit_deg(int)

The positive end of the rotary axis dir (0 = A, 1 = B, 2 = C) in degrees; null when unbounded.

public double? GetPositiveLimit_deg(int dir)

Parameters

dir int

Returns

double?

Exceptions

ArgumentOutOfRangeException

dir is not 0, 1 or 2.

IsAdmissible(vec3d_t)

Whether a machine ABC (radians) meets every configured limit — the test a travel-aware IMachineKinematics solve applies to a candidate solution. Per axis the angle is taken in degrees, a NaN component is skipped, and IsWithinRotaryTravel(double, double?, double?) decides against the two ends.

public bool IsAdmissible(vec3d_t mcAbc_rad)

Parameters

mcAbc_rad vec3d_t

The machine ABC to test, in radians; NaN for an axis the chain lacks.

Returns

bool

True when every non-NaN component lies inside its travel (or has none).