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:
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user