چگونه خطاهای مدل 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}`);دلایل رایج:
- گزینههای فرمت نادرست: برای 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);مرحله ۵: مدیریت مشکلات حافظه با فایلهای بزرگ
برای فایلهای بزرگتر از ۱۰۰ مگابایت، اندازه 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);
}