समस्या निवारण गाइड्स
यह पृष्ठ उपयोग करते समय मिलने वाली सबसे सामान्य त्रुटियों को कवर करता है @aspose/3d TypeScript और Node.js प्रोजेक्ट्स में, मूल कारण की व्याख्याओं और सत्यापित समाधान के साथ।.
मॉड्यूल रिज़ॉल्यूशन त्रुटियाँ
Error: Cannot find module '@aspose/3d/formats/obj'
मूल कारण: TypeScript की मॉड्यूल रिज़ॉल्यूशन रणनीति Node.js-शैली के सब-पाथ एक्सपोर्ट्स को समर्थन नहीं देती (exports में package.json) जब तक नहीं moduleResolution को सेट किया गया है node या node16.
समाधान: सेट करें moduleResolution को "node" अपने tsconfig.json:
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"strict": true
}
}यदि आप TypeScript 5.x के साथ उपयोग कर रहे हैं "module": "node16" या "module": "nodenext", उपयोग करें "moduleResolution": "node16" मेल खाने के लिए।.
SyntaxError: Cannot use import statement in a module
मूल कारण: संकलित जावास्क्रिप्ट को चलाया जा रहा है require() सेमांटिक्स लेकिन आउटपुट में ES मॉड्यूल import सिंटैक्स; यह तब होता है जब module को सेट किया गया है es2020 या esnext लेकिन Node.js रनटाइम CommonJS की अपेक्षा करता है।.
समाधान: उपयोग करें "module": "commonjs" में tsconfig.json और संकलित को चलाएँ .js फ़ाइलों को … के साथ node सीधे:
{
"compilerOptions": {
"module": "commonjs",
"outDir": "./dist"
}
}फिर संकलित करें और चलाएँ:
npx tsc
node dist/main.jsError: Cannot find module '@aspose/3d'
मूल कारण: पैकेज स्थापित नहीं है, या node_modules : पुराना है।.
: सुधारें:
npm install @aspose/3dस्थापना की जाँच करें:
node -e "const { Scene } = require('@aspose/3d'); console.log('OK', new Scene().constructor.name);"लोड करने के बाद खाली सीन
: सीन लोड होता है लेकिन rootNode.childNodes : खाली है
: मूल कारण (1): फ़ाइल फ़ॉर्मेट सभी ज्योमेट्री को सीधे (पर) रखता है rootNode.entity : बच्चा नोड्स के रूप में नहीं रखता है। यह सिंगल‑मेश STL फ़ाइलों में सामान्य है।.
: निदान:
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}`);: सुधारें: शुरू से ट्रैवर्स करें scene.rootNode : स्वयं, केवल उसके बच्चों को नहीं:
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);: मूल कारण (2): फ़ाइल पथ गलत है या फ़ाइल शून्य बाइट्स की है। कॉल करने से पहले जांचें कि फ़ाइल मौजूद है और खाली नहीं है। 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 लोड करने के बाद मैटेरियल्स सूची खाली है
: मूल कारण: डिफ़ॉल्ट रूप से सामग्री लोडिंग अक्षम है ObjLoadOptions.: लाइब्रेरी जियोमेट्री को बिना पढ़े लोड करती है .mtl : साइडकार फ़ाइल।.
समाधान: सेट करें 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);साथ ही सुनिश्चित करें कि .mtl फ़ाइल उसी निर्देशिका में है जैसा कि .obj फ़ाइल, क्योंकि लाइब्रेरी इसे सापेक्ष रूप से हल करती है .obj पथ।.
फ़ॉर्मेट और I/O त्रुटियाँ
openFromBuffer एक अपरिचित फ़ॉर्मेट त्रुटि फेंकता है
मूल कारण: बफ़र सामग्री एक पहचानने योग्य बाइनरी फ़ॉर्मेट नहीं है, या बफ़र भ्रष्ट है (कटा हुआ, गलत एन्कोडिंग, या कच्चे बाइट्स के बजाय base64)।.
निदान:
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
समाधान: टेक्स्ट-आधारित फ़ॉर्मेट्स (OBJ, COLLADA) के लिए, फ़ॉर्मेट का संकेत देने हेतु उपयुक्त विकल्प क्लास पास करें:
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
scene.openFromBuffer(buffer, new ObjLoadOptions());आउटपुट GLB 3D व्यूअर्स में JSON के रूप में खुलता है
मूल कारण: GltfSaveOptions.binaryMode डिफ़ॉल्ट रूप से false, उत्पन्न करता है .gltf JSON आउटपुट, यहाँ तक कि जब आउटपुट फ़ाइलनाम है .glb.
समाधान: स्पष्ट रूप से सेट करें binaryMode = true:
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('output.glb', opts);STL आउटपुट में स्लाइसर में कोई रंग या सामग्री डेटा नहीं होता है
मूल कारण: STL फ़ॉर्मेट अपने मानक विनिर्देश में सामग्री या रंग का समर्थन नहीं करता है। रंग-सक्षम स्लाइसर स्वामित्व वाले एक्सटेंशन का उपयोग करते हैं जो द्वारा समर्थित नहीं हैं @aspose/3d.
समाधान: इसके बजाय 3MF में निर्यात करें, जो रंग और सामग्री मेटाडेटा का समर्थन करता है:
scene.save('output.3mf');TypeScript संकलन त्रुटियाँ
Property 'controlPoints' does not exist on type 'Entity'
मूल कारण: Entity बेस क्लास है; Mesh ज्यामिति गुणों वाला ठोस प्रकार है। आपको एक instanceof मेश-विशिष्ट सदस्यों तक पहुँचने से पहले गार्ड चाहिए।.
समाधान:
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'
मूल कारण: getChildNode() वापस देता है Node | null. TypeScript सख्त मोड आपको null केस को संभालने की आवश्यकता रखता है।.
समाधान:
const child = node.getChildNode('wheel');
if (!child) throw new Error('Node "wheel" not found');
// child is now Node, not null
Cannot find name 'GltfSaveOptions'
मूल कारण: GltfSaveOptions सब-पाथ मॉड्यूल में है @aspose/3d/formats/gltf, पैकेज रूट नहीं है।.
समाधान: सब-पाथ से इम्पोर्ट करें:
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';मेमोरी और प्रदर्शन संबंधी समस्याएँ
प्रक्रिया बड़े FBX फ़ाइलों के साथ मेमोरी समाप्त हो जाती है
मूल कारण: बहुत बड़े FBX फ़ाइलें (>200 MB) काफी हीप आवंटित करती हैं। Node.js का डिफ़ॉल्ट हीप 64-बिट सिस्टम पर लगभग 1.5 GB है लेकिन मल्टी‑सीन फ़ाइलों के लिए पर्याप्त नहीं हो सकता।.
समाधान: Node.js हीप आकार बढ़ाएँ:
node --max-old-space-size=8192 dist/convert.jsजब मेमोरी सीमित हो, तो फ़ाइलों को समानांतर के बजाय क्रमिक रूप से प्रोसेस करें:
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
}संबंधित देखें
- FAQ: सामान्य प्रश्नों के त्वरित उत्तर
- मॉडल लोडिंग: लोडिंग पैटर्न और विकल्प
- रेंडरिंग और निर्यात: निर्यात विकल्प और बफ़र पाइपलाइन
- API अवलोकन: सभी क्लास और मॉड्यूल