JSFiddle - React, Tailwind, and code Playground

by spacorum

HTML

<script src="https://threejs.org/build/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
<script src="https://threejs.org/examples/js/loaders/STLLoader.js"></script>

CSS

body {
  overflow: hidden;
  margin: 0;
}

JavaScript

console.clear();
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.setScalar(5);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

var controls = new THREE.OrbitControls(camera, renderer.domElement);

var loader = new THREE.STLLoader();
loader.load('https://threejs.org/examples/models/stl/ascii/slotted_disk.stl', function(geometry) {
  var material = new THREE.MeshNormalMaterial({side: THREE.DoubleSide});
  var mesh = new THREE.Mesh(geometry, material);
  scene.add(mesh);
  console.log(isModelPrintable(mesh));
});

function isModelPrintable(mesh) {

  var minDist = 0.6;

  var raycaster = new THREE.Raycaster();
  var intersects = [];

  var pos = mesh.geometry.attributes.position;

  var ori = new THREE.Vector3();
  var dir = new THREE.Vector3();
  var trc = new THREE.Vector3();
  var a = new THREE.Vector3(),
    b = new THREE.Vector3(),
    c = new THREE.Vector3(),
    midPoint = new THREE.Vector3(),
    tri = new THREE.Triangle();
  var closest = new THREE.Vector3();
  
  console.log(pos);

  var faces = pos.count / 3;
  for (let i = 0; i < faces; i++) {
    a.fromBufferAttribute(pos, i * 3 + 0);
    b.fromBufferAttribute(pos, i * 3 + 1);
    c.fromBufferAttribute(pos, i * 3 + 2);
    //console.warn(a); //console.log(i); console.log(pos.array[i]);
    //return;
    
    tri.set(a, b, c);
    tri.getMidpoint(ori);
    tri.getNormal(dir)
    raycaster.set(ori, dir.negate());
    intersects = raycaster.intersectObject(mesh);
		//minDist = Math.min(minDist, intersects[intersects.length > 1 ? 1 : 0].distance);
    
    
    var intersected = (intersects.length > 1);
		minDist = Math.min(minDist, intersects[intersected? 1 : 0].distance);
    if(intersected){
    	console.warn("cara["+i+"] intersectada en "+minDist.toFixed(3)+" mm");
      //mesh.geometry.faces[i].materialIndex =...