diff --git a/src/App.vue b/src/App.vue
index 237d686..641ee72 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,6 +1,6 @@
-
-
-
+
diff --git a/src/tools/Selection.vue b/src/tools/Selection.vue
index e151168..56b486a 100644
--- a/src/tools/Selection.vue
+++ b/src/tools/Selection.vue
@@ -21,7 +21,7 @@ export type MObject3D = Object3D & {
let props = defineProps<{ viewer: typeof ModelViewerWrapperT | null }>();
let emit = defineEmits<{ findModel: [string] }>();
-let {setDisableTap} = inject<{setDisableTap: (boolean) => void}>('disableTap');
+let {setDisableTap} = inject<{ setDisableTap: (boolean) => void }>('disableTap');
let selectionEnabled = ref(false);
let selected = defineModel>>({default: []});
let highlightNextSelection = ref([false, false]); // Second is whether selection was enabled before
@@ -180,11 +180,11 @@ function toggleHighlightNextSelection() {
function toggleShowBoundingBox() {
showBoundingBox.value = !showBoundingBox.value;
- if (!firstLoad /*bug?*/) updateBoundingBox();
}
let viewerFound = false
let firstLoad = true;
+let hasListeners = false;
let cameraChangeWaiting = false;
let cameraChangeLast = 0
let onCameraChange = () => {
@@ -206,29 +206,38 @@ let onCameraChange = () => {
setTimeout(waitingHandler, 100); // Wait for the camera to stop moving
};
watch(() => props.viewer, (viewer) => {
+ console.log('Viewer changed', viewer)
if (!viewer) return;
- if (viewerFound) return;
- viewerFound = true;
- let hasListeners = false;
// props.viewer.elem may not yet be available, so we need to wait for it
viewer.onElemReady((elem) => {
+ if (viewerFound) return;
+ viewerFound = true;
if (hasListeners) return;
hasListeners = true;
elem.addEventListener('mouseup', selectionListener);
elem.addEventListener('mousedown', selectionMoveListener); // Avoid clicking when dragging
elem.addEventListener('load', () => {
+ console.log('Model loaded')
if (firstLoad) {
toggleShowBoundingBox();
firstLoad = false;
- } else {
- updateBoundingBox();
}
+ updateBoundingBox();
});
+ console.log(elem)
+ if (elem.loaded) {
+ console.log('Model already loaded')
+ if (firstLoad) {
+ toggleShowBoundingBox();
+ firstLoad = false;
+ }
+ updateBoundingBox();
+ }
elem.addEventListener('camera-change', onCameraChange);
});
});
-let document: ShallowRef = inject('document');
+let {sceneDocument}: { sceneDocument: ShallowRef } = inject('sceneDocument');
let boundingBoxLines: { [points: string]: number } = {}
@@ -250,7 +259,7 @@ function updateBoundingBox() {
}
bb.applyMatrix4(new Matrix4().makeTranslation(props.viewer?.scene.getTarget()));
} else {
- bb = SceneMgr.getBoundingBox(document);
+ bb = SceneMgr.getBoundingBox(sceneDocument.value);
}
// Define each edge of the bounding box, to draw a line for each axis
let corners = [
@@ -361,33 +370,31 @@ function updateDistances() {
return;
}
-defineExpose({onCameraChange})
-
// Add keyboard shortcuts
window.addEventListener('keydown', (event) => {
if (event.key === 's') {
- if(selectFilter.value == 'Any (S)') toggleSelection();
+ if (selectFilter.value == 'Any (S)') toggleSelection();
else {
selectFilter.value = 'Any (S)';
- if(!selectionEnabled.value) toggleSelection();
+ if (!selectionEnabled.value) toggleSelection();
}
} else if (event.key === 'f') {
- if(selectFilter.value == '(F)aces') toggleSelection();
+ if (selectFilter.value == '(F)aces') toggleSelection();
else {
selectFilter.value = '(F)aces';
- if(!selectionEnabled.value) toggleSelection();
+ if (!selectionEnabled.value) toggleSelection();
}
} else if (event.key === 'e') {
- if(selectFilter.value == '(E)dges') toggleSelection();
+ if (selectFilter.value == '(E)dges') toggleSelection();
else {
selectFilter.value = '(E)dges';
- if(!selectionEnabled.value) toggleSelection();
+ if (!selectionEnabled.value) toggleSelection();
}
} else if (event.key === 'v') {
- if(selectFilter.value == '(V)ertices') toggleSelection();
+ if (selectFilter.value == '(V)ertices') toggleSelection();
else {
selectFilter.value = '(V)ertices';
- if(!selectionEnabled.value) toggleSelection();
+ if (!selectionEnabled.value) toggleSelection();
}
} else if (event.key === 'b') {
toggleShowBoundingBox();
diff --git a/yacv_server/logo.py b/yacv_server/logo.py
index ee4a64c..ce14193 100644
--- a/yacv_server/logo.py
+++ b/yacv_server/logo.py
@@ -20,12 +20,14 @@ def build_logo() -> TopoDS_Shape:
return logo_obj.part.wrapped
+
if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG)
# Start an offline "server" to merge the CAD part of the logo with the animated GLTF part of the logo
os.environ['YACV_DISABLE_SERVER'] = '1'
from yacv_server import show_object, server
+
ASSETS_DIR = os.getenv('ASSETS_DIR', os.path.join(os.path.dirname(__file__), '..', 'assets'))
# Add the CAD part of the logo to the server
@@ -38,6 +40,7 @@ if __name__ == "__main__":
async def writer():
f.write(await server.export('logo'))
+
asyncio.run(writer())
print('Logo saved to', os.path.join(ASSETS_DIR, 'logo.glb'))