// Descendants must use this on all GameObjects representing layers protected void AddLayerComponent(GameObject go, ModelLayerInfo layerInfo) { ModelLayer layer = go.AddComponent <ModelLayer>(); layer.Caption = layerInfo.Caption; layer.Simulation = CheckIfSimulation(layerInfo.DataType); layer.DataType = GetDataType(layerInfo.DataType); }
protected override void ImportLayer(ModelLayerInfo layerInfo) { string objectName = Info.Caption + "_" + Path.GetFileName(layerInfo.Directory); layerImporter.ImportData(layerInfo, objectName); AddLayerComponent(layerImporter.ModelGameObject, layerInfo); SaveFilesForExport(layerInfo, objectName, layerImporter.ModelMesh.Get(), layerImporter.ModelGameObject); }
protected override void ImportLayer(ModelLayerInfo layerInfo) { string objectName = Info.Caption + "_" + Path.GetFileName(layerInfo.Directory); GameObject modelGameObject = GameObject.CreatePrimitive(PrimitiveType.Cube); ImportData(modelGameObject, layerInfo); AddLayerComponent(modelGameObject, layerInfo); SaveFilesForExport(modelGameObject, layerInfo, objectName); }
// Exports finished GameObject to a .prefab private void CreatePrefab(ModelLayerInfo layerInfo, GameObject modelGameObject, string objectName) { string rootAssetsDir = AssetDirs.TempAssetsDir + "/" + Info.Caption; AssetDirs.CreateAssetDirectory(rootAssetsDir); string prefabPath = rootAssetsDir + "/" + objectName + ".prefab"; AssetPaths.Add(prefabPath); PrefabUtility.SaveAsPrefabAsset(modelGameObject, prefabPath); }
private void ImportData(GameObject modelGameObject, ModelLayerInfo layerInfo) { // FIXME: Scale of display cube should depend on scale of data and should be set at load !!! modelGameObject.transform.localScale = new Vector3(0.9f, 0.9f, 0.1f); VolumetricMedata metadata; using (StreamReader r = new StreamReader(layerInfo.Directory + @"\" + "metadata.json")) { string json = r.ReadToEnd(); metadata = JsonConvert.DeserializeObject <VolumetricMedata>(json); } VolumetricModelLayer modelLayer = modelGameObject.AddComponent <VolumetricModelLayer>(); modelLayer.Width = metadata.width; modelLayer.Height = metadata.height; modelLayer.Depth = metadata.depth; modelLayer.Channels = metadata.channels; }
protected override void ImportLayer(ModelLayerInfo layerInfo) { string objectName = Info.Caption + "_" + Path.GetFileName(layerInfo.Directory); string absolutePath = layerInfo.Directory + "/" + layerInfo.AssetFileName; string objectPath = "Assets" + absolutePath.Substring(Application.dataPath.Length); GameObject modelGameObject = AssetDatabase.LoadAssetAtPath <GameObject>(@"Test Models/Skull/skull_body"); if (modelGameObject == null) { throw Log.ThrowError("Cannot import model from " + objectPath, new IOException()); } GameObject modelInstance = UnityEngine.Object.Instantiate(modelGameObject); AddLayerComponent(modelInstance, layerInfo); CreatePrefab(layerInfo, modelInstance, objectName); if (layerInfo.UseAsIcon) { LayerAutomaticIconGenerate(modelInstance); } GameObject.DestroyImmediate(modelInstance); }
// Saves imported model to a Unity-friendly files, to be put in AssetBundles. private void SaveFilesForExport(ModelLayerInfo layerInfo, string objectName, Mesh modelMesh, GameObject modelGameObject) { string rootAssetsDir = AssetDirs.TempAssetsDir + "/" + Info.Caption; AssetDirs.CreateAssetDirectory(rootAssetsDir); string meshPath = rootAssetsDir + "/" + objectName + ".asset"; AssetPaths.Add(meshPath); AssetDatabase.CreateAsset(modelMesh, meshPath); string gameObjectPath = rootAssetsDir + "/" + objectName + ".prefab"; AssetPaths.Add(gameObjectPath); PrefabUtility.SaveAsPrefabAsset(modelGameObject, gameObjectPath); if (layerInfo.UseAsIcon) { PrepareForPreview(modelGameObject); LayerAutomaticIconGenerate(modelGameObject); } }
// Saves imported model to a Unity-friendly files, to be put in AssetBundles. private void SaveFilesForExport(GameObject modelGameObject, ModelLayerInfo layerInfo, string objectName) { string rootAssetsDir = AssetDirs.TempAssetsDir + "/" + Info.Caption; AssetDirs.CreateAssetDirectory(rootAssetsDir); Mesh modelMesh = modelGameObject.GetComponent <MeshFilter>().mesh; string meshPath = rootAssetsDir + "/" + objectName + ".asset"; AssetPaths.Add(meshPath); AssetDatabase.CreateAsset(modelMesh, meshPath); string rawDataPath = layerInfo.Directory + @"\" + "data.raw"; // This is strange to copy data first as Asset then copy asset to build dir string tmpDataPath = rootAssetsDir + "/tmp_data.bytes"; string dataPath = rootAssetsDir + "/" + objectName + "_data.bytes"; if (File.Exists(tmpDataPath)) { FileUtil.DeleteFileOrDirectory(tmpDataPath); } FileUtil.CopyFileOrDirectory(rawDataPath, tmpDataPath); AssetPaths.Add(dataPath); AssetDatabase.Refresh(); AssetDatabase.CopyAsset(tmpDataPath, dataPath); string gameObjectPath = rootAssetsDir + "/" + objectName + ".prefab"; AssetPaths.Add(gameObjectPath); PrefabUtility.SaveAsPrefabAsset(modelGameObject, gameObjectPath); if (layerInfo.UseAsIcon) { PrepareForPreview(modelGameObject); LayerAutomaticIconGenerate(modelGameObject); } }
// Imports layer (with body or simulation blendshapes). // May also set layerAutomaticIcon. abstract protected void ImportLayer(ModelLayerInfo layerInfo);