چگونه خطاهای مدل 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}`);دلایل رایج:
گزینههای قالب نادرست: برای 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 از پایان خطوط غیر استاندارد استفاده میکند: در یک ویرایشگر متن باز کنید و اطمینان حاصل کنید که فایل معتبر است.
مرحله ۴: رفع مشکلات سیستم مختصات
مدلها ممکن است به دلیل تفاوتهای سیستم مختصات بین فرمتها بهصورت چرخیده، آینهای یا مقیاسگذاری نادرست ظاهر شوند.
دست راست در مقابل دست چپ، 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);
}