איך לתקן שגיאות מודל תלת‑ממדי ב‑TypeScript
מדריך זה מכסה את השגיאות הנפוצות ביותר בעת השימוש ב @aspose/3d ל- TypeScript ו-Node.js, עם תיקונים מעשיים לכל אחד.
מדריך שלב‑אחר‑שלב
שלב 1: אימות ההתקנה והגרסאות
ודא שאתה משתמש בגרסת Node.js נתמכת (18, 20 או 22) והחבילה מותקנת:
node --version # Must be v18 or later
npm list @aspose/3d # Should show the installed versionאם החבילה לא נמצאה, התקן מחדש:
npm install @aspose/3dשלב 2: תיקון שגיאות פתרון מודול
שגיאה: Cannot find module '@aspose/3d/formats/obj'
ייבוא תתי‑נתיב דורש ייצוא חבילות ב‑Node.js 12.7+. ב‑TypeScript, הגדר את פתרון המודול הנכון:
// tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"moduleResolution": "node16",
"strict": true
}
}לפרויקטים של ESM, השתמש ב "module": "ES2022" ו "moduleResolution": "bundler".
שלב 3: ניפוי סצנה ריקה לאחר טעינה
אם scene.rootNode.childNodes ריק לאחר scene.open():
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
console.log(`Child nodes: ${scene.rootNode.childNodes.length}`);גורמים נפוצים:
- אפשרויות פורמט שגויות: עבור OBJ, תמיד להעביר
new ObjLoadOptions(). שימוש באפשרויות כלליות יכול למנוע זיהוי פורמט. - נתיב הקובץ שגוי: הספרייה טוענת בשקט סצנה ריקה אם הקובץ לא נמצא:
import * as fs from 'fs';
const filePath = 'model.obj';
if (!fs.existsSync(filePath)) {
throw new Error(`File not found: ${filePath}`);
}
const scene = new Scene();
scene.open(filePath, new ObjLoadOptions());- קובץ OBJ משתמש בסיומות שורה לא סטנדרטיות: פתחו בעורך טקסט וודאו שהקובץ תקין.
שלב 4: תיקון בעיות במערכת הקואורדינטות
מודלים עשויים להיראות מסובבים, משוקפים או ממדים באופן שגוי עקב הבדלים במערכת הקואורדינטות בין הפורמטים.
יד ימין מול יד שמאל, Y למעלה מול Z למעלה:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const options = new ObjLoadOptions();
options.flipCoordinateSystem = true; // Swap Y and Z axes
const scene = new Scene();
scene.open('model.obj', options);בעיות קנה מידה (למשל, STL במילימטרים מול glTF במטרים):
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const options = new ObjLoadOptions();
options.scale = 0.001; // Convert millimeters to meters
const scene = new Scene();
scene.open('model.obj', options);שלב 5: טיפול בבעיות זיכרון עם קבצים גדולים
לקבצים הגדולים מ‑100 מ״ב, הגדירו את גודל ערמת ה‑Node.js:
node --max-old-space-size=4096 convert.jsאו הגדר זאת ב package.json:
{
"scripts": {
"convert": "node --max-old-space-size=4096 dist/convert.js"
}
}עבדו קבצים גדולים אחד אחרי השני במקום במקביל כדי למנוע בעיות זיכרון בשיא.
התייחסות לשגיאות נפוצות
| שגיאה | סיבה סבירה | תיקון |
|---|---|---|
Cannot find module '@aspose/3d/formats/obj' | תצורת פתרון מודול | הגדר moduleResolution: node16 ב‑tsconfig |
scene.rootNode.childNodes ריק | אפשרויות שגויות או קובץ לא נמצא | בדוק את נתיב הקובץ; העבר את הנכון *LoadOptions |
| הגאומטריה נראית משקפת/הפוכה | אי התאמה במערכת הקואורדינטות | קבוצה flipCoordinateSystem = true |
| הגאומטריה נראית בקנה מידה שגוי | הבדל יחידות בין פורמטים | קבוצה scale באפשרויות הטעינה |
ENOMEM או תהליך נקטע | זיכרון בלתי מספיק לקובץ גדול | הגדל --max-old-space-size |
שגיאת סוג TypeScript ב node.entity | סוג ישות רחב | השתמש instanceof Mesh מגן |
שאלות נפוצות
איך לדווח על באג ניתוח?
פתח בעיה ב מאגר GitHub עם שם הפורמט, קובץ מינימלי שניתן לשחזר, והודעת השגיאה המדויקת.
למה חלק מה‑meshes אין להם נקודות שליטה?
חלק מקבוצות ה‑OBJ מגדירות רק קואורדינטות מרקם או נורמליות ללא נתוני מיקום. בדוק mesh.controlPoints.length > 0 לפני העיבוד.
הספרייה מתעלמת בשקט משגיאות ניתוח. איך ניתן לאתר אותן?
עטוף scene.open() בבלוק try/catch. אם הקובץ פגום, הספרייה עשויה לזרוק חריגה או לטעון סצנה חלקית:
try {
scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
console.error('Failed to load:', err);
}