This is a sample console connector that demonstrates how to use the Autodesk Data Exchange SDK without the UI component. It serves as a reference implementation for developers building their own Data Exchange integrations and provides a comprehensive example of SDK capabilities through a professional command-line interface.
Perfect for:
- Service-based integrations
- Custom UI development
- Learning Data Exchange SDK patterns
- Automated workflow testing
- Headless data processing
- π Quick Start - Get up and running quickly
- π» Usage Examples - See the console connector in action
- π Command Reference - Complete command documentation
- π Migration Guide - SDK 7.2.0 Upgrade Guide
- ποΈ Architecture - Understand the codebase structure
- π§ Extending the Application - Add custom functionality
- β Exchange Management - Create, update, and retrieve exchanges
- β Multi-Format Geometry Processing - BREP, IFC, Mesh, and Primitive geometries
- β Parameter Operations - Add, modify, and delete instance/type parameters
- β Version Control - Exchange synchronization and versioning
- β Data Export - Download exchanges as STEP or OBJ files
- β Folder Management - Set and manage working directories
- π Professional Console Interface - Clean, categorized output messages
- π Comprehensive Workflow Testing - Complete end-to-end validation
- π» Command-Based Architecture - Extensible command pattern
- π§ Error Handling - Robust error management and user feedback
- π Built-in Help System - Detailed command documentation
-
Autodesk Platform Services App
- Register an app
- Select Data Management and Data Exchange APIs
- Note your Client ID, Client Secret, and Auth Callback
-
Development Environment
- Visual Studio 2019 or later
- .NET Framework 4.8
- Basic knowledge of C#
-
Access Requirements
- Autodesk Construction Cloud (ACC) access
- Valid Autodesk account with appropriate permissions
git clone https://github.com/your-repo/aps-dataexchange-console.git
cd aps-dataexchange-consoleFollow the Data Exchange .NET SDK installation guide:
Option A: Visual Studio
- Open
ConsoleConnector.sln - Build the solution (packages restore automatically)
Option B: Command Line
# Run from project root
BuildSolution.batUpdate src/ConsoleConnector/App.config with your app credentials:
<appSettings>
<add key="APS_CLIENT_ID" value="your_client_id" />
<add key="APS_CLIENT_SECRET" value="your_client_secret" />
<add key="APS_CALLBACK_URL" value="your_callback_url" />
</appSettings>- Build and run the console application
- Complete OAuth authentication in the browser
- Start using commands in the console interface
# Get help
>> help
# Set working folder (using folder URL)
>> SetFolder [FolderUrl]
# OR set working folder (using individual parameters)
>> SetFolder [HubId] [Region] [ProjectUrn] [FolderUrn]
# Create a new exchange
>> CreateExchange [ExchangeTitle]
# Add BREP geometry
>> AddBrep [ExchangeTitle]
# Add instance parameters
>> AddInstanceParameter [ExchangeTitle] [ElementId] [ParameterName] [ParameterSchema] [ParameterValue] [ParameterValueDataType]
# Sync changes
>> SyncExchange [ExchangeTitle]
# Download exchange
>> GetExchange [ExchangeId] [CollectionId] [HubId] [ExchangeFileFormat]# Run comprehensive end-to-end test
>> WorkFlowTestThis command executes a complete workflow that:
- Creates a new exchange
- Adds multiple geometry types (BREP, IFC, Mesh, Primitives)
- Adds instance and type parameters
- Syncs to Version 1
- Deletes some parameters
- Adds more geometries and parameters
- Syncs to Version 2
- Downloads the final exchange
| Command | Description | Example |
|---|---|---|
help |
Display all commands | help |
help [command] |
Get command details | help CreateExchange |
CreateExchange |
Create new exchange | CreateExchange [ExchangeTitle] |
AddBrep |
Add BREP geometry | AddBrep [ExchangeTitle] |
AddIFC |
Add IFC geometry | AddIFC [ExchangeTitle] |
AddMesh |
Add mesh geometry | AddMesh [ExchangeTitle] |
AddPrimitive |
Add primitives | AddPrimitive [ExchangeTitle] [PrimitiveGeometry] |
AddInstanceParameter |
Add instance parameter | AddInstanceParameter [ExchangeTitle] [ElementId] [ParameterName] [ParameterSchema] [ParameterValue] [ParameterValueDataType] |
AddTypeParameter |
Add type parameter | AddTypeParameter [ExchangeTitle] [ElementId] [ParameterName] [ParameterSchema] [ParameterValue] [ParameterValueDataType] |
DeleteInstanceParam |
Remove instance parameter | DeleteInstanceParam [ExchangeTitle] [ElementId] [ParameterName] |
DeleteTypeParam |
Remove type parameter | DeleteTypeParam [ExchangeTitle] [ElementId] [ParameterName] |
SyncExchange |
Sync exchange | SyncExchange [ExchangeTitle] |
GetExchange |
Download exchange | GetExchange [ExchangeId] [CollectionId] [HubId] [ExchangeFileFormat] |
SetFolder |
Set working folder | SetFolder [FolderUrl] or SetFolder [HubId] [Region] [ProjectUrn] [FolderUrn] |
WorkFlowTest |
Run complete test | WorkFlowTest |
Exit |
Close application | Exit |
ConsoleConnector/
βββ Commands/ # Command implementations
β βββ CreateExchangeCommand.cs
β βββ CreateBrepCommand.cs
β βββ WorkFlowTestCommand.cs
β βββ ...
βββ Helper/ # Utility classes
β βββ ConsoleAppHelper.cs
β βββ GeometryHelper.cs
β βββ ParameterHelper.cs
βββ Interfaces/ # Abstractions
βββ Assets/ # Sample geometry files
- Command Pattern: Each operation is implemented as a separate command class
- Helper Classes: Reusable utilities for geometry, parameters, and console operations
- Interface Abstractions: Clean separation of concerns
- Asset Management: Sample files for testing and demonstration
- Create a new command class inheriting from
Command - Implement required methods (
Execute,Clone,ValidateOptions) - Register the command in
ConsoleAppHelper
public class MyCustomCommand : Command
{
public override async Task<bool> Execute()
{
Console.WriteLine("[CUSTOM] Executing my command");
// Implementation here
return true;
}
public override Command Clone()
{
return new MyCustomCommand(this);
}
}- Create option class in
Commands/Options/ - Add to command's
Optionslist - Use
GetOption<T>()to access values
This section documents the migration from SDK 7.1.0 to Autodesk Data Exchange SDK 7.2.0.
This is a non-breaking upgrade focused on bug fixes and minor improvements:
- SDK Version: Upgraded to
Autodesk.DataExchange 7.2.0 - No Breaking Changes: All existing APIs remain fully compatible
- Bug Fixes: Various stability and reliability improvements
- Minor Improvements: Internal enhancements to SDK performance
| Package | Previous Version | New Version | Impact |
|---|---|---|---|
Autodesk.DataExchange |
7.1.0 |
7.2.0 |
Minor - Bug fixes and improvements, no breaking changes |
Update your packages.config:
<package id="Autodesk.DataExchange" version="7.2.0" targetFramework="net48" />Or if using a .csproj PackageReference:
<PackageReference Include="Autodesk.DataExchange" Version="7.2.0" />Visual Studio:
- Open
ConsoleConnector.sln - Rebuild the solution (packages restore automatically)
Command Line:
BuildSolution.batRun the comprehensive workflow test to confirm everything works as expected:
>> WorkFlowTest| Aspect | SDK 7.1.0 | SDK 7.2.0 |
|---|---|---|
| API surface | Stable | No changes |
| Breaking changes | - | None |
| Upgrade effort | - | Version bump only |
| Key focus | API simplification | Bug fixes & improvements |
After upgrading, run the comprehensive workflow test:
>> WorkFlowTestThis command validates:
- β Exchange creation and management
- β Geometry processing (BREP, IFC, Mesh, Primitives)
- β Parameter operations
- β Synchronization workflows
- β File download capabilities
Migration Checklist:
- Updated all package references to 7.2.0
- Restored NuGet packages and rebuilt the solution
- Tested core workflows with
WorkFlowTest - Verified all geometry types render correctly
π Historical: SDK 6.3.0 β 7.1.0 Migration Guide
This section documents the previous migration from SDK 6.3.0 to Autodesk Data Exchange SDK 7.1.0 and is preserved here for reference.
This upgrade included significant API changes:
- SDK Version: Upgraded to
Autodesk.DataExchange 7.1.0 - API Simplification: Removed
GeometryPropertieswrapper class - Explicit Format Specification: Geometry format now required as explicit parameter
| Package | Previous Version | New Version | Impact |
|---|---|---|---|
Autodesk.DataExchange |
6.3.0 |
7.1.0 |
Major - Breaking changes to geometry creation APIs |
The GeometryProperties class that was previously used to wrap geometry parameters was removed entirely. All methods that accepted GeometryProperties now take individual parameters directly.
Before (SDK 6.3.0):
var geometry = ElementDataModel.CreateFileGeometry(
new GeometryProperties(filePath, renderStyle));After (SDK 7.1.0):
var geometry = ElementDataModel.CreateFileGeometry(
filePath,
GeometryFormat.Step,
renderStyle,
units);Key differences:
- No
GeometryPropertieswrapper GeometryFormatenum is required as the second parameterRenderStyleandUnitsare optional parameters
Before (SDK 6.3.0):
var geometry = ElementDataModel.CreatePrimitiveGeometry(
new GeometryProperties(geomContainer, renderStyle));After (SDK 7.1.0):
var geometry = ElementDataModel.CreatePrimitiveGeometry(
geomContainer,
renderStyle,
units);Key differences:
- No
GeometryPropertieswrapper - Pass the geometry object (
GeometryContainer,DesignPoint, etc.) directly RenderStyleandUnitsare optional parameters
- Update package references to 7.1.0
- Add
using Autodesk.DataExchange.Core.Enums;where needed - Update all
CreateFileGeometrycalls to use direct parameters withGeometryFormat - Update all
CreatePrimitiveGeometrycalls to pass geometry objects directly - Remove all references to
GeometryPropertiesclass
| Value | Description | File Extensions |
|---|---|---|
GeometryFormat.Unknown |
Unknown format | - |
GeometryFormat.Step |
STEP file format | .stp, .step |
GeometryFormat.Obj |
OBJ mesh format | .obj |
GeometryFormat.Ifc |
IFC file format | .ifc |
GeometryFormat.Bimdex |
Bimdex geometry format | - |
GeometryFormat.LargePrimitive |
Large primitive format | - |
public static FileGeometry CreateFileGeometry(
string filePath,
GeometryFormat format,
RenderStyle renderStyle = null,
Units units = null)
public static FileGeometry CreateFileGeometry(
MemoryStream geometryStream,
GeometryFormat format,
RenderStyle renderStyle = null,
Units units = null)
public static PrimitiveGeometry CreatePrimitiveGeometry(
Autodesk.GeometryPrimitives.Data.Geometry geometry,
RenderStyle renderStyle = null,
Units units = null)
public static MeshGeometry CreateMeshGeometry(
Autodesk.GeometryUtilities.MeshAPI.Mesh mesh,
string meshName,
Units units = null)| Aspect | SDK 6.3.0 | SDK 7.1.0 |
|---|---|---|
| Geometry wrapper | GeometryProperties class |
Direct parameters |
| File format | Inferred from file | Explicit GeometryFormat enum |
| API style | Wrapper object pattern | Direct parameter pattern |
| Required namespace | - | Autodesk.DataExchange.Core.Enums |
This is a sample project for reference purposes. While direct contributions may not be accepted, you're encouraged to:
- Fork the repository for your own modifications
- Report issues or suggestions
- Share improvements with the community
This sample code is part of the Autodesk Data Exchange .NET SDK (Software Development Kit) beta. It is subject to the license covering the Autodesk Data Exchange .NET SDK (Software Development Kit) beta.
Dhiraj Lotake - Autodesk
Hariom Sharma - Autodesk
For SDK-related questions and support:
This sample demonstrates the power and flexibility of the Autodesk Data Exchange SDK for building custom integrations and automating design data workflows.