Three.js STLLoader を使用して、STL ファイルからジオメトリを読み取ってキャッシュしようとしています。イベント ループ コールバックを使用してデータを取得しています (STLLoader の例と同様)。外部変数「cgeom」に格納するつもりです。ただし、ジオメトリはイベント CB の外では使用できず、cgeom が定義されていないようです (実行時エラー: cgeom が定義されていません)。
<!DOCTYPE html>
<html>
<head>
<title>Thee.js STL geometry caching test</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
</head>
<body>
<script src="js/three.min.js"></script>
<script src="js/STLLoader.js"></script>
<script>
alert("We'are here");
var cgeom;
function load_geometry( stl_file ) {
var loader = new THREE.STLLoader();
loader.addEventListener( 'load', function ( event ) {
cgeom = event.content;
alert('inside listener - vertices: ' + cgeom.vertices.length);
} );
loader.load(stl_file);
alert('inside load_geometry - vertices: ' + cgeom.vertices.length); // error - cgeom is not defined
}
load_geometry('./data/a90.stl');
alert('inside load_geometry - vertices: ' + cgeom.vertices.length); // error - cgeom is not defined
</script>
</body>
</html>
すべての例は、ジオメトリからメッシュを作成し、すぐにシーンに追加します。それは私がしたいことではありません。シーン内の別のメッシュを置き換えるために、後で追加する必要があります。そのため、最初にキャッシュしたいと思います。
前もってありがとう、サイモン
PS 私は JS の専門家ではありませんが、10 年以上の C++ と Java の経験があります。