Skip to content

BaseImporterPlugin

Source CodeAPI Reference

Abstract base plugin for file importers. Subclasses provide an Importer instance that defines the supported file extensions, MIME types, and loader class. When the plugin is added to the viewer, the importer is registered with the AssetManager's import pipeline. When removed, it is unregistered.

Creating a Custom Importer Plugin

A subclass needs two things — a PluginType and an _importer:

typescript
import {BaseImporterPlugin} from 'threepipe'
import {Importer} from 'threepipe'
import {MyFormatLoader} from './MyFormatLoader'

export class MyFormatPlugin extends BaseImporterPlugin {
    public static readonly PluginType = 'MyFormatPlugin'

    protected _importer = new Importer(
        MyFormatLoader,     // Loader class (extends three.js Loader)
        ['myf', 'myformat'],// Supported file extensions
        ['model/myformat'], // Supported MIME types
        false               // root: true if this is a primary scene format
    )
}

The Importer Constructor

typescript
new Importer(cls, ext, mime, root, onCtor?)
ParameterTypeDescription
clsClass<Loader>The loader class (must extend three.js Loader)
extstring[] | () => string[]Supported file extensions (lowercase). Can be a function for dynamic evaluation.
mimestring[]Supported MIME types (lowercase)
rootbooleanWhether files of this type are "root" files — when importing folders/zips, only root files are loaded if any exist; non-root files are loaded only if no root files are found
onCtorcallback (optional)Hook called after loader construction for setup (e.g., WASM paths, extensions)

Adding a Transform

When the raw loader output needs conversion (e.g., BufferGeometry to Mesh), use an anonymous inline class with a transform method:

typescript
import {ILoader} from 'threepipe'

protected _importer = new Importer(class extends STLLoader implements ILoader {
    transform(res: BufferGeometry): Mesh | undefined {
        if (!res) return undefined
        return new Mesh(res, new PhysicalMaterial({
            color: 0x888888,
            metalness: 0.5,
        }))
    }
}, ['stl'], ['model/stl'], false)

Properties

PropertyTypeDescription
_importerImporter (abstract)The importer instance subclasses must provide
toJSONnullSerialization disabled — importer plugins represent capability, not state

Lifecycle

onAdded(viewer): Registers _importer into viewer.assetManager.importer.addImporter()

onRemove(viewer): Unregisters via viewer.assetManager.importer.removeImporter()

dispose(): No-op. Override in subclasses if cleanup is needed.

Built-in Subclasses

Core Package

PluginExtensionsRootNotes
Rhino3dmLoadPlugin.3dmyesConfigurable UI properties
PLYLoadPlugin.plynoWraps geometry in Mesh
STLLoadPlugin.stlnoWraps geometry in Mesh
KTX2LoadPlugin.ktx2noWASM transcoder setup
KTXLoadPlugin.ktxnoSimplest subclass
USDZLoadPlugin.usdz, .usdanoCustom parse for USDA

External Packages

The Simplest Subclass

KTXLoadPlugin:

typescript
import {BaseImporterPlugin} from '../base/BaseImporterPlugin'
import {Importer} from '../../assetmanager'
import {KTXLoader} from 'three/examples/jsm/loaders/KTXLoader.js'

export class KTXLoadPlugin extends BaseImporterPlugin {
    public static readonly PluginType = 'KTXLoadPlugin'
    protected _importer = new Importer(KTXLoader, ['ktx'], ['image/ktx'], false)
}

Threepipe - Next generation 3D toolkit for the web