Hello,
I saw this code :three.js webgl - IFCLoader but what is the way to do the same with fiber ? Thank you.
you would do the same. everything you see in threejs works in fiber, you can use the loader code 1:1.
that example seems outdated btw, looks like IFCLoader was deprecated for this GitHub - ThatOpen/engine_components the new api looks very confusing, downright puzzling but that’s a different matter.
I actually did that:
import {useLoader} from ‘@react-three/fiber’;
import { IFCLoader } from ‘web-ifc-three’;
import { IFCSPACE } from ‘web-ifc’;import {useEffect,Suspense} from “react”
const Model = () => {
useEffect( ()=>{
async function Kaka(){
const ifcLoader = new IFCLoader();
await ifcLoader.ifcManager.setWasmPath( ‘web-ifc CDN by jsDelivr - A free, fast, and reliable Open Source CDN’, true );await ifcLoader.ifcManager.parser.setupOptionalCategories( {
[ IFCSPACE ]: false,
} );await ifcLoader.ifcManager.applyWebIfcConfig( {
USE_FAST_BOOLS: true
} );ifcLoader.load( ‘./src/assets/rac_advanced_sample_project.ifc’, function ( ) {
// scene.add( model.mesh );
// render();} );
}Kaka()
},)
return (
<div>AA</div> </Suspense>
);
};export default Model
I have this error :
RuntimeError: Aborted(LinkError: WebAssembly.instantiate(): Import #49 module=“a” function=“X”: function import requires a callable). Build with -sASSERTIONS for more info.
Do you know what’s wrong ? Thanks a lot.
this is not about fiber in that case, the browser refuses to load their wasm.
other than that, when you get the wasm fixed, you can’t return a div, which would be the same as new THREE.Div()
but such a thing does not exist. if you want to put a pre-existing object3d into the scene you would typically use primitive.
if you don’t want to use useLoader and suspense, then it’s just
const [scene, setScene] = useState()
useEffect(() => {
...
setScene(scene)
}, [])
return scene && <primitive object={scene} />