/
counterbugtech
/
KontrBugCAD
Обзор
Документация
Войти
/
counterbugtech
/
KontrBugCAD
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
js/utils/ModelPreviewGenerator.js
1 строка
1 KB
counterbugtech
first commit
04 мар 2026, 11:25
Верифицирован
04 мар 2026, 11:25
b2afbd6
Код
Авторство
О чём код?
import*as THREE from"three";export class ModelPreviewGenerator{constructor(){this.renderer=null}_ensureRenderer(){return this.renderer||(this.renderer=new THREE.WebGLRenderer({antialias:!0,preserveDrawingBuffer:!0,alpha:!0}),this.renderer.setSize(256,256),this.renderer.setClearColor(0,0)),this.renderer}_createTempScene(){const e=new THREE.Scene,r=new THREE.AmbientLight(16777215,.8);e.add(r);const t=new THREE.DirectionalLight(16777215,1.2);t.position.set(1,2,3),e.add(t);const n=new THREE.DirectionalLight(16777215,.8);return n.position.set(-2,1,-2),e.add(n),e}_setupCameraForObject(e,r,t=1.2){const n=(new THREE.Box3).setFromObject(r),s=n.getCenter(new THREE.Vector3),i=n.getSize(new THREE.Vector3),o=Math.max(i.x,i.y,i.z)*t,a=new THREE.PerspectiveCamera(45,1,.1,1e3),c=Math.PI/4,d=Math.PI/3,h=new THREE.Vector3(o*Math.sin(d)*Math.cos(c),o*Math.cos(d),o*Math.sin(d)*Math.sin(c));return a.position.copy(s.clone().add(h)),a.lookAt(s),a}async generatePreview(e,r=256,t=256){const n=this._createTempScene(),s=e.clone();n.add(s);const i=this._setupCameraForObject(n,s),o=this._ensureRenderer();o.setSize(r,t),o.render(n,i);return o.domElement.toDataURL("image/png")}dispose(){this.renderer&&(this.renderer.dispose(),this.renderer=null)}}