Contact and Support
Licensing Support
For questions regarding ordering, payment and delivery, please refer to the Customer Care Center.
To review your orders or to manage your annual subscriptions, please login to your Customer account.
If you are experiencing problems with the licensing of Tinman 3D, please refer to Licencing 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.
Frequently Asked Questions
You can find answers to some of the most frequently asked questions below.
Where is the ZIP / Git repository password?
Please read the Terms and Conditions (or at least scroll down to the end of the page). You will find the password there.
Why does compilation or linking fail?
Some components of the Tinman 3D SDK are provided as source code. The following sections explain how to fix the most common build problems.
[C++] Cannot convert … to CodeX::Object*
error C2664: 'void CodeX::Object::ReleaseRef(CodeX::Object *)' : cannot convert argument 1 from '<some type> *' to 'CodeX::Object *'
Tinman 3D minimizes the use of #include
directives in header files, in order to reduce compilation time and to avoid cyclic include dependencies.
Because of minimal use of #includes
, the type <some type>
is a forward declaration only and thus incomplete.
If you get this in one of your source files, add an #include
directive for <some type>
there.
This should fix the problem.
Why does my licence key fail to work?
Please keep in mind that licence keys have metadata bindings, so the same licence key may not work for other users, products, etc.
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:
- The licence key is invalid
-
Please make sure you specify the entire licence key (100 non-whitespace ASCII characters).
- The licence metadata does not match
-
If you need additional metadata bindings (e.g. more than one workstation, typo in metadata values), you may request extra licence keys. Please refer to Licencing and Pricing for details.
- The licence key has expired
-
You will receive new licence keys for each billing period of your subscriptions automatically. If your User, Site or Academic subscription has ended, you can continue to use your perpetual licence keys. If the renewal subscription of your Product, Company or Full licence has ended, you can keep using the previous Tinman 3D SDK release.
- The licence key source has been disabled
-
The LicenceDomain.AllowUnlockByEnvironment property of the Tinman domain can be set to
false
, which disables use of theTINMAN_3D_LICENCEKEY
environment variable.
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).
The recommended solution for this problem is to have a User, Site or Academic licence key ready in the environment variable TINMAN_3D_LICENCEKEY
while doing development work.
To work around the problem, you can disable the hosting process in your IDE. For Visual Studio 2015 or older, this can be done in the project properties:

Why does my application crash?
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 exception handling, 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:
-
Call LicenceKey on LicenceDomain.Tinman for each one of your licence keys.
-
Call Unlock or TryUnlock explicitly so you can handle any errors up-front.
Why do I get strange TinmanExceptions?
While developing software using the Tinman 3D SDK, you might - sooner or later - run into uncaught TinmanExceptions. The following section explains the most common ones.
Unknown type: '00000000-0000-0000-0000-000000000000'
No such type: 'Type.Name'
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 by calling PleaseIncludeInBinaryThanks on all TinmanModules you are using.
-
Call PleaseIncludeInBinaryThanks on TinmanWorkshopModule. This initializes the top-level module of the application.
-
Call TinmanModule.Initialize. 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 TinmanModule.Dependencies. |
Null-pointer exception (NPE)
e.g. "Object reference not set to an instance of an object"
A common cause for NPEs is trying to use a IDisposable object that has already been disposed (see LifecycleState.Disposed), often because of an incorrect sequence of ownership transfers.
In DEBUG mode, a FailedAssertionException should be thrown in this case, whereas in RELEASE mode, the code will usually run into an NPE, because references and pointers are cleared upon disposal, as required by the rules of Disposal and Ownership.
Calls to IDisposable.Acquire will return null
for disposed objects, which is the correct behaviour but can still cause NPEs if not anticipated.
Using ILifecycleState.AssertValid in DEBUG mode can help to avoid that.
Please check ownership transfers to see if there are missing IDisposable.AcquireBase calls or surplus IDisposable.Dispose calls.
Keep in mind that disposal may happen implicitly, for example when using the C# using
statement.
Why does my OS freeze 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.
What to do with the bugs I found?
Please have a look at the changelog see if your problem has already been reported and fixed.
Please send your bug reports to support@tinman3d.com. If possible, include the following information in the report:
- Problem Description
-
Please describe the context of the problem and the problem itself. If you make the description as concise as possible and as precise as necessary, this will very much help to fix the problem.
- System Information
-
If you deem it helpful, please provide us with information about the computer system you are using.
TinmanModule.SystemInfo
Geodata Processor / sysinfo - Stacktrace
-
The exception message and stacktrace, if is available.
TinmanException.ErrorInfo - Error Dump
-
The error dump file that has been generated by TinmanErrorDump.
This happens rarely, but if it does, providing the error dump file will help greatly to fix the problem. - Executable code fragment
-
If you provide us with code that triggers the bug, we will usually be able to fix it quickly. To defeat the bug, we must understand the bug, so to speak.