From 5fde5e980626b90346a2e3b348702155d4356f79 Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Mon, 23 Oct 2023 23:17:26 -0700 Subject: [PATCH 01/17] Added example to toggle between mesh variants --- packages/modelviewer.dev/data/examples.json | 4 + .../examples/scenegraph/index.html | 105 ++++++++++++++++++ packages/shared-assets/models/manifold.glb | Bin 0 -> 307104 bytes 3 files changed, 109 insertions(+) create mode 100644 packages/shared-assets/models/manifold.glb diff --git a/packages/modelviewer.dev/data/examples.json b/packages/modelviewer.dev/data/examples.json index 9edc7c5163..e42682b6b6 100644 --- a/packages/modelviewer.dev/data/examples.json +++ b/packages/modelviewer.dev/data/examples.json @@ -255,6 +255,10 @@ "htmlId": "transformTexturesExample", "name": "Transform Textures" }, + { + "htmlId": "hideShowMeshVariantsExample", + "name": "Hide/Show Mesh Variants" + }, { "htmlId": "animatedTexturesExample", "name": "Animated Textures" diff --git a/packages/modelviewer.dev/examples/scenegraph/index.html b/packages/modelviewer.dev/examples/scenegraph/index.html index 137b9a74a1..4b1adfb606 100644 --- a/packages/modelviewer.dev/examples/scenegraph/index.html +++ b/packages/modelviewer.dev/examples/scenegraph/index.html @@ -560,6 +560,111 @@

Transform textures

+
+
+
+
+
+

Toggle between Mesh Variants

+

If you have a few mesh variants, you can hide and show them by changing textures opacity.

+
+ + + +
+
+
+ + +
diff --git a/packages/shared-assets/models/manifold.glb b/packages/shared-assets/models/manifold.glb new file mode 100644 index 0000000000000000000000000000000000000000..39bc07ec3b7a505428e46d0ff2eb1dae3736c072 GIT binary patch literal 307104 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

Toggle between Mesh Variants

w{p9Mr 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 literal 0 HcmV?d00001 From becbd3fa11a29fae1233b46eea439a0694590dbe Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Mon, 23 Oct 2023 23:23:18 -0700 Subject: [PATCH 02/17] Fixed the alt --- packages/modelviewer.dev/examples/scenegraph/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/modelviewer.dev/examples/scenegraph/index.html b/packages/modelviewer.dev/examples/scenegraph/index.html index 4b1adfb606..b281d81a5e 100644 --- a/packages/modelviewer.dev/examples/scenegraph/index.html +++ b/packages/modelviewer.dev/examples/scenegraph/index.html @@ -570,7 +570,7 @@

From efcb3c1b4a4dba928fde303834d9d2febcf8dd27 Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Thu, 17 Oct 2024 11:48:07 -0700 Subject: [PATCH 07/17] updating format --- packages/model-viewer/src/model-viewer-base.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/model-viewer/src/model-viewer-base.ts b/packages/model-viewer/src/model-viewer-base.ts index bfc4319823..3cbe28b6f4 100644 --- a/packages/model-viewer/src/model-viewer-base.ts +++ b/packages/model-viewer/src/model-viewer-base.ts @@ -18,6 +18,7 @@ import { property } from 'lit/decorators.js'; import { Camera as ThreeCamera, Event as ThreeEvent, Vector2, Vector3, WebGLRenderer } from 'three'; import { HAS_INTERSECTION_OBSERVER, HAS_RESIZE_OBSERVER } from './constants.js'; +import { ExtraModelElement } from './extra-model.js'; import { $updateEnvironment } from './features/environment.js'; import { makeTemplate } from './template.js'; import { $evictionPolicy, CachingGLTFLoader } from './three-components/CachingGLTFLoader.js'; @@ -25,7 +26,6 @@ import { ModelScene } from './three-components/ModelScene.js'; import { ContextLostEvent, Renderer } from './three-components/Renderer.js'; import { clamp, debounce } from './utilities.js'; import { ProgressTracker } from './utilities/progress-tracker.js'; -import { ExtraModelElement } from './extra-model.js'; const CLEAR_MODEL_TIMEOUT_MS = 10; const FALLBACK_SIZE_UPDATE_THRESHOLD_MS = 50; @@ -650,7 +650,7 @@ export default class ModelViewerElementBase extends ReactiveElement { } async addExtraModel(extraModel: ExtraModelElement) { - console.log("Adding a new extra model with src: ", extraModel.src); + console.log('Adding a new extra model with src: ', extraModel.src); // this.extraModels.add(extraModel); } } From dffc2fec0fb3cd5f208d5acd031a1a1e888dac0a Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Thu, 17 Oct 2024 11:51:34 -0700 Subject: [PATCH 08/17] ran ./node_modules/.bin/clang-format -i packages/model-viewer/src/model-viewer-base.ts --- .../model-viewer/src/model-viewer-base.ts | 176 +++++++++--------- 1 file changed, 88 insertions(+), 88 deletions(-) diff --git a/packages/model-viewer/src/model-viewer-base.ts b/packages/model-viewer/src/model-viewer-base.ts index 3cbe28b6f4..45ae946140 100644 --- a/packages/model-viewer/src/model-viewer-base.ts +++ b/packages/model-viewer/src/model-viewer-base.ts @@ -13,19 +13,19 @@ * limitations under the License. */ -import { ReactiveElement } from 'lit'; -import { property } from 'lit/decorators.js'; -import { Camera as ThreeCamera, Event as ThreeEvent, Vector2, Vector3, WebGLRenderer } from 'three'; - -import { HAS_INTERSECTION_OBSERVER, HAS_RESIZE_OBSERVER } from './constants.js'; -import { ExtraModelElement } from './extra-model.js'; -import { $updateEnvironment } from './features/environment.js'; -import { makeTemplate } from './template.js'; -import { $evictionPolicy, CachingGLTFLoader } from './three-components/CachingGLTFLoader.js'; -import { ModelScene } from './three-components/ModelScene.js'; -import { ContextLostEvent, Renderer } from './three-components/Renderer.js'; -import { clamp, debounce } from './utilities.js'; -import { ProgressTracker } from './utilities/progress-tracker.js'; +import {ReactiveElement} from 'lit'; +import {property} from 'lit/decorators.js'; +import {Camera as ThreeCamera, Event as ThreeEvent, Vector2, Vector3, WebGLRenderer} from 'three'; + +import {HAS_INTERSECTION_OBSERVER, HAS_RESIZE_OBSERVER} from './constants.js'; +import {ExtraModelElement} from './extra-model.js'; +import {$updateEnvironment} from './features/environment.js'; +import {makeTemplate} from './template.js'; +import {$evictionPolicy, CachingGLTFLoader} from './three-components/CachingGLTFLoader.js'; +import {ModelScene} from './three-components/ModelScene.js'; +import {ContextLostEvent, Renderer} from './three-components/Renderer.js'; +import {clamp, debounce} from './utilities.js'; +import {ProgressTracker} from './utilities/progress-tracker.js'; const CLEAR_MODEL_TIMEOUT_MS = 10; const FALLBACK_SIZE_UPDATE_THRESHOLD_MS = 50; @@ -156,11 +156,11 @@ export default class ModelViewerElementBase extends ReactiveElement { static set minimumRenderScale(value: number) { if (value > 1) { console.warn( - ' minimumRenderScale has been clamped to a maximum value of 1.'); + ' minimumRenderScale has been clamped to a maximum value of 1.'); } if (value <= 0) { console.warn( - ' minimumRenderScale has been clamped to a minimum value of 0.25.'); + ' minimumRenderScale has been clamped to a minimum value of 0.25.'); } Renderer.singleton.minScale = value; } @@ -170,11 +170,11 @@ export default class ModelViewerElementBase extends ReactiveElement { return Renderer.singleton.minScale; } - @property({ type: String }) alt: string | null = null; + @property({type: String}) alt: string|null = null; - @property({ type: String }) src: string | null = null; + @property({type: String}) src: string|null = null; - @property({ type: Boolean, attribute: 'with-credentials' }) + @property({type: Boolean, attribute: 'with-credentials'}) withCredentials: boolean = false; /** @@ -182,38 +182,38 @@ export default class ModelViewerElementBase extends ReactiveElement { * the loaded src and inserts it into the header of the page for search * engines to crawl. */ - @property({ type: Boolean, attribute: 'generate-schema' }) + @property({type: Boolean, attribute: 'generate-schema'}) generateSchema = false; - protected [$isElementInViewport] = false; - protected [$loaded] = false; - protected [$loadedTime] = 0; - protected [$scene]: ModelScene; - protected [$container]: HTMLDivElement; - protected [$userInputElement]: HTMLDivElement; - protected [$canvas]: HTMLCanvasElement; - protected [$statusElement]: HTMLSpanElement; - protected [$status] = ''; - protected [$defaultAriaLabel]: string; - protected [$clearModelTimeout]: number | null = null; - - protected [$fallbackResizeHandler] = debounce(() => { + protected[$isElementInViewport] = false; + protected[$loaded] = false; + protected[$loadedTime] = 0; + protected[$scene]: ModelScene; + protected[$container]: HTMLDivElement; + protected[$userInputElement]: HTMLDivElement; + protected[$canvas]: HTMLCanvasElement; + protected[$statusElement]: HTMLSpanElement; + protected[$status] = ''; + protected[$defaultAriaLabel]: string; + protected[$clearModelTimeout]: number|null = null; + + protected[$fallbackResizeHandler] = debounce(() => { const boundingRect = this.getBoundingClientRect(); this[$updateSize](boundingRect); }, FALLBACK_SIZE_UPDATE_THRESHOLD_MS); - protected [$announceModelVisibility] = debounce((oldVisibility: boolean) => { + protected[$announceModelVisibility] = debounce((oldVisibility: boolean) => { const newVisibility = this.modelIsVisible; if (newVisibility !== oldVisibility) { this.dispatchEvent(new CustomEvent( - 'model-visibility', { detail: { visible: newVisibility } })); + 'model-visibility', {detail: {visible: newVisibility}})); } }, ANNOUNCE_MODEL_VISIBILITY_DEBOUNCE_THRESHOLD); - protected [$resizeObserver]: ResizeObserver | null = null; - protected [$intersectionObserver]: IntersectionObserver | null = null; + protected[$resizeObserver]: ResizeObserver|null = null; + protected[$intersectionObserver]: IntersectionObserver|null = null; - protected [$progressTracker]: ProgressTracker = new ProgressTracker(); + protected[$progressTracker]: ProgressTracker = new ProgressTracker(); // private extraModels: ExtraModelElement[] = []; @@ -222,7 +222,7 @@ export default class ModelViewerElementBase extends ReactiveElement { return this[$getLoaded](); } - get [$renderer]() { + get[$renderer]() { return Renderer.singleton; } @@ -237,7 +237,7 @@ export default class ModelViewerElementBase extends ReactiveElement { constructor() { super(); - this.attachShadow({ mode: 'open' }); + this.attachShadow({mode: 'open'}); const shadowRoot = this.shadowRoot!; @@ -245,12 +245,12 @@ export default class ModelViewerElementBase extends ReactiveElement { this[$container] = shadowRoot.querySelector('.container') as HTMLDivElement; this[$userInputElement] = - shadowRoot.querySelector('.userInput') as HTMLDivElement; + shadowRoot.querySelector('.userInput') as HTMLDivElement; this[$canvas] = shadowRoot.querySelector('canvas') as HTMLCanvasElement; this[$statusElement] = - shadowRoot.querySelector('#status') as HTMLSpanElement; + shadowRoot.querySelector('#status') as HTMLSpanElement; this[$defaultAriaLabel] = - this[$userInputElement].getAttribute('aria-label')!; + this[$userInputElement].getAttribute('aria-label')!; // Because of potential race conditions related to invoking the constructor // we only use the bounding rect to set the initial size if the element is @@ -267,7 +267,7 @@ export default class ModelViewerElementBase extends ReactiveElement { // Create the underlying ModelScene. this[$scene] = - new ModelScene({ canvas: this[$canvas], element: this, width, height }); + new ModelScene({canvas: this[$canvas], element: this, width, height}); // Update initial size on microtask timing so that subclasses have a // chance to initialize @@ -279,20 +279,20 @@ export default class ModelViewerElementBase extends ReactiveElement { // Set up a resize observer so we can scale our canvas // if our changes this[$resizeObserver] = - new ResizeObserver((entries: Array) => { - // Don't resize anything if in AR mode; otherwise the canvas - // scaling to fullscreen on entering AR will clobber the flat/2d - // dimensions of the element. - if (this[$renderer].isPresenting) { - return; - } + new ResizeObserver((entries: Array) => { + // Don't resize anything if in AR mode; otherwise the canvas + // scaling to fullscreen on entering AR will clobber the flat/2d + // dimensions of the element. + if (this[$renderer].isPresenting) { + return; + } - for (let entry of entries) { - if (entry.target === this) { - this[$updateSize](entry.contentRect); + for (let entry of entries) { + if (entry.target === this) { + this[$updateSize](entry.contentRect); + } } - } - }); + }); } if (HAS_INTERSECTION_OBSERVER) { @@ -344,7 +344,7 @@ export default class ModelViewerElementBase extends ReactiveElement { const renderer = this[$renderer]; renderer.addEventListener( - 'contextlost', this[$onContextLost] as (event: ThreeEvent) => void); + 'contextlost', this[$onContextLost] as (event: ThreeEvent) => void); renderer.registerScene(this[$scene]); @@ -374,7 +374,7 @@ export default class ModelViewerElementBase extends ReactiveElement { const renderer = this[$renderer]; renderer.removeEventListener( - 'contextlost', this[$onContextLost] as (event: ThreeEvent) => void); + 'contextlost', this[$onContextLost] as (event: ThreeEvent) => void); renderer.unregisterScene(this[$scene]); @@ -384,7 +384,7 @@ export default class ModelViewerElementBase extends ReactiveElement { }, CLEAR_MODEL_TIMEOUT_MS); } - updated(changedProperties: Map) { + updated(changedProperties: Map) { super.updated(changedProperties); // NOTE(cdata): If a property changes from values A -> B -> A in the space @@ -419,8 +419,8 @@ export default class ModelViewerElementBase extends ReactiveElement { /** @export */ toDataURL(type?: string, encoderOptions?: number): string { return this[$renderer] - .displayCanvas(this[$scene]) - .toDataURL(type, encoderOptions); + .displayCanvas(this[$scene]) + .toDataURL(type, encoderOptions); } /** @export */ @@ -429,8 +429,8 @@ export default class ModelViewerElementBase extends ReactiveElement { const qualityArgument = options ? options.qualityArgument : undefined; const useIdealAspect = options ? options.idealAspect : undefined; - const { width, height, idealAspect, aspect } = this[$scene]; - const { dpr, scaleFactor } = this[$renderer]; + const {width, height, idealAspect, aspect} = this[$scene]; + const {dpr, scaleFactor} = this[$renderer]; let outputWidth = width * scaleFactor * dpr; let outputHeight = height * scaleFactor * dpr; let offsetX = 0; @@ -451,15 +451,15 @@ export default class ModelViewerElementBase extends ReactiveElement { try { return new Promise(async (resolve, reject) => { blobCanvas.getContext('2d')!.drawImage( - this[$renderer].displayCanvas(this[$scene]), - offsetX, - offsetY, - outputWidth, - outputHeight, - 0, - 0, - outputWidth, - outputHeight); + this[$renderer].displayCanvas(this[$scene]), + offsetX, + offsetY, + outputWidth, + outputHeight, + 0, + 0, + outputWidth, + outputHeight); blobCanvas.toBlob((blob) => { if (!blob) { @@ -470,7 +470,7 @@ export default class ModelViewerElementBase extends ReactiveElement { }, mimeType, qualityArgument); }); } finally { - this[$updateSize]({ width, height }); + this[$updateSize]({width, height}); }; } @@ -503,13 +503,13 @@ export default class ModelViewerElementBase extends ReactiveElement { this[$scene].externalRenderer = null; } - get [$ariaLabel]() { + get[$ariaLabel]() { return this[$altDefaulted]; } - get [$altDefaulted]() { + get[$altDefaulted]() { return (this.alt == null || this.alt === 'null') ? this[$defaultAriaLabel] : - this.alt; + this.alt; } // NOTE(cdata): Although this may seem extremely redundant, it is required in @@ -532,14 +532,14 @@ export default class ModelViewerElementBase extends ReactiveElement { /** * Called on initialization and when the resize observer fires. */ - [$updateSize]({ width, height }: { width: number, height: number }) { + [$updateSize]({width, height}: {width: number, height: number}) { if (width === 0 || height === 0) { return; } this[$container].style.width = `${width}px`; this[$container].style.height = `${height}px`; - this[$onResize]({ width, height }); + this[$onResize]({width, height}); } [$tick](time: number, delta: number) { @@ -567,7 +567,7 @@ export default class ModelViewerElementBase extends ReactiveElement { const rootNode = this.getRootNode() as Document | ShadowRoot | null; // Only change the aria-label if is currently focused: if (rootNode != null && rootNode.activeElement === this && - this[$statusElement].textContent != status) { + this[$statusElement].textContent != status) { this[$statusElement].textContent = status; } } @@ -580,14 +580,14 @@ export default class ModelViewerElementBase extends ReactiveElement { this[$statusElement].textContent = ''; }; - [$onResize](e: { width: number, height: number }) { + [$onResize](e: {width: number, height: number}) { this[$scene].setSize(e.width, e.height); } [$onContextLost] = (event: ContextLostEvent) => { this.dispatchEvent(new CustomEvent( - 'error', - { detail: { type: 'webglcontextlost', sourceError: event.sourceEvent } })); + 'error', + {detail: {type: 'webglcontextlost', sourceError: event.sourceEvent}})); }; /** @@ -597,7 +597,7 @@ export default class ModelViewerElementBase extends ReactiveElement { async[$updateSource]() { const scene = this[$scene]; if (this.loaded || !this[$shouldAttemptPreload]() || - this.src === scene.url) { + this.src === scene.url) { return; } @@ -612,13 +612,13 @@ export default class ModelViewerElementBase extends ReactiveElement { scene.stopAnimation(); const updateSourceProgress = - this[$progressTracker].beginActivity('model-load'); + this[$progressTracker].beginActivity('model-load'); const source = this.src; try { const srcUpdated = scene.setSource( - source, - (progress: number) => - updateSourceProgress(clamp(progress, 0, 1) * 0.95)); + source, + (progress: number) => + updateSourceProgress(clamp(progress, 0, 1) * 0.95)); const envUpdated = (this as any)[$updateEnvironment](); @@ -636,14 +636,14 @@ export default class ModelViewerElementBase extends ReactiveElement { requestAnimationFrame(() => { requestAnimationFrame(() => { this.dispatchEvent( - new CustomEvent('load', { detail: { url: source } })); + new CustomEvent('load', {detail: {url: source}})); resolve(); }); }); }); } catch (error) { this.dispatchEvent(new CustomEvent( - 'error', { detail: { type: 'loadfailure', sourceError: error } })); + 'error', {detail: {type: 'loadfailure', sourceError: error}})); } finally { updateSourceProgress(1.0); } From 2ae714d595c6be8028539b1dcee0de88412a1d79 Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Thu, 17 Oct 2024 11:52:32 -0700 Subject: [PATCH 09/17] ran ./node_modules/.bin/clang-format -i packages/model-viewer/src/extra-model.ts --- packages/model-viewer/src/extra-model.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/model-viewer/src/extra-model.ts b/packages/model-viewer/src/extra-model.ts index 36dcff7ea1..139aab4df3 100644 --- a/packages/model-viewer/src/extra-model.ts +++ b/packages/model-viewer/src/extra-model.ts @@ -13,8 +13,9 @@ * limitations under the License. */ -import { ReactiveElement, html } from 'lit'; -import { customElement, property } from 'lit/decorators.js'; +import {html, ReactiveElement} from 'lit'; +import {customElement, property} from 'lit/decorators.js'; + import ModelViewerElementBase from './model-viewer-base.js'; /** @@ -22,7 +23,7 @@ import ModelViewerElementBase from './model-viewer-base.js'; */ @customElement('extra-model') export class ExtraModelElement extends ReactiveElement { - @property({ type: String }) src: string | null = null; + @property({type: String}) src: string|null = null; render() { return html` `; @@ -45,4 +46,3 @@ declare global { 'extra-model': ExtraModelElement; } } - From c1a2dc6e46ce6d744a64c6f7779df94036e85e97 Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Thu, 17 Oct 2024 14:19:45 -0700 Subject: [PATCH 10/17] first working verison --- packages/model-viewer/src/constants.ts | 37 +++++++++++++---------- packages/model-viewer/src/extra-model.ts | 15 ++++----- packages/model-viewer/src/model-viewer.ts | 7 +++-- packages/modelviewer.dev/index.html | 2 +- 4 files changed, 33 insertions(+), 28 deletions(-) diff --git a/packages/model-viewer/src/constants.ts b/packages/model-viewer/src/constants.ts index bcec587a51..aeb57e1ad3 100644 --- a/packages/model-viewer/src/constants.ts +++ b/packages/model-viewer/src/constants.ts @@ -73,26 +73,31 @@ export const IS_SCENEVIEWER_CANDIDATE = IS_ANDROID && !IS_FIREFOX && !IS_OCULUS; // Extend Window type with webkit property, // required to check if iOS is running within a WKWebView browser instance. declare global { - interface Window { - webkit?: any; - } + interface Window { + webkit?: any; + } } -export const IS_WKWEBVIEW = Boolean(window.webkit && window.webkit.messageHandlers); +export const IS_WKWEBVIEW = + Boolean(window.webkit && window.webkit.messageHandlers); -// If running in iOS Safari proper, and not within a WKWebView component instance, check for ARQL feature support. -// Otherwise, if running in a WKWebView instance, check for known ARQL compatible iOS browsers, including: -// Chrome (CriOS), Edge (EdgiOS), Firefox (FxiOS), Google App (GSA), DuckDuckGo (DuckDuckGo). -// All other iOS browsers / apps will fail by default. +// If running in iOS Safari proper, and not within a WKWebView component +// instance, check for ARQL feature support. Otherwise, if running in a +// WKWebView instance, check for known ARQL compatible iOS browsers, including: +// Chrome (CriOS), Edge (EdgiOS), Firefox (FxiOS), Google App (GSA), DuckDuckGo +// (DuckDuckGo). All other iOS browsers / apps will fail by default. export const IS_AR_QUICKLOOK_CANDIDATE = (() => { - if(IS_IOS){ - if(!IS_WKWEBVIEW){ - const tempAnchor = document.createElement('a'); - return Boolean(tempAnchor.relList && tempAnchor.relList.supports && tempAnchor.relList.supports('ar')); - } else { - return Boolean(/CriOS\/|EdgiOS\/|FxiOS\/|GSA\/|DuckDuckGo\//.test(navigator.userAgent)); - } + if (IS_IOS) { + if (!IS_WKWEBVIEW) { + const tempAnchor = document.createElement('a'); + return Boolean( + tempAnchor.relList && tempAnchor.relList.supports && + tempAnchor.relList.supports('ar')); } else { - return false; + return Boolean(/CriOS\/|EdgiOS\/|FxiOS\/|GSA\/|DuckDuckGo\//.test( + navigator.userAgent)); } + } else { + return false; + } })(); diff --git a/packages/model-viewer/src/extra-model.ts b/packages/model-viewer/src/extra-model.ts index 139aab4df3..23a5bb3f7d 100644 --- a/packages/model-viewer/src/extra-model.ts +++ b/packages/model-viewer/src/extra-model.ts @@ -14,14 +14,17 @@ */ import {html, ReactiveElement} from 'lit'; -import {customElement, property} from 'lit/decorators.js'; +import {property} from 'lit/decorators.js'; + +// customElement, import ModelViewerElementBase from './model-viewer-base.js'; + /** * Definition for a basic element. */ -@customElement('extra-model') +// @customElement('extra-model') export class ExtraModelElement extends ReactiveElement { @property({type: String}) src: string|null = null; @@ -29,7 +32,7 @@ export class ExtraModelElement extends ReactiveElement { return html` `; } - firstUpdated() { + connectedCallback() { // Get the parent element const modelViewer = this.closest('model-viewer') as ModelViewerElementBase; if (modelViewer) { @@ -40,9 +43,3 @@ export class ExtraModelElement extends ReactiveElement { } } } - -declare global { - interface HTMLElementTagNameMap { - 'extra-model': ExtraModelElement; - } -} diff --git a/packages/model-viewer/src/model-viewer.ts b/packages/model-viewer/src/model-viewer.ts index c2a353a617..a662af1c6e 100644 --- a/packages/model-viewer/src/model-viewer.ts +++ b/packages/model-viewer/src/model-viewer.ts @@ -13,6 +13,7 @@ * limitations under the License. */ +import {ExtraModelElement} from './extra-model.js'; import {AnimationMixin} from './features/animation.js'; import {AnnotationMixin} from './features/annotation.js'; import {ARMixin} from './features/ar.js'; @@ -28,7 +29,7 @@ import ModelViewerElementBase from './model-viewer-base.js'; export {CanvasTexture, FileLoader, Loader, NearestFilter} from 'three'; export const ModelViewerElement = -AnnotationMixin(SceneGraphMixin(StagingMixin(EnvironmentMixin(ControlsMixin( + AnnotationMixin(SceneGraphMixin(StagingMixin(EnvironmentMixin(ControlsMixin( ARMixin(LoadingMixin(AnimationMixin(ModelViewerElementBase)))))))); export type ModelViewerElement = InstanceType; @@ -36,9 +37,11 @@ export type ModelViewerElement = InstanceType; export type{RGB, RGBA} from './three-components/gltf-instance/gltf-2.0'; customElements.define('model-viewer', ModelViewerElement); +customElements.define('extra-model', ExtraModelElement); declare global { interface HTMLElementTagNameMap { 'model-viewer': ModelViewerElement; + 'extra-model': ExtraModelElement; } -} +} \ No newline at end of file diff --git a/packages/modelviewer.dev/index.html b/packages/modelviewer.dev/index.html index 699effaecd..913fb57181 100644 --- a/packages/modelviewer.dev/index.html +++ b/packages/modelviewer.dev/index.html @@ -70,7 +70,7 @@

Quick Start

- + From 258d097be6d593a9bd52aec40a11e4018c6a779b Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Thu, 24 Oct 2024 13:51:53 -0700 Subject: [PATCH 11/17] add properties and attributes --- packages/model-viewer/src/extra-model.ts | 18 +++++++++++++++++- packages/modelviewer.dev/index.html | 9 ++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/model-viewer/src/extra-model.ts b/packages/model-viewer/src/extra-model.ts index 23a5bb3f7d..6533c88c4e 100644 --- a/packages/model-viewer/src/extra-model.ts +++ b/packages/model-viewer/src/extra-model.ts @@ -16,6 +16,9 @@ import {html, ReactiveElement} from 'lit'; import {property} from 'lit/decorators.js'; +import {Model} from './features/scene-graph/model.js'; +// import { toVector3D, Vector3D } from './model-viewer-base.js'; + // customElement, import ModelViewerElementBase from './model-viewer-base.js'; @@ -27,13 +30,26 @@ import ModelViewerElementBase from './model-viewer-base.js'; // @customElement('extra-model') export class ExtraModelElement extends ReactiveElement { @property({type: String}) src: string|null = null; + @property({type: Boolean}) loaded: boolean|null = null; + @property({type: Model}) model: Object|null = null; + @property({type: Object}) availableVariants: string[]|null = null; + + /* + getDimensions(): Vector3D { + return toVector3D(this.orientation); + }*/ render() { + console.log('extra model render') return html` `; } - + constructor() { + super(); + console.log('extra model constructor') + } connectedCallback() { // Get the parent element + console.log('extra model connected callback') const modelViewer = this.closest('model-viewer') as ModelViewerElementBase; if (modelViewer) { // Add this extra model to the scene diff --git a/packages/modelviewer.dev/index.html b/packages/modelviewer.dev/index.html index 913fb57181..d4f0bc02a2 100644 --- a/packages/modelviewer.dev/index.html +++ b/packages/modelviewer.dev/index.html @@ -70,7 +70,14 @@

Quick Start

- + From 86fde43db96a5d5ca52e6a1ecd3c6138522959df Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Mon, 4 Nov 2024 12:10:27 -0800 Subject: [PATCH 12/17] updated method works now --- packages/model-viewer/src/extra-model.ts | 38 +++++++++++++----------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/packages/model-viewer/src/extra-model.ts b/packages/model-viewer/src/extra-model.ts index 6533c88c4e..63928ce101 100644 --- a/packages/model-viewer/src/extra-model.ts +++ b/packages/model-viewer/src/extra-model.ts @@ -13,31 +13,20 @@ * limitations under the License. */ -import {html, ReactiveElement} from 'lit'; -import {property} from 'lit/decorators.js'; - -import {Model} from './features/scene-graph/model.js'; -// import { toVector3D, Vector3D } from './model-viewer-base.js'; - -// customElement, - +import { html, ReactiveElement } from 'lit'; +import { property } from 'lit/decorators.js'; +import { Model } from './features/scene-graph/model.js'; import ModelViewerElementBase from './model-viewer-base.js'; - /** * Definition for a basic element. */ // @customElement('extra-model') export class ExtraModelElement extends ReactiveElement { - @property({type: String}) src: string|null = null; - @property({type: Boolean}) loaded: boolean|null = null; - @property({type: Model}) model: Object|null = null; - @property({type: Object}) availableVariants: string[]|null = null; - - /* - getDimensions(): Vector3D { - return toVector3D(this.orientation); - }*/ + @property({ type: String }) src: string | null = null; + @property({ type: Boolean }) loaded: boolean | null = null; + @property({ type: Model }) model: Object | null = null; + @property({ type: Array }) availableVariants: string[] | null = null; render() { console.log('extra model render') @@ -47,7 +36,20 @@ export class ExtraModelElement extends ReactiveElement { super(); console.log('extra model constructor') } + + updated(changedProperties: Map) { + super.updated(changedProperties); + console.log("updated is called"); + if (changedProperties.has('src')) { + console.log("src has changed"); + } + if (changedProperties.has('availableVariants')) { + console.log("availableVariants has changed"); + } + } + connectedCallback() { + super.connectedCallback(); // Get the parent element console.log('extra model connected callback') const modelViewer = this.closest('model-viewer') as ModelViewerElementBase; From 341447243e5b7a8a23a1ff2e0675b83ef07dfdb0 Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Mon, 11 Nov 2024 17:21:22 -0800 Subject: [PATCH 13/17] placeholder for unit tests --- .../model-viewer/src/test/extra-model-spec.ts | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 packages/model-viewer/src/test/extra-model-spec.ts diff --git a/packages/model-viewer/src/test/extra-model-spec.ts b/packages/model-viewer/src/test/extra-model-spec.ts new file mode 100644 index 0000000000..d92c890c68 --- /dev/null +++ b/packages/model-viewer/src/test/extra-model-spec.ts @@ -0,0 +1,97 @@ +/* @license + * Copyright 2024 Google LLC. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import {expect} from '@esm-bundle/chai'; + +import {ExtraModelElement} from '../extra-model.js'; +import {ModelViewerElement} from '../model-viewer.js'; +import {timePasses, waitForEvent} from '../utilities.js'; + +import {assetPath} from './helpers.js'; + +suite('ExtraModelElement', () => { + let extraElement: ExtraModelElement; + let modelViewer: ModelViewerElement; + + setup(() => { + modelViewer = new ModelViewerElement(); + extraElement = new ExtraModelElement(); + document.body.insertBefore(modelViewer, document.body.firstChild); + modelViewer.appendChild(extraElement); + }); + + teardown(() => { + if (modelViewer.parentNode != null) { + modelViewer.removeChild(extraElement); + modelViewer.parentNode.removeChild(modelViewer); + } + }); + + suite('with src property', () => { + test.skip('dispatches a load event when src is set', async () => { + const sourceLoads = waitForEvent(extraElement, 'load'); + extraElement.src = assetPath('models/Astronaut.glb'); + await sourceLoads; + expect(extraElement.loaded).to.be.true; + }); + + test.skip('dispatches an error event when src is invalid', async () => { + const sourceErrors = waitForEvent(extraElement, 'error'); + extraElement.src = './does-not-exist.glb'; + await sourceErrors; + expect(extraElement.loaded).to.be.false; + }); + }); + + suite('with availableVariants property', () => { + test.skip('updates when availableVariants is changed', async () => { + const variants = ['variant1', 'variant2']; + extraElement.availableVariants = variants; + await timePasses(); + expect(extraElement.availableVariants).to.deep.equal(variants); + }); + }); + + suite('connectedCallback', () => { + test.skip('adds itself to the parent model-viewer', () => { + // Since it's done in connectedCallback, it should already be added + expect(modelViewer).to.include(extraElement); + }); + }); + + suite( + 'updated', + () => { + /* test('reacts to src property changes', async () => { + const spy = sinon.spy(console, 'log'); + extraElement.src = assetPath('models/Astronaut.glb'); + await timePasses(); + expect(spy.calledWith('updated is called')).to.be.true; + expect(spy.calledWith('src has changed')).to.be.true; + spy.restore(); + }); + + test('reacts to availableVariants property changes', async () + => { const spy = sinon.spy(console, 'log'); + extraElement.availableVariants = ['variant1', 'variant2']; + await timePasses(); + expect(spy.calledWith('updated is called')).to.be.true; + expect(spy.calledWith('availableVariants has + changed')).to.be.true; spy.restore(); + });*/ + }); + + // ... Add more tests for other functionalities ... +}); \ No newline at end of file From aabe22a6f15e0ba1c87a5766c02b94b4f45e1343 Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Tue, 12 Nov 2024 12:35:15 -0800 Subject: [PATCH 14/17] git reset --hard origin/master --- packages/model-viewer/src/extra-model.ts | 24 ++++++++++--------- .../model-viewer/src/test/extra-model-spec.ts | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/model-viewer/src/extra-model.ts b/packages/model-viewer/src/extra-model.ts index 63928ce101..55ec2c810d 100644 --- a/packages/model-viewer/src/extra-model.ts +++ b/packages/model-viewer/src/extra-model.ts @@ -13,20 +13,22 @@ * limitations under the License. */ -import { html, ReactiveElement } from 'lit'; -import { property } from 'lit/decorators.js'; -import { Model } from './features/scene-graph/model.js'; +import {html, ReactiveElement} from 'lit'; +import {property} from 'lit/decorators.js'; + +import {Model} from './features/scene-graph/model.js'; import ModelViewerElementBase from './model-viewer-base.js'; + /** * Definition for a basic element. */ // @customElement('extra-model') export class ExtraModelElement extends ReactiveElement { - @property({ type: String }) src: string | null = null; - @property({ type: Boolean }) loaded: boolean | null = null; - @property({ type: Model }) model: Object | null = null; - @property({ type: Array }) availableVariants: string[] | null = null; + @property({type: String}) src: string|null = null; + @property({type: Boolean}) loaded: boolean|null = null; + @property({type: Model}) model: Object|null = null; + @property({type: Array}) availableVariants: string[]|null = null; render() { console.log('extra model render') @@ -37,14 +39,14 @@ export class ExtraModelElement extends ReactiveElement { console.log('extra model constructor') } - updated(changedProperties: Map) { + updated(changedProperties: Map) { super.updated(changedProperties); - console.log("updated is called"); + console.log('updated is called'); if (changedProperties.has('src')) { - console.log("src has changed"); + console.log('src has changed'); } if (changedProperties.has('availableVariants')) { - console.log("availableVariants has changed"); + console.log('availableVariants has changed'); } } diff --git a/packages/model-viewer/src/test/extra-model-spec.ts b/packages/model-viewer/src/test/extra-model-spec.ts index d92c890c68..f3c0b62228 100644 --- a/packages/model-viewer/src/test/extra-model-spec.ts +++ b/packages/model-viewer/src/test/extra-model-spec.ts @@ -13,7 +13,7 @@ * limitations under the License. */ -import {expect} from '@esm-bundle/chai'; +import {expect} from 'chai'; import {ExtraModelElement} from '../extra-model.js'; import {ModelViewerElement} from '../model-viewer.js'; From 40e6ecb440fabbe578ec8585ab077606a7065199 Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Tue, 12 Nov 2024 16:23:52 -0800 Subject: [PATCH 15/17] fix @esm-bundle issue --- packages/model-viewer/src/test/extra-model-spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/model-viewer/src/test/extra-model-spec.ts b/packages/model-viewer/src/test/extra-model-spec.ts index d92c890c68..f3c0b62228 100644 --- a/packages/model-viewer/src/test/extra-model-spec.ts +++ b/packages/model-viewer/src/test/extra-model-spec.ts @@ -13,7 +13,7 @@ * limitations under the License. */ -import {expect} from '@esm-bundle/chai'; +import {expect} from 'chai'; import {ExtraModelElement} from '../extra-model.js'; import {ModelViewerElement} from '../model-viewer.js'; From ac18d306fa1ec3efe9ed6a1896a880bc11d17a7f Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Wed, 13 Nov 2024 11:47:12 -0800 Subject: [PATCH 16/17] updated unit tests --- packages/model-viewer/src/extra-model.ts | 2 ++ packages/model-viewer/src/test/extra-model-spec.ts | 13 +++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/model-viewer/src/extra-model.ts b/packages/model-viewer/src/extra-model.ts index 55ec2c810d..41f276ac05 100644 --- a/packages/model-viewer/src/extra-model.ts +++ b/packages/model-viewer/src/extra-model.ts @@ -36,6 +36,7 @@ export class ExtraModelElement extends ReactiveElement { } constructor() { super(); + this.loaded = false; console.log('extra model constructor') } @@ -43,6 +44,7 @@ export class ExtraModelElement extends ReactiveElement { super.updated(changedProperties); console.log('updated is called'); if (changedProperties.has('src')) { + this.loaded = false; console.log('src has changed'); } if (changedProperties.has('availableVariants')) { diff --git a/packages/model-viewer/src/test/extra-model-spec.ts b/packages/model-viewer/src/test/extra-model-spec.ts index f3c0b62228..8174de0cc1 100644 --- a/packages/model-viewer/src/test/extra-model-spec.ts +++ b/packages/model-viewer/src/test/extra-model-spec.ts @@ -40,6 +40,10 @@ suite('ExtraModelElement', () => { }); suite('with src property', () => { + test('set loaded to false at first when src is set', async () => { + extraElement.src = assetPath('models/Astronaut.glb'); + expect(extraElement.loaded).to.be.false; + }); test.skip('dispatches a load event when src is set', async () => { const sourceLoads = waitForEvent(extraElement, 'load'); extraElement.src = assetPath('models/Astronaut.glb'); @@ -56,7 +60,7 @@ suite('ExtraModelElement', () => { }); suite('with availableVariants property', () => { - test.skip('updates when availableVariants is changed', async () => { + test('updates when availableVariants is changed', async () => { const variants = ['variant1', 'variant2']; extraElement.availableVariants = variants; await timePasses(); @@ -65,9 +69,10 @@ suite('ExtraModelElement', () => { }); suite('connectedCallback', () => { - test.skip('adds itself to the parent model-viewer', () => { - // Since it's done in connectedCallback, it should already be added - expect(modelViewer).to.include(extraElement); + test('adds itself to the parent model-viewer', () => { + const modelViewer = document.querySelector('model-viewer') as HTMLElement; + const firstExtraModel = modelViewer.querySelector('extra-model'); + expect(firstExtraModel).to.include(extraElement); }); }); From f91f3c25437352687a305a0f99426ad6178afb32 Mon Sep 17 00:00:00 2001 From: samaneh-kazemi Date: Wed, 13 Nov 2024 15:23:59 -0800 Subject: [PATCH 17/17] updated unit tests to make sure updated is called --- packages/model-viewer/src/extra-model.ts | 2 +- packages/model-viewer/src/test/extra-model-spec.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/model-viewer/src/extra-model.ts b/packages/model-viewer/src/extra-model.ts index 41f276ac05..a976bc6028 100644 --- a/packages/model-viewer/src/extra-model.ts +++ b/packages/model-viewer/src/extra-model.ts @@ -44,7 +44,7 @@ export class ExtraModelElement extends ReactiveElement { super.updated(changedProperties); console.log('updated is called'); if (changedProperties.has('src')) { - this.loaded = false; + this.loaded = true; console.log('src has changed'); } if (changedProperties.has('availableVariants')) { diff --git a/packages/model-viewer/src/test/extra-model-spec.ts b/packages/model-viewer/src/test/extra-model-spec.ts index 8174de0cc1..010aa1bbec 100644 --- a/packages/model-viewer/src/test/extra-model-spec.ts +++ b/packages/model-viewer/src/test/extra-model-spec.ts @@ -40,9 +40,10 @@ suite('ExtraModelElement', () => { }); suite('with src property', () => { - test('set loaded to false at first when src is set', async () => { + test('set loaded to true at first when src is set', async () => { extraElement.src = assetPath('models/Astronaut.glb'); - expect(extraElement.loaded).to.be.false; + await extraElement.updateComplete; + expect(extraElement.loaded).to.be.true; }); test.skip('dispatches a load event when src is set', async () => { const sourceLoads = waitForEvent(extraElement, 'load');