Sorun Giderme Kılavuzları

Sorun Giderme Kılavuzları

Bu sayfa, kullanırken karşılaşılan en yaygın hataları kapsar @aspose/3d TypeScript ve Node.js projelerinde, kök neden açıklamaları ve doğrulanmış çözümlerle birlikte.


Modül Çözümleme Hataları

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

Kök neden: TypeScript’in modül çözümleme stratejisi, Node.js tarzı alt yol dışa aktarmalarını desteklemez (exports içinde package.json) olmadıkça moduleResolution ayarlanmadıysa node olarak ayarlanmalı node16.

Düzeltme: Ayarla moduleResolution olarak "node" projenizde tsconfig.json:

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

TypeScript 5.x’i … ile kullanıyorsanız "module": "node16" veya "module": "nodenext", kullanın "moduleResolution": "node16" eşleşecek şekilde.


SyntaxError: Cannot use import statement in a module

Temel neden: Derlenmiş JavaScript, … ile çalıştırılıyor require() semantiğiyle çalışıyor ancak çıktı ES modülü içeriyor import sözdizimi; bu, … olduğunda olur module … ayarlandığında es2020 veya esnext ancak Node.js çalışma zamanı CommonJS bekliyor.

Düzelt:Kullan "module": "commonjs" içinde tsconfig.json ve derlenmiş .js dosyaları şununla node doğrudan:

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

Ardından derleyin ve çalıştırın:

npx tsc
node dist/main.js

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

Temel neden: Paket yüklü değil, ya da node_modules eski.

Düzelt:

npm install @aspose/3d

Kurulumu doğrulayın:

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

Yükleme Sonrası Boş Sahne

Sahne yükleniyor ama rootNode.childNodes boş

Temel neden (1): Dosya formatı tüm geometrileri doğrudan üzerine yerleştirir rootNode.entity : çocuk düğümler olarak değil. Bu, tek-örgü STL dosyalarında yaygındır.

Tanı:

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}`);

Düzeltme: Şuradan başlayarak dolaşın scene.rootNode kendisi, sadece çocukları değil:

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);

Temel neden (2): Dosya yolu yanlış veya dosya sıfır bayt. Çağırmadan önce dosyanın var olduğundan ve boş olmadığından emin olun 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}`);

OBJ yüklemesinden sonra malzeme listesi boş

Temel neden: Malzeme yükleme varsayılan olarak şurada devre dışı bırakılmış ObjLoadOptions. Kütüphane, yan dosyayı okumadan geometrileri yükler .mtl yan dosya.

Düzelt: Ayarla 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);

Ayrıca şunu sağlayın .mtl dosya aynı dizinde. .obj dosya, kütüphane ona göreceli olarak çözdüğü gibi .obj yol.


Biçim ve G/Ç Hataları

openFromBuffer tanınmayan bir format hatası fırlatır

Temel neden: Buffer içeriği tanınabilir bir ikili formatta değil, ya da buffer bozuk (kısaltılmış, yanlış kodlama veya ham baytlar yerine base64).

Tanı:

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

Düzelt: Metin tabanlı formatlar (OBJ, COLLADA) için, formatı ipucu vermek üzere uygun seçenek sınıfını geçin:

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

Çıktı GLB, 3D görüntüleyicilerde JSON olarak açılıyor

Temel neden: GltfSaveOptions.binaryMode varsayılan olarak false, üreterek .gltf JSON çıktısı, çıktı dosya adı … olduğunda bile .glb.

Düzeltme: Açıkça ayarla binaryMode = true:

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

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

STL çıktısında dilimleyicide renk veya malzeme verisi yoktur

Temel neden: STL formatı, standart spesifikasyonunda malzemeleri veya rengi desteklemez. Renk destekli dilimleyiciler, tarafından desteklenmeyen özel uzantılar kullanır @aspose/3d.

Düzeltme: Bunun yerine 3MF’ye dışa aktarın, renk ve malzeme meta verilerini destekler:

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

TypeScript Derleme Hataları

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

Temel neden: Entity temel sınıftır; Mesh geometri özelliklerine sahip somut tiptir. Bir instanceof mesh’e özgü üyelere erişmeden önce bir guard gerekir.

Düzelt:

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'

Temel neden: getChildNode() döndürür Node | null. TypeScript sıkı modu, null durumunu ele almanızı gerektirir.

Düzelt:

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

Cannot find name 'GltfSaveOptions'

Temel neden: GltfSaveOptions alt-yol modülünde bulunur @aspose/3d/formats/gltf, paket kökünde değil.

Düzelt: Alt-yoldan içe aktar:

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

Bellek ve Performans Sorunları

İşlem, büyük FBX dosyalarında bellek tükeniyor

Temel neden: Çok büyük FBX dosyaları (>200 MB) önemli miktarda yığın tahsis eder. Node.js varsayılan yığını 64-bit sistemlerde ~1.5 GB’dir ancak çoklu sahne dosyaları için yeterli olmayabilir.

Düzeltme: Node.js yığın boyutunu artırın:

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

Ayrıca bellek kısıtlıyken dosyaları paralel yerine sıralı işleyin:

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
}

Ayrıca Bakınız

 Türkçe