Skip to content

Commit

Permalink
Merge branch 'christjt/react-components-system-datamodel' of https://…
Browse files Browse the repository at this point in the history
…github.com/cognitedata/reveal into christjt/react-components-system-datamodel
  • Loading branch information
christjt committed Aug 14, 2023
2 parents c3f30df + 8a7658e commit a6bc8e5
Show file tree
Hide file tree
Showing 5 changed files with 365 additions and 4 deletions.
2 changes: 1 addition & 1 deletion react-components/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"styled-components": ">=5"
},
"devDependencies": {
"@babel/preset-env": "7.22.9",
"@babel/preset-env": "7.22.10",
"@babel/preset-react": "7.22.5",
"@babel/preset-typescript": "7.22.5",
"@cognite/cogs.js": "^9.17.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/*!
* Copyright 2023 Cognite AS
*/

import { useMemo, type ReactElement, useState, useEffect } from 'react';
import { useReveal } from '../RevealContainer/RevealContext';
import { Button } from '@cognite/cogs.js';
import { MeasurementTool } from '@cognite/reveal/tools';
import { FEET_TO_INCHES, METERS_TO_FEET } from '../../utilities/constants';

const distancesInFeetAndMeters = (distanceInMeters: number): string => {
const distanceInFeet = distanceInMeters * METERS_TO_FEET;
const distanceInFeetInt = Math.floor(distanceInFeet);
const distanceInches = Math.round(FEET_TO_INCHES * (distanceInFeet - distanceInFeetInt));
return `${distanceInMeters.toFixed(2)} m\n ${distanceInFeetInt}' ${distanceInches}''`;
};

export const MeasurementButton = (): ReactElement => {
const viewer = useReveal();
const [measurementEnabled, setMeasurementEnabled] = useState<boolean>(false);

const measurementTool = useMemo(() => {
return new MeasurementTool(viewer, {
distanceToLabelCallback: (distanceInMeters: number) => {
return distancesInFeetAndMeters(distanceInMeters);
}
});
}, [viewer]);

const enterMeasurement = (): void => {
viewer.domElement.style.cursor = 'crosshair';
measurementTool.enterMeasurementMode();
measurementTool.visible(true);
};

const exitMeasurement = (): void => {
viewer.domElement.style.cursor = 'default';
measurementTool.visible(false);
measurementTool.exitMeasurementMode();
};

const handleMeasurement = (enable: boolean): void => {
if (viewer.models.length <= 0) {
return;
}
setMeasurementEnabled((prevState) => !prevState);
if (enable) {
enterMeasurement();
} else {
exitMeasurement();
}
};

useEffect(() => {
return () => {
if (measurementEnabled) {
exitMeasurement();
}
};
}, []);

return (
<Button
type="ghost"
icon="Ruler"
toggled={measurementEnabled}
aria-label="Make measurements"
onClick={() => {
handleMeasurement(!measurementEnabled);
}}
/>
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { FitModelsButton } from './FitModelsButton';
import { LayersButton } from './LayersButton';
import { SlicerButton } from './SlicerButton';
import { withSuppressRevealEvents } from '../../higher-order-components/withSuppressRevealEvents';
import { MeasurementButton } from './MeasurementButton';
import { HelpButton } from './HelpButton';

const defaultStyle: ToolBarProps = {
Expand All @@ -28,7 +29,7 @@ const defaultContent = (
<div className="cogs-toolbar-divider" />

<SlicerButton />
<Button type="ghost" icon="Ruler" aria-label="Make measurements" />
<MeasurementButton />

<div className="cogs-toolbar-divider" />

Expand All @@ -52,10 +53,12 @@ export const RevealToolbar = withSuppressRevealEvents(
FitModelsButton: typeof FitModelsButton;
SlicerButton: typeof SlicerButton;
LayersButton: typeof LayersButton;
MeasurementButton: typeof MeasurementButton;
HelpButton: typeof HelpButton;
};

RevealToolbar.FitModelsButton = FitModelsButton;
RevealToolbar.SlicerButton = SlicerButton;
RevealToolbar.LayersButton = LayersButton;
RevealToolbar.MeasurementButton = MeasurementButton;
RevealToolbar.HelpButton = HelpButton;
2 changes: 2 additions & 0 deletions react-components/src/utilities/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
*/

export const DEFAULT_QUERY_STALE_TIME = 1000 * 60 * 10; // 10 minutes
export const METERS_TO_FEET = 3.28084;
export const FEET_TO_INCHES = 12;
Loading

0 comments on commit a6bc8e5

Please sign in to comment.