Vianmääritysoppaat

Vianmääritysoppaat

Tämä sivu kattaa yleisimmät virheet, joita esiintyy käytettäessä @aspose/3d TypeScript- ja Node.js-projekteissa, perimmäisten syiden selityksineen ja vahvistettuine korjauksineen.


Moduuliratkaisuvirheet

Error: Cannot find module '@aspose/3d/formats/obj'

Perimmäinen syy: TypeScriptin moduuliratkaisustrategia ei tue Node.js-tyylisiä alipolkuvientiä (exports tiedostossa package.json) ellei moduleResolution on asetettu arvoon node tai node16.

Korjaus: Aseta moduleResolution arvoon "node" tiedostossasi tsconfig.json:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "commonjs",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "strict": true
  }
}

Jos käytät TypeScript 5.x:n kanssa "module": "node16" tai "module": "nodenext", käytä "moduleResolution": "node16" yhtenäistämiseksi.


SyntaxError: Cannot use import statement in a module

Perimmäinen syy: Käännettyä JavaScriptiä ajetaan käyttäen require() semantiikkaa, mutta tuloste sisältää ES module import syntaksia; tämä tapahtuu kun module on asetettu es2020 tai esnext mutta Node.js-ajoympäristö odottaa CommonJS:ää.

Korjaa: Käytä "module": "commonjs" kohteessa tsconfig.json ja suorita käännetty .js tiedostot node suoraan:

{
  "compilerOptions": {
    "module": "commonjs",
    "outDir": "./dist"
  }
}

Käännä ja aja sitten:

npx tsc
node dist/main.js

Error: Cannot find module '@aspose/3d'

Perimmäinen syy: Pakettia ei ole asennettu, tai node_modules on vanhentunut.

Korjaa:

npm install @aspose/3d

Vahvista asennus:

node -e "const { Scene } = require('@aspose/3d'); console.log('OK', new Scene().constructor.name);"

Tyhjä kohtaus latauksen jälkeen

Kohtaus latautuu, mutta rootNode.childNodes on tyhjä

Perimmäinen syy (1): Tiedostomuoto sijoittaa kaiken geometrian suoraan rootNode.entity : sen sijaan lapsisolmuina. Tämä on yleistä yksittäisverkko STL-tiedostoissa.

: Diagnostiikka:

import { Scene, Mesh } from '@aspose/3d';

const scene = new Scene();
scene.open('model.stl');

// Check rootNode directly
if (scene.rootNode.entity) {
    console.log(`Root entity: ${scene.rootNode.entity.constructor.name}`);
}
console.log(`Child count: ${scene.rootNode.childNodes.length}`);

: Korjaus: Kulje alkaen scene.rootNode itse, ei vain sen lapsia:

function visit(node: any): void {
    if (node.entity instanceof Mesh) {
        const m = node.entity as Mesh;
        console.log(`Mesh: ${m.controlPoints.length} vertices`);
    }
    for (const child of node.childNodes) {
        visit(child);
    }
}
visit(scene.rootNode);

Perimmäinen syy (2): Tiedostopolku on väärä tai tiedosto on nollatavuinen. Tarkista, että tiedosto on olemassa eikä ole tyhjä ennen kutsua open().

import * as fs from 'fs';

const path = 'model.obj';
if (!fs.existsSync(path)) throw new Error(`File not found: ${path}`);
const stat = fs.statSync(path);
if (stat.size === 0) throw new Error(`File is empty: ${path}`);

Materiaalilista on tyhjä OBJ-latauksen jälkeen

Perimmäinen syy: Materiaalin lataus on oletuksena pois käytöstä ObjLoadOptions. Kirjasto lataa geometrian lukematta .mtl sivutiedostoa.

Korjaus: Aseta enableMaterials = true:

import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';

const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);

Varmista myös, että .mtl tiedosto on samassa hakemistossa kuin .obj tiedosto, koska kirjasto ratkaisee sen suhteessa .obj polkuun.


Formaatti- ja I/O-virheet

openFromBuffer heittää tunnistamattoman formaatin virheen

Perimmäinen syy: Puskurin sisältö ei ole tunnistettavissa oleva binaariformaatti, tai puskuri on vioittunut (katkaistu, väärä koodaus tai base64 raakabittien sijaan).

Diagnostiikka:

const buffer = fs.readFileSync('model.glb');
console.log('Buffer size:', buffer.length, 'bytes');
console.log('First 4 bytes (hex):', buffer.slice(0, 4).toString('hex'));
// GLB magic: 676c5446 ("glTF")
// STL binary starts with 80 bytes of header; no fixed magic
// OBJ is text: openFromBuffer may not detect format

Korjaus: Tekstipohjaisille formaateille (OBJ, COLLADA) anna sopiva options class vihjaamaan formaattia:

import { ObjLoadOptions } from '@aspose/3d/formats/obj';
scene.openFromBuffer(buffer, new ObjLoadOptions());

Tulostettu GLB avautuu JSON-muodossa 3D-näytöissä

Perimmäinen syy: GltfSaveOptions.binaryMode oletusarvoisesti on false, tuottaen .gltf JSON-tulostus, vaikka tulosteen tiedostonimi on .glb.

Korjaus: Aseta eksplisiittisesti binaryMode = true:

import { GltfSaveOptions } from '@aspose/3d/formats/gltf';

const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('output.glb', opts);

STL-tulosteessa ei ole väri- tai materiaalitietoja leikkurissa

Perimmäinen syy: STL-muoto ei tue materiaaleja tai väriä sen standardimäärityksessä. Väriä tukevat leikkurit käyttävät omistusoikeudellisia laajennuksia, joita ei tueta by @aspose/3d.

Korjaus: Vie sen sijaan 3MF-muotoon, joka tukee väri- ja materiaalimetatietoja:

scene.save('output.3mf');

TypeScript-käännösvirheet

Property 'controlPoints' does not exist on type 'Entity'

Perimmäinen syy: Entity on perusluokka; Mesh on konkreettinen tyyppi, jossa on geometrisia ominaisuuksia. Tarvitset instanceof tarkistuksen ennen verkko-kohtaisten jäsenten käyttöä.

Korjaus:

import { Mesh } from '@aspose/3d';

if (node.entity instanceof Mesh) {
    const mesh = node.entity as Mesh;
    console.log(mesh.controlPoints.length);
}

Type 'null' is not assignable to type 'Node'

Perimmäinen syy: getChildNode() palauttaa Node | null. TypeScriptin tiukka tila vaatii, että käsittelet null-tapauksen.

Korjaa:

const child = node.getChildNode('wheel');
if (!child) throw new Error('Node "wheel" not found');
// child is now Node, not null

Cannot find name 'GltfSaveOptions'

Perimmäinen syy: GltfSaveOptions on alipolun moduulissa @aspose/3d/formats/gltf, ei paketin juurta.

Korjaa: Tuo alipolusta:

import { GltfSaveOptions } from '@aspose/3d/formats/gltf';

Muisti- ja suorituskykyongelmat

Prosessi loppuu muistiin suurilla FBX-tiedostoilla

Perimmäinen syy: Erittäin suuret FBX-tiedostot (>200 MB) varaa merkittävän pinon. Node.js:n oletusmuistipino on ~1.5 GB 64‑bit -järjestelmissä, mutta se ei välttämättä riitä monen kohtauksen tiedostoja varten.

Korjaus: Kasvata Node.js:n heap-kokoa:

node --max-old-space-size=8192 dist/convert.js

Käsittele tiedostoja myös peräkkäin sen sijaan, että prosessoisit ne rinnakkain, kun muisti on rajoitettu:

for (const file of files) {
    const scene = new Scene();
    scene.open(file);
    scene.save(file.replace('.fbx', '.glb'));
    // scene goes out of scope; GC can reclaim
}

Katso myös

 Suomi