Adding prefix to Object3D id

Using 2 different libraries (A and B) based on threejs.

Each library generates valid threejs meshes independently. However, the id of the meshes from library A and B can conflict (i.e. be the same). Then when we add meshes from library A and B into the same scene it does not render properly.

Is there a mechanism we can use to generate meshes independently and ensure IDs do not conflict while rendering it in the same scene?

One idea is to add a prefix concept:

Object.defineProperty( this, 'id', { value: object3DId ++ } );
=>
Object.defineProperty( this, 'id', { value: `${prefix}-${object3DId ++}` } );

Not quite sure which would be the best way to pass the prefix though.

Any thoughts on that?

Thanks

Author: Fantashit

2 thoughts on “Adding prefix to Object3D id

  1. Sure, lets say you have a global namespace THREE, now if your App A sets a property value THREE.generator to X and your app B sets a property value for the same property to Y – only one of those will actually stick.

    Now I think about it, I think you have bigger problems if there are actually multiple instances of THREE loaded in your app. If you manage to let both libraries use the same instance, then your problems will also be gone. I would suggest trying this instead of “hacking” around the ID generation.

  2. FYI – I fixed ami to work nicely with different version of three using a factory pattern. We can close the issue or keep it open if you think such a feature (prefix id) may be useful at some point.

    //
    import * as THREE from 'three';
    import {customHelperFactory} from 'ami';
    
    const CustomHelper = customHelperFactory(THREE);
    const helper = new CustomHelper();
    scene.add(helper);
    

Comments are closed.