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

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

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

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

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

اطمینان حاصل کنید که از نسخه پشتیبانی‌شده Node.js (۱۸، ۲۰ یا ۲۲) استفاده می‌کنید و بسته نصب شده است:

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 نسخه ۱۲.۷ به بالا دارد. در 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);

مرحله ۵: مدیریت مشکلات حافظه با فایل‌های بزرگ

برای فایل‌های بزرگ‌تر از ۱۰۰ مگابایت، اندازه 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);
}

موارد مرتبط

 فارسی