چگونه خطاهای مدل 3D را در TypeScript رفع کنیم

چگونه خطاهای مدل 3D را در TypeScript رفع کنیم

این راهنما رایج‌ترین خطاها هنگام استفاده از @aspose/3d برای TypeScript و Node.js را پوشش می‌دهد و برای هر کدام راه‌حل‌های عملی ارائه می‌کند.

راهنمای گام به گام

مرحله ۱: تأیید نصب و نسخه‌ها

اطمینان حاصل کنید که از نسخه پشتیبانی‌شده 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

مرحله ۲: رفع خطاهای حل ماژول

خطا: 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" استفاده کنید.


مرحله ۳: اشکال‌زدایی یک صحنه خالی پس از بارگذاری

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

دلایل رایج:

  1. گزینه‌های قالب نادرست: برای OBJ، همیشه new ObjLoadOptions() را پاس کنید. استفاده از گزینه‌های عمومی می‌تواند از تشخیص قالب جلوگیری کند.

  2. مسیر فایل اشتباه است: کتابخانه به‌صورت ساکت یک صحنه خالی را بارگذاری می‌کند اگر فایل یافت نشود:

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());
  1. فایل OBJ از پایان خطوط غیر استاندارد استفاده می‌کند: در یک ویرایشگر متن باز کنید و اطمینان حاصل کنید که فایل معتبر است.

مرحله ۴: رفع مشکلات سیستم مختصات

مدل‌ها ممکن است به دلیل تفاوت‌های سیستم مختصات بین فرمت‌ها به‌صورت چرخیده، آینه‌ای یا مقیاس‌گذاری نادرست ظاهر شوند.

دست راست در مقابل دست چپ، Y‑up در مقابل Z‑up:

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: مدیریت مشکلات حافظه با فایل‌های بزرگ

برای فایل‌های بزرگتر از ۱۰۰ مگابایت، اندازهٔ heap 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 استفاده کنید

سوالات متداول

چگونه یک باگ تجزیه را گزارش دهم؟

یک Issue در مخزن GitHub باز کنید و نام فرمت، یک فایل قابل بازتولید حداقل، و پیام خطای دقیق را ارائه دهید.

چرا برخی مش‌ها نقطه کنترل صفر دارند؟

برخی از گروه‌های OBJ فقط مختصات بافت یا نرمال‌ها را بدون داده‌های موقعیت تعریف می‌کنند. قبل از پردازش، mesh.controlPoints.length > 0 را بررسی کنید.

کتابخانه به‌صورت ساکت خطاهای تجزیه را نادیده می‌گیرد. چگونه می‌توانم آن‌ها را شناسایی کنم؟

scene.open() را در یک بلوک try/catch بپیچید. اگر فایل خراب باشد، کتابخانه ممکن است یک استثنا پرتاب کند یا یک صحنه جزئی را بارگذاری کند:

try {
    scene.open('model.obj', new ObjLoadOptions());
} catch (err) {
    console.error('Failed to load:', err);
}

همچنین ببینید

 فارسی