From 4d49c75f3b323f8971e839bc22ae71f1373cff86 Mon Sep 17 00:00:00 2001
From: Micheal Parks <103450731+micheal-parks@users.noreply.github.com>
Date: Thu, 25 Jul 2024 12:11:54 -0400
Subject: [PATCH] [RSDK-7089] Orientation format fix, add LengthCapsuleGeometry
(#545)
---
packages/blocks/package.json | 2 +-
.../lib/capsule-geometry/capsule-geometry.ts | 28 +++++++++++++++++++
packages/blocks/src/lib/index.ts | 1 +
.../components/input/orientation.svelte | 20 +++++++------
.../components/nav/obstacles.svelte | 7 ++---
.../navigation-map/components/obstacle.svelte | 13 +++++++--
6 files changed, 54 insertions(+), 17 deletions(-)
create mode 100644 packages/blocks/src/lib/capsule-geometry/capsule-geometry.ts
diff --git a/packages/blocks/package.json b/packages/blocks/package.json
index a19d880b..b8ba1840 100644
--- a/packages/blocks/package.json
+++ b/packages/blocks/package.json
@@ -1,6 +1,6 @@
{
"name": "@viamrobotics/prime-blocks",
- "version": "0.1.0",
+ "version": "0.1.1",
"publishConfig": {
"access": "public"
},
diff --git a/packages/blocks/src/lib/capsule-geometry/capsule-geometry.ts b/packages/blocks/src/lib/capsule-geometry/capsule-geometry.ts
new file mode 100644
index 00000000..0494ae40
--- /dev/null
+++ b/packages/blocks/src/lib/capsule-geometry/capsule-geometry.ts
@@ -0,0 +1,28 @@
+/* eslint-disable max-classes-per-file */
+import { LatheGeometry, Path } from 'three';
+
+/**
+ * An alternate definition of a THREE.CapsuleGeometry: the length
+ * represents the entire length of the capsule, including the rounded ends,
+ * rather than just the midsection, which is the default THREE.CapsuleGeometry definition.
+ */
+export class LengthCapsuleGeometry extends LatheGeometry {
+ override type = 'CapsuleGeometry';
+
+ constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {
+ const path = new Path();
+ const midsectionLength = length - 2 * radius;
+
+ path.absarc(
+ 0,
+ -midsectionLength / 2 - radius / 2,
+ radius,
+ Math.PI * 1.5,
+ 0
+ );
+
+ path.absarc(0, midsectionLength / 2 + radius / 2, radius, 0, Math.PI * 0.5);
+
+ super(path.getPoints(capSegments), radialSegments);
+ }
+}
diff --git a/packages/blocks/src/lib/index.ts b/packages/blocks/src/lib/index.ts
index 9287fbec..aa5d64f5 100644
--- a/packages/blocks/src/lib/index.ts
+++ b/packages/blocks/src/lib/index.ts
@@ -1,5 +1,6 @@
// Three.js components
export { default as AxesHelper } from './axes-helper/axes-helper.svelte';
+export { LengthCapsuleGeometry } from './capsule-geometry/capsule-geometry';
// MapLibre components
export { LngLat, MercatorCoordinate } from 'maplibre-gl';
diff --git a/packages/blocks/src/lib/navigation-map/components/input/orientation.svelte b/packages/blocks/src/lib/navigation-map/components/input/orientation.svelte
index 6574bb13..c0a30529 100644
--- a/packages/blocks/src/lib/navigation-map/components/input/orientation.svelte
+++ b/packages/blocks/src/lib/navigation-map/components/input/orientation.svelte
@@ -1,14 +1,16 @@
+
@@ -27,8 +29,8 @@ const handleInput = () => {
event.key === 'Enter' && handleInput()}
diff --git a/packages/blocks/src/lib/navigation-map/components/nav/obstacles.svelte b/packages/blocks/src/lib/navigation-map/components/nav/obstacles.svelte
index 9c874ee5..525daec3 100644
--- a/packages/blocks/src/lib/navigation-map/components/nav/obstacles.svelte
+++ b/packages/blocks/src/lib/navigation-map/components/nav/obstacles.svelte
@@ -70,10 +70,9 @@ const handleGeometryInput =
};
const handleOrientationInput =
- (name: string, geoIndex: number) => (event: CustomEvent) => {
+ (name: string, geoIndex: number) => (value: number) => {
const index = $obstacles.findIndex((obstacle) => obstacle.name === name);
- $obstacles[index]!.geometries[geoIndex]!.pose.orientationVector.th =
- event.detail;
+ $obstacles[index]!.geometries[geoIndex]!.pose.orientationVector.th = value;
dispatch('update', $obstacles);
};
@@ -213,7 +212,7 @@ $: debugMode = $environment === 'debug';
/>
{/each}
diff --git a/packages/blocks/src/lib/navigation-map/components/obstacle.svelte b/packages/blocks/src/lib/navigation-map/components/obstacle.svelte
index 3780355a..45a32ab3 100644
--- a/packages/blocks/src/lib/navigation-map/components/obstacle.svelte
+++ b/packages/blocks/src/lib/navigation-map/components/obstacle.svelte
@@ -7,7 +7,13 @@ import type {
MapLayerMouseEvent,
MapLayerTouchEvent,
} from 'maplibre-gl';
-import { useMapLibre, type Obstacle, useMapLibreEvent, AxesHelper } from '$lib';
+import {
+ useMapLibre,
+ type Obstacle,
+ useMapLibreEvent,
+ AxesHelper,
+ LengthCapsuleGeometry,
+} from '$lib';
import { view, hovered, selected, environment, obstacles } from '../stores';
/** The obstacle name. */
@@ -99,7 +105,7 @@ const handlePointerMove = (event: MapMouseEvent) => {
pointermove.set(event.point.x, event.point.y);
pointermove.sub(pointerdown);
obstacle.geometries[0]!.pose.orientationVector.th =
- pointerdownTheta + pointermove.y;
+ pointerdownTheta + pointermove.y / 10;
// Scale
} else if (event.originalEvent.altKey) {
@@ -221,7 +227,8 @@ useMapLibreEvent('mousedown', handleMapPointerDown);
/>
{/if}
-