Skip to main content
Version: v5.1

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:

  1. Configure federation type

  2. Configure GIS and Federated Mode (for multiple models on map)

  3. Manage camera when GIS and View3D Are both enabled

  4. Render Federated Viewer

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;