IFMEAggregate/IFMEGeometryInstance Migration Guide for FME 2026.1 | FME Objects

Liz Sanderson
Liz Sanderson
  • Updated

Introduction

In FME 2026.1, we are simplifying the geometry model by extracting geometry instance functionality from IFMEAggregate into a new dedicated class, IFMEGeometryInstance. Prior to 2026.1, IFMEAggregate could represent either a collection of geometries or a single geometry instance. bool IFMEAggregate::hasGeometryInstance(bool) const; could be used to distinguish between the two states.

 

Summary of Changes

IFMEAggregate now only contains a collection of IFMEGeometry objects. The following methods on IFMEAggregate, which were specific to the deprecated geometry instance state, have been marked as deprecated and will return false or perform no operations:

Deprecated IFMEAggregate Methods:

  • bool hasGeometryInstance(bool recursive) const
  • bool setGeometryDefinitionReference(const FME_UInt32 gdReference)
  • bool getGeometryDefinitionReference(FME_UInt32& gdReference) const
  • void setGeometryInstanceLocalOrigin(FME_Real64 x, FME_Real64 y, FME_Real64 z)
  • bool getGeometryInstanceLocalOrigin(FME_Real64 &x, FME_Real64 &y, FME_Real64 &z) const
  • void setGeometryInstanceMatrix(const FME_Real64 m[3][4])
  • bool getGeometryInstanceMatrix(FME_Real64 m[3][4]) const
     

To get equivalent geometry instance support, any code that used these methods should be updated to use the new IFMEGeometryInstance class, which provides equivalent methods.  This might involve adding an extra FME_Status visitGeometryInstance(IFMEGeometryInstance& geometryInstance) or FME_Status visitGeometryInstance(const IFMEGeometryInstance& geometryInstance) method to any existing geometry visitors.

 

Impact & Recommended Action

ImpactRecommended Action
Deprecated methods on IFMEAggregate no longer perform any actions.Replace usage with the equivalent methods on IFMEGeometryInstance.
Existing geometry visitor implementations do not handle geometry instances explicitly.Update visitors to add visitGeometryInstance(...) handlers.

 

Migration Steps

1. Update SDK

Point your project to the FME 2026.1 SDK include and library paths.

 

2. Search & Replace

For each occurrence of

hasGeometryInstance(...)
setGeometryDefinitionReference(...)
setGeometryInstanceMatrix(...)

 

3. Replace with IFMEGeometryInstance

Refactor affected code to explicitly create and work with IFMEGeometryInstance. 

 

4. Update Geometry Visitors

If your code uses geometry visitors, add support for geometry instances by implementing one or both of the following methods:

FME_Status visitGeometryInstance(IFMEGeometryInstance& geometryInstance)
FME_Status visitGeometryInstance(const IFMEGeometryInstance& geometryInstance)

 

5. Review ::isCollection() Behaviour 

Prior to 2026.1, IFMEAggregate::isCollection() would always return true.

In 2026.1, IFMEGeometryInstance::isCollection() returns true only if the geometry definition referenced by the geometry instance is itself a collection.

Third-party developers should review any logic that depends on isCollection() and verify that this change in behavior does not affect program flow or assumptions made about geometry structure.

 

Before / After Example

// ----- Pre-2026.1 -----
if (aggregate.hasGeometryInstance(false))
{
   aggregate.setGeometryInstanceLocalOrigin(x, y, z);
}

// ----- 2026.1 Migration -----
IFMEGeometryInstance* geometryInstance = gFMEGeometryTools.createGeometryInstance();
geometryInstance->setLocalOrigin(x, y, z);

Where gFMEGeometryTools is a reference to your IFMEGeometryTools object

Was this article helpful?

We're sorry to hear that.

Please tell us why.

As of January 14th, 2026, comments on knowledge base articles have been closed. To make sure questions don’t get missed and to enable more community support, we’ve moved discussions to the FME Community. If you have a question or a comment about this article, please create a new post or create a support ticket.