blanchon's picture
squash: initial commit
3aea7c6
raw
history blame
1.61 kB
export function xyzFromString(child: Element): [x: number, y: number, z: number] | undefined {
const arr = numberStringToArray(child, 'xyz');
if (!arr || arr.length != 3) {
return
}
return arr as [x: number, y: number, z: number];
}
export function rpyFromString(child: Element): [roll: number, pitch: number, yaw: number] | undefined {
const arr = numberStringToArray(child, 'rpy');
if (!arr || arr.length != 3) {
return
}
return arr as [roll: number, pitch: number, yaw: number];
}
export function rgbaFromString(child: Element): [r: number, g: number, b: number, a: number] | undefined {
const arr = numberStringToArray(child, 'rgba');
if (!arr || arr.length != 4) {
return
}
return arr as [r: number, g: number, b: number, a: number];
}
export function numberStringToArray(
child: Element, name: string = 'xyz'): number[] | undefined {
// parse a list of values from a string
// (like "1.0 2.2 3.0" into an array like [1, 2.2, 3])
// used in URDF for position, orientation an color values
if (child.hasAttribute(name)) {
const xyzStr = child.getAttribute(name)?.split(' ')
if (xyzStr) {
const arr = []
for (const nr of xyzStr) {
arr.push(parseFloat(nr));
}
return arr;
}
}
}
export function radToEuler(rad: number): number {
return rad * 180 / Math.PI
}
export function numberArrayToColor([r, g, b]: [number, number, number]): string {
const toHex = (n: number) => Math.round(n).toString(16).padStart(2, '0');
// 0.06, 0.4, 0.1, 1
return `#${toHex(r * 255)}${toHex(g * 255)}${toHex(b * 255)}`;
}