JT Core Converter#
The JT core converter is a Kit extension that converts Siemens JT files to USD. It is the GUI-less backend for omni.kit.converter.jt.
Quick Start#
Use this recipe when running inside Kit with omni.kit.converter.jt_core enabled.
import omni.converter.jtk
from omni.kit.converter.jt_core import JTConverterOptions, get_instance
converter = get_instance()
if converter is None:
raise RuntimeError("omni.kit.converter.jt_core is not loaded")
options = JTConverterOptions()
options.instancingStyle = omni.converter.jtk.InstancingStyle.eInstanceableReference
options.layerFilterStyle = omni.converter.jtk.LayerFilterStyle.eOmit
options.materialType = omni.converter.jtk.MaterialType.ePreviewSurface
output_url, status = await converter.create_converter_task(
"C:/data/model.jt",
"C:/data/model.usd",
options.toArgs(),
)
if status.error_code != 0 or not output_url:
raise RuntimeError(status.error_msg)
Success means status.error_code == 0 and output_url is non-empty.
Prerequisites#
Run inside a Kit Python environment where
omni.kit.converter.jt_coreand its native JTTK libraries are loaded.The input
.jtfile must exist locally or be resolvable through supported Omniverse/Nucleus URL handling.The output folder must be writable locally or resolvable through supported Omniverse/Nucleus URL handling.
create_converter_task(...)is async; call it from an async context.
What This Converter Does#
Reads .jt files through the Siemens JT Open Toolkit (JTTK) SDK and writes USD output. The converter handles JT hierarchy, parts, assemblies, tessellation data, materials, hidden-layer handling, instancing, up-axis and unit overrides, and optional Scene Optimizer post-processing.
JT-specific routing has priority over HOOPS for .jt files. On Linux ARM64, JTTK is not supported, so HOOPS is the fallback converter for JT.
Input and Output Formats#
Format |
Notes |
|---|---|
|
JT input handled by |
Output |
Notes |
|---|---|
|
USD output path supplied by the caller. |
Conversion APIs#
Use these APIs to perform conversions, in this order of preference:
API |
When to use |
|---|---|
|
Preferred core extension API when calling the loaded extension from Python. Returns |
|
Lower-level helper used by the extension implementation. Use only when bypassing extension registration intentionally. |
|
Backend SDK wrapper for local conversion paths. Use only when you do not need the core extension’s Nucleus handling, output copying, logging, and Scene Optimizer post-processing. |
Minimal direct API call:
import omni.converter.jtk
from omni.kit.converter.jt_core import JTConverterOptions, get_instance
converter = get_instance()
options = JTConverterOptions()
options.instancingStyle = omni.converter.jtk.InstancingStyle.eInstanceableReference
options.layerFilterStyle = omni.converter.jtk.LayerFilterStyle.eOmit
options.materialType = omni.converter.jtk.MaterialType.ePreviewSurface
output_url, status = await converter.create_converter_task(
"C:/data/model.jt",
"C:/data/model.usd",
options.toArgs(),
)
For direct backend conversion with local paths only, pass the options object itself:
import omni.converter.jtk
from omni.kit.converter.jt_core import JTConverterOptions
options = JTConverterOptions()
options.instancingStyle = omni.converter.jtk.InstancingStyle.eInstanceableReference
options.layerFilterStyle = omni.converter.jtk.LayerFilterStyle.eOmit
options.materialType = omni.converter.jtk.MaterialType.ePreviewSurface
converter = omni.converter.jtk.Converter(options)
error_code, error_msg = converter.convert("C:/data/model.jt", "C:/data/model.usd", {})
Converter Options#
Configure these as properties on JTConverterOptions. Pass options.toArgs() to create_converter_task(...); pass options directly only when calling omni.converter.jtk.Converter(options).
Enum-valued pybind property setters require enum objects, not raw integers. For example, set options.layerFilterStyle = omni.converter.jtk.LayerFilterStyle.eOmit and options.instancingStyle = omni.converter.jtk.InstancingStyle.eInstanceableReference. Numeric enum values are valid in JSON/dict config parsed by JTConverterOptions.parse(...) and in the serialized dict returned by options.toArgs().
|
Default |
Description |
|---|---|---|
|
|
Convert JT curve elements to USD BasisCurves. |
|
|
Instancing mode: |
|
|
Material output: |
|
|
Ignore embedded tessellation geometry and explicitly tessellate surface geometry. |
|
|
Ignore embedded tessellation parameters and use fallback tessellation parameters. |
|
converter default |
Maximum angle in degrees between adjacent tessellated curve segments. Range |
|
converter default |
Maximum deviation distance between tessellated segment and source curve. Range |
|
converter default |
Fraction of part bounding-box diagonal used to suppress holes/arcs. |
|
converter default |
Maximum edge length for fallback tessellation. Non-negative. |
|
converter default |
Maximum tessellated element aspect ratio. Non-negative. |
|
converter default |
Minimum allowable angle in radians. Non-negative. |
|
converter default |
Minimum tessellation edge length. Non-negative. |
|
|
Enable trim suppression during fallback tessellation. |
|
|
Flatten converted USD hierarchy into a single level of geometry. |
|
|
Hidden/filtered layer handling: |
|
|
Emit progress logging during conversion. |
Development Rules#
Keep
JTConverterOptionsinpython/impl/options.pyas the single source for option parsing.When adding or changing an option, update
python/impl/options.py,docs/Overview.md, and tests together.Preserve
.jtfilter priority over HOOPS unless intentionally changing converter routing.Treat native library entries in
config/extension.template.tomlas packaging-critical.Keep creator metadata behavior unless replacing it with equivalent extension/backend version metadata.
Verification#
Build and run the repo test suite from the repository root:
./repo.bat build -xrd
./repo.bat test
For focused changes, run the generated omni.kit.converter.jt_core extension tests after building, or cover the affected tests under source/extensions/omni.kit.converter.jt_core/python/tests.
The configured Python coverage threshold for this extension is 80%.
Codebase Map#
File |
Role |
|---|---|
|
|
|
|
|
JT file filter and routing priority. |
|
Core converter, parameter, and memory leak tests. |
|
User-facing behavior and converter option documentation. |
|
Package metadata, native libraries, tests, coverage settings. |