static public void CreateMesh() { if (Selection.objects == null) { return; } var qMqoPath = Selection.objects .Select(o => AssetDatabase.GetAssetPath(o)) .Where(path => Path.GetExtension(path) == ".mqo") ; foreach (var path in qMqoPath) { using (var f = new StreamReader(path)) { var s = f.ReadToEnd(); var data = MqoParser.ConvertToObjectsData(s); var meshes = createMesh(data); foreach (var m in meshes) { var folderPath = Path.GetDirectoryName(path); AssetDatabase.CreateAsset(m, $"{folderPath}/{m.name}.asset"); } AssetDatabase.Refresh(); } } }
static public void CreateMachingCubesAsset() { if (Selection.objects == null) { return; } var qMqoPath = Selection.objects .Select(o => AssetDatabase.GetAssetPath(o)) .Where(path => Path.GetExtension(path) == ".mqo") ; var mqopath = qMqoPath.First(); using (var f = new StreamReader(mqopath)) { var s = f.ReadToEnd(); var objdata = MqoParser.ConvertToObjectsData(s); var baseVtxList = MarchingCubesDataBuilder.MakeBaseVtxList(); var cubeIdAndIndicesList = MarchingCubesDataBuilder.ConvertObjectDataToMachingCubesData(objdata, baseVtxList); var cubeIdAnd4TrianglesNormalsList = ConvertMqoForMarchingCubes.calculateNormals(cubeIdAndIndicesList, baseVtxList); var cubeIdAnd12VerticesNormalsList = ConvertMqoForMarchingCubes.calculate12VerticesNormalsPerCubePattern(cubeIdAndIndicesList, cubeIdAnd4TrianglesNormalsList); //// 確認 //using( var wf = new StreamWriter( @"C:\Users\abarabone\Desktop\mydata\mc.txt" ) ) //{ // ////cubeIdAndTriangleNormalsList.SelectMany( x => x.normals ).GroupBy( x => x ).ForEach( n => wf.WriteLine( n.Key ) ); // //(from x in cubeIdAnd12VerticesNormalsList group x by x.normals.Select(n=>math.dot(n,n)).ToArray()).ForEach( x => draw12(x.First()) ); // //void draw12( (byte cubeId, Vector3[] normals) x ) // //{ // // wf.WriteLine( $"{x.cubeId} {string.Join(", ", x.normals)}" ); // //} // //var a = // //cubeIdAndIndicesList // // .Select( x => x.cubeId ) // // .Select( x => // // new byte[] { // // x, // // //(byte)( ( x & 0x0f ) << 4 | ( x & 0xf0 ) >> 4 ), // // (byte)( ( x & 0b_0011_0011 ) << 2 | ( x & 0b_1100_1100 ) >> 2 ), // // //(byte)( ( x & 0b_0101_0101 ) << 1 | ( x & 0b_1010_1010 ) >> 1 ), // // } // // ) // // .Select( x => x.OrderBy( b => b ) ) // // //.Select( x => string.Join( ", ", x ) ) // // //.GroupBy( x => x.First() ) // // //.Select( x => x.Key ) // // .OrderBy( x => x.First() ) // // //.Select( x => string.Join( ", ", x ) ) // // .ToArray() // // ; // //wf.WriteLine( a.GroupBy(x=>x.First()).Count() ); // //a.ForEach( x => wf.WriteLine( string.Join( ", ", x ) ) ) // //; //} save_(Selection.objects, cubeIdAndIndicesList, cubeIdAnd4TrianglesNormalsList, cubeIdAnd12VerticesNormalsList, baseVtxList); } return; void save_( UnityEngine.Object[] selectedObjects, (byte cubeId, int[] indices)[] cubeIdsAndIndexLists,