diff --git a/src/App.vue b/src/App.vue index 4bdd730..5894071 100644 --- a/src/App.vue +++ b/src/App.vue @@ -26,6 +26,7 @@ let openSidebarsByDefault: Ref = ref(window.innerWidth > 1200); let sceneUrl = ref("") let viewer: Ref | null> = ref(null); let document = shallowRef(new Document()); +let models: Ref | null> = ref(null) async function onModelLoadRequest(model: NetworkUpdateEvent) { await SceneMgr.loadModel(sceneUrl, document, model.name, model.url); @@ -37,6 +38,10 @@ function onModelRemoveRequest(name: string) { document.value = document.value.clone(); // Force update from this component! } +function onFindModel(name: string) { + Models.value.findModel(name); +} + // Set up the load model event listener let networkMgr = new NetworkManager(); networkMgr.addEventListener('update', onModelLoadRequest); @@ -69,7 +74,7 @@ async function loadModelManual() { - + @@ -77,7 +82,7 @@ async function loadModelManual() { - + diff --git a/src/models/Model.vue b/src/models/Model.vue index 626c83d..fc3baee 100644 --- a/src/models/Model.vue +++ b/src/models/Model.vue @@ -25,17 +25,22 @@ const emit = defineEmits<{ remove: [] }>() let modelName = props.meshes[0].getExtras()[extrasNameKey] // + " blah blah blah blah blag blah blah blah" +// Reactive properties +const enabledFeatures = defineModel>("enabledFeatures", {default: [0, 1, 2]}); +const opacity = defineModel("opacity", {default: 1}); +// TODO: Clipping planes (+ stencil!) + +// Count the number of faces, edges and vertices let faceCount = props.meshes.map((m) => m.listPrimitives().filter(p => p.getMode() === WebGL2RenderingContext.TRIANGLES).length).reduce((a, b) => a + b, 0) let edgeCount = props.meshes.map((m) => m.listPrimitives().filter(p => p.getMode() in [WebGL2RenderingContext.LINE_STRIP, WebGL2RenderingContext.LINES]).length).reduce((a, b) => a + b, 0) let vertexCount = props.meshes.map((m) => m.listPrimitives().filter(p => p.getMode() === WebGL2RenderingContext.POINTS).length).reduce((a, b) => a + b, 0) -const enabledFeatures = defineModel>("enabledFeatures", {default: [0, 1, 2]}); -const opacity = defineModel("opacity", {default: 1}); - +// Set initial defaults for the enabled features if (faceCount === 0) enabledFeatures.value = enabledFeatures.value.filter((f) => f !== 0) if (edgeCount === 0) enabledFeatures.value = enabledFeatures.value.filter((f) => f !== 1) if (vertexCount === 0) enabledFeatures.value = enabledFeatures.value.filter((f) => f !== 2) +// Listeners for changes in the properties (or viewer reloads) function onEnabledFeaturesChange(newEnabledFeatures: Array) { //console.log('Enabled features may have changed', newEnabledFeatures) let scene = props.viewer?.scene; @@ -106,7 +111,6 @@ function onModelLoad() { scene.queueRender() // Furthermore... - // Enabled features may have been reset after a reload onEnabledFeaturesChange(enabledFeatures.value) // Opacity may have been reset after a reload @@ -124,7 +128,7 @@ if (props.viewer.elem) {