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();
                }
            }
        }
Example #2
0
        public FloorMap(Device device)
        {
            mParser = new MqoParser(device);
            MqoModel model = getModelInstance(0,0);
            position = new FloorMapPosition(model);

            effect = EffectRepository.getInstance().getEffect(".\\resources\\fx\\selectedObj.fx");
        }
        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,