How to set up Federated Model View
Overview
This page describes the steps involved in setting up a Federated Model View.
How to set up a Federated Model View
The main steps in setting up a federated view are:
Step 1: Configure fedaration type
Set {{defaultFederationType}} to load all workspace models. Refer to sample code below.
modelComposition: {
defaultFederationType: "Project",
initial: {
Architectural: true,
Structural: false,
Mechanical: false,
Electrical: false,
Plumbing: false,
FireProtection: false,
Infrastructural: false,
default: false
},
quality: 'high'
}
For a single model, use default or "SingleModel" and pass {{model}} and {{modelVersionId}}.
Step 2 Configure GIS and Federated Mode (for multiple models on map)
When showing multiple models on the map, enable GIS and set federated mode. Refer to sample code below.
gis: {
enable: true,
token: "<your-mapbox-token>",
federatedMode: EvmUtils.EvmFederatedMode.Outline, // or Dynamic, Markers
primaryModelId: "<reference-model-id>", // optional
showMapMarkers: true,
onFederatedModeChanged: (mode) => console.log('Federated mode:', mode),
onReferenceModelChanged: (modelId) => console.log('Reference model:', modelId)
}
Step 3: Manage camera when GIS and View3D are both enabled
The camera must be managed centrally by IafViewer via proxy APIs. Avoid direct {{mapbox.setCenter()}} or View3D camera calls to prevent desynchronization.
Refer to sample code below.
view3d: {
enable: true,
showToolbar: false,
onCameraUpdate: {
delayInMs: 300,
callback: (camera) => { /* sync to external state if needed */ }
}
}
Step 4: Render Federated Viewer
<IafViewerDBM
{...viewerProps}
model={undefined}
title="Federated Workspace"
/>
With Project federation type, omit {{model}} (or pass it to set primary) so all workspace models load. With SingleModel, pass {{model}} and {{modelVersionId}}.
Complete example
import React from 'react';
import IafViewerDBM from '@dtplatform/iaf-viewer';
import EvmUtils from '@dtplatform/iaf-viewer/src/common/evmUtils';
function FederatedProjectViewer({ workspaceId }) {
const viewerProps = {
serverUri: 'https://api.invicara.com/',
modelComposition: {
defaultFederationType: "Project",
initial: {
Architectural: true,
Structural: false,
Mechanical: false,
Electrical: false,
Plumbing: false,
FireProtection: false,
Infrastructural: false,
default: false
},
quality: 'high'
},
view3d: {
enable: true,
showToolbar: false,
onCameraUpdate: {
delayInMs: 300,
callback: (camera) => { /* optional: sync to state */ }
}
},
view2d: {
enable: true
},
gis: {
enable: true,
token: process.env.MAPBOX_TOKEN,
federatedMode: EvmUtils.EvmFederatedMode.Outline,
primaryModelId: undefined,
showMapMarkers: true,
onFederatedModeChanged: (mode) => console.log('Federated mode:', mode),
onReferenceModelChanged: (modelId) => console.log('Reference model:', modelId)
},
enablePersistence: false
};
return (
<div style={{ width: '100%', height: '100%' }}>
<IafViewerDBM
{...viewerProps}
model={undefined}
title="Federated Workspace"
/>
</div>
);
}
export default FederatedProjectViewer;