Spaces:
Running
Running
File size: 1,567 Bytes
6ce4ca6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
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)}`;
}
|