Added PolarView, which allows us to rotate the camera using polar coordinates. This is used by the preview service currently

This commit is contained in:
AlexandruPopovici
2022-08-25 17:04:09 +03:00
parent a85f76f5ca
commit 5dbbefcd19
4 changed files with 49 additions and 7 deletions
+14
View File
@@ -214,6 +214,20 @@ export default class Sandbox {
console.warn(await this.viewer.screenshot())
})
const rotate = this.tabs.pages[0].addButton({
title: '360'
})
rotate.on('click', async () => {
const waitForAnimation = async (ms = 70) =>
await new Promise((resolve) => {
setTimeout(resolve, ms)
})
for (let i = 0; i < 24; i++) {
this.viewer.setView({ azimuth: Math.PI / 12, polar: 0 }, false)
await waitForAnimation(1000)
}
})
const canonicalViewsFolder = this.tabs.pages[0].addFolder({
title: 'Canonical Views',
expanded: true
+11 -2
View File
@@ -105,7 +105,13 @@ export type SpeckleView = {
export type InlineView = {
position: Vector3
target: Vector3
zoom: number
}
export type PolarView = {
azimuth: number
polar: number
radius?: number
origin?: Vector3
}
/**
@@ -130,7 +136,10 @@ export interface IViewer {
setLightConfiguration(config: LightConfiguration): void
getViews(): SpeckleView[]
setView(view: CanonicalView | SpeckleView | InlineView, transition?: boolean)
setView(
view: CanonicalView | SpeckleView | InlineView | PolarView,
transition?: boolean
)
loadObject(url: string, token?: string, enableCaching?: boolean): Promise<void>
cancelLoad(url: string, unload?: boolean): Promise<void>
+21 -4
View File
@@ -39,6 +39,7 @@ import {
CanonicalView,
DefaultLightConfiguration,
InlineView,
PolarView,
SelectionEvent,
SpeckleView,
SunLightConfiguration,
@@ -595,19 +596,19 @@ export default class SpeckleRenderer {
}
private isSpeckleView(
view: CanonicalView | SpeckleView | InlineView
view: CanonicalView | SpeckleView | InlineView | PolarView
): view is SpeckleView {
return (view as SpeckleView).name !== undefined
}
private isCanonicalView(
view: CanonicalView | SpeckleView | InlineView
view: CanonicalView | SpeckleView | InlineView | PolarView
): view is CanonicalView {
return typeof (view as CanonicalView) === 'string'
}
private isInlineView(
view: CanonicalView | SpeckleView | InlineView
view: CanonicalView | SpeckleView | InlineView | PolarView
): view is InlineView {
return (
(view as InlineView).position !== undefined &&
@@ -615,8 +616,17 @@ export default class SpeckleRenderer {
)
}
private isPolarView(
view: CanonicalView | SpeckleView | InlineView | PolarView
): view is PolarView {
return (
(view as PolarView).azimuth !== undefined &&
(view as PolarView).polar !== undefined
)
}
public setView(
view: CanonicalView | SpeckleView | InlineView,
view: CanonicalView | SpeckleView | InlineView | PolarView,
transition = true
): void {
if (this.isSpeckleView(view)) {
@@ -628,6 +638,9 @@ export default class SpeckleRenderer {
if (this.isInlineView(view)) {
this.setViewInline(view, transition)
}
if (this.isPolarView(view)) {
this.setViewPolar(view, transition)
}
}
private setViewSpeckle(view: SpeckleView, transition = true) {
@@ -727,6 +740,10 @@ export default class SpeckleRenderer {
)
}
private setViewPolar(view: PolarView, transition = true) {
this.viewer.cameraHandler.controls.rotate(view.azimuth, view.polar, transition)
}
/** DEBUG */
public onObjectClickDebug(e) {
const result: Intersection = this.intersections.intersect(
+3 -1
View File
@@ -14,6 +14,7 @@ import {
DefaultViewerParams,
InlineView,
IViewer,
PolarView,
SpeckleView,
SunLightConfiguration,
ViewerEvent,
@@ -310,10 +311,11 @@ export class Viewer extends EventEmitter implements IViewer {
}
public setView(
view: CanonicalView | SpeckleView | InlineView,
view: CanonicalView | SpeckleView | InlineView | PolarView,
transition = true
): void {
this.speckleRenderer.setView(view, transition)
this.needsRender = true
}
public screenshot(): Promise<string> {