Software Development Kit - User Manual

Licensing Support

For questions regarding ordering, payment and delivery, please refer to the Customer Care Center.

To review your orders, please use the MyCommerce ID section in the Customer Care Center. You can cancel any of your annual subscriptions there at any time.

If you are experiencing problems with the licensing of Tinman 3D, please refer to Licensing and Pricing

If this does not resolve the issue, please contact us at support@tinman3d.com.

Technical Support

If you experience technical problems using the Tinman 3D SDK, please do not hesitate to contact us at support@tinman3d.com.

We will help you to solve the problem as quickly as possible.

You can find our bug-tracking system here: tinman3d.myjetbrains.com/youtrack


You can find answers to some of the most frequently asked questions below.

The downloads are password protected?
The Git repository is password protected?

Please read the Terms and Conditions (or at least scroll down to the end of the page). You will find the password there. 

Compilation / linking fails.

Some components of the Tinman 3D SDK are provided as source code. The following list explains how to fix the most common build problems:

Licence key does not work.

Please keep in mind that licence keys have metadata bindings, so the same licence key may not work for other users, products, etc.

Subscription licence keys (i.e. User, Site and Academic) only work during the subscription period.

Perpetual licence keys (i.e. Product, Company and Full) only work for Tinman 3D SDK versions that have been released before or on the date of purchase, plus one year.

A licence key might not work because of the following reasons:

If you are specifying your licence key via the environment variable, make sure the name is spelled correctly and that there are no extra characters before or after the licence key (whitespaces are ok):

TINMAN_3D_LICENCEKEY= CIk!6Dh6Ui;lSE+Z{{jx7$Y~8,#TSt~o%CK#(e,F#O9.d;fGc+bU35%HVl;[.+s#@h.bo1~{riL.4|UreHfeuac}5ZV~DBocxU}@

Changes to environment variables are not always forwarded to running processes, so it might be necessary to restart your IDE (for example Visual Studio) to make your licence key take effect.

When your IDE (for example Visual Studio 2015 or older) is using a hosting process to debug your application, your Product and Company licence keys will not work (all other licence keys will work fine, though).

To work around this, you can disable the hosting process in your IDE. For Visual Studio 2015 or older, this can be done in the project properties:

Project Properties - Visual Studio C#

The recommended solution for this problem is to have a User, Site or Academic licence key ready in the environment variable.

The application crashes.

Tinman 3D uses exceptions. Make sure you catch and report those in your application. Uncaught exceptions will terminate the application, usually leaving no or little error trace.

For more information about Tinman exceptions, please refer to:

The Demo Application shows how to catch exceptions properly.

Tinman 3D makes use of method precondition checks and state assertions in order to validate the execution context. This helps to avoid out-of-range errors and memory corruption:

These sanity checks are only active in DEBUG mode.

When running in RELEASE mode, invalid parameters or calls can easily corrupt memory and crash the application. Please make sure to run in DEBUG mode at least once; then you will get proper exceptions, and you can identify the error source.

The licence protection module of Tinman 3D uses encrypted data which must be unlocked with a valid licence key.

Encrypted data is automatically unlocked when the application needs to access it for the first time. This can lead to unpredictable error situations when no valid licence key is available.

As best practice, you should specify your licence key(s) before using any other API of the Tinman 3D SDK:

Application throws a TinmanException.

While developing software using the Tinman 3D SDK, you might - sooner or later - run into uncaught TinmanExceptions. The following list explains the most common ones:

Tinman 3D uses lazy initialization, for example for serializable types and config types.

Some entity is referenced from outside of the application (e.g. serialized in a file or created from source code in a config script), but has not been initialized yet.
To fix this, use the IPleaseIncludeInBinaryThanks interface to force initialization up-front: call PleaseIncludeInBinaryThanks on all TinmanModules your are using.

For example, the Workshop Application performs initialization in this order:

  1. Call TinmanWorkshopModule.Instance.PleaseIncludeInBinaryThanks.
    This initializes the top-level module of the application.
  2. Call PleaseIncludeInBinaryThanksAll.
    Since each module instance references its dependencies and the top-level module has already been initialized, this will initialize all other modules, too.

The dependency graph of the modules can be queried via Dependencies.

OS freezes while importing geodata.

If you are using the Geodata Processor on Windows 7 to run a bulk import of geodata, the filesystem cache may grow until application code gets paged to disk. This kills runtime performance and the system freezes.

Please note that this is not problem of Tinman 3D.

This problem can be avoided by importing geodata incrementally, instead of running a single import process for hours or days.

Also there are some tools available on the web that can help fixing this, for example SetSystemFileCacheSize.

There is a bug.

We use YouTrack as our online bug-tracking system. Please have a look there to see if your problem has already been reported.

Please send your bug reports to support@tinman3d.com; if possible, include the following information in the report:

  1. Problem Description
    Please tell us as much as possible about the context that led to the problem.

  2. System Information
    If necessary, please provide us with information about the computer system you are using. You can use SystemInfo for this.

  3. Error Dump / Stacktrace
    The exception message and/or stacktrace. If you get a TinmanException you can use the ToString method for this.

  4. Executable code fragment that reproduces the bug
    An important person once said: "To fight the bug, we must understand the bug."
    If you provide us with code that triggers the bug, we will be able to fix it quickly.