public IEnumerator ImportModel()
    {
        PiXYZImportSettings settings = target as PiXYZImportSettings;

        GameObject gameObject = settings.gameObject;    //Find the gameobject the script is attached to

        Vector3 eulerAngles = new Vector3() + gameObject.transform.rotation.eulerAngles;
        Vector3 scale       = new Vector3() + gameObject.transform.lossyScale;

        if (gameObject.transform.childCount > 0)
        {
            foreach (Transform child in gameObject.transform)
            {
                DestroyImmediate(child.gameObject);
            }
        }

        UnityEngine.Object prefab;
        prefab = PrefabUtility.CreateEmptyPrefab("Assets/3DModels/" + settings.settings.prefabName + ".prefab");

        loader = new PiXYZ4UnityLoader();

        loader.setSourceCoordinatesSystem(settings.settings.isRightHanded, settings.settings.isZUp, settings.settings.scaleFactor);
        double mapUV3dSize = settings.settings.mapUV ? settings.settings.mapUV3dSize : -1;

        loader.configure(settings.settings.orient, mapUV3dSize, settings.settings.treeProcess, settings.settings.useLods ? settings.settings.lodsMode : LODsMode.NONE, settings.settings.lodSettings, !settings.settings.splitTo16BytesIndex, settings.settings.useMergeFinalAssemblies);

        CoroutineNode coco = coroutineScheduler.StartCoroutine(loader.loadFileRuntime(gameObject, settings.settings.originalFilename, true, prefab));

        yield return(coco);

        PiXYZUtils.clearProgressBar();
        if (loader.getErrorMessage().Length > 0)
        {
            Debug.LogError("PiXYZAssetImporter: loader.loadfile failed");
        }
        else
        {
            Debug.Log("Success");
        }

#if UNITY_EDITOR
        foreach (UnityEngine.Object obj in loader.loadedObject)
        {
            AssetDatabase.AddObjectToAsset(obj, prefab);
        }
#endif

        gameObject.transform.Rotate(-gameObject.transform.rotation.eulerAngles);
        gameObject.transform.Rotate(eulerAngles);
        gameObject.transform.localScale = scale;
        PrefabUtility.ReplacePrefab(gameObject, prefab, ReplacePrefabOptions.ConnectToPrefab);
        loader = null;
    }
Example #2
0
    public void OnImportClicked()
    {
        //Checks if Folder Assets/3DModels exist, otherwise create it
        if (!AssetDatabase.IsValidFolder("Assets/3DModels"))
        {
            AssetDatabase.CreateFolder("Assets", "3DModels");
        }

        //Import CAD Model in Assets/PiXYZ/3DModels
        this.Close();
        importing = true;
        loader    = ScriptableObject.CreateInstance <PiXYZ4UnityLoader>();
        coroutineScheduler.StartCoroutine(ImportModel(OnImportFinished));
    }
Example #3
0
 public void OnImportFinished()
 {
     PiXYZUtils.clearProgressBar();
     //Display success PopUp
     if (loader.getErrorMessage().Length > 0)
     {
         EditorUtility.DisplayDialog("PiXYZImporter", "File import failed.\n\nReasons : " + loader.getErrorMessage(), "ok");
     }
     else
     {
         EditorUtility.DisplayDialog("PiXYZImporter", "File successfully imported in Scene.\nPrefab created in Assets/3DModels.", "ok");
     }
     loader    = null;
     frameSkip = 0;
     //window.Close();
     DestroyImmediate(this);
     importing       = false;
     isFileNameValid = false;
 }
    public void OnApplyClicked()
    {
        PiXYZImportSettings importSettings = target as PiXYZImportSettings;

        //Checks if file is still present
        if (!System.IO.File.Exists(importSettings.settings.originalFilename))
        {
            EditorUtility.DisplayDialog("PiXYZImporter", "Cannot reimport file.\n\nOriginal file " + Path.GetFileName(importSettings.settings.originalFilename) + " does not exist anymore in " + Path.GetDirectoryName(importSettings.settings.originalFilename), "ok");
            return;
        }

        //Checks if Folder Assets/3DModels exist, otherwise create it
        if (!AssetDatabase.IsValidFolder("Assets/3DModels"))
        {
            AssetDatabase.CreateFolder("Assets", "3DModels");
        }

        //Import CAD Model in Assets/PiXYZ/3DModels
        serializedObject.ApplyModifiedProperties();
        loader    = ScriptableObject.CreateInstance <PiXYZ4UnityLoader>();
        importing = true;
        coroutineScheduler.StartCoroutine(ImportModel());
    }
    public void LoadCAD(bool p_IsLastOne, int p_Index, int meshQuality, float scale, bool zUp, bool rightHanded)
    {
        if (!CheckCADLoader())
        {
            return;
        }

        isImporting = true;
        if (p_Index <= 1)
        {
            cadImportBeginTime = Time.realtimeSinceStartup;
        }

        if (ImportStarted != null)
        {
            ImportStarted();
        }

        coroutineScheduler = ScriptableObject.CreateInstance <CoroutineScheduler>();
        loader             = ScriptableObject.CreateInstance <PiXYZ4UnityLoader>();

        // LOAD CAD ===============
        coroutineScheduler.StartCoroutine(ImportModel(cadFileName, sceneRoot, p_IsLastOne, p_Index, meshQuality, scale, zUp, rightHanded));
    }
    IEnumerator ImportModel(string filePath, GameObject parentGameObject, bool p_IsLastOne, int p_Index, int meshQuality, float scale, bool zUp, bool rightHanded)
    {
        if (!File.Exists(filePath))
        {
            Debug.Log("CAD FILE HAS BEEN DELETED  " + filePath);
        }


        GameObject modelGameObject = new GameObject(Path.GetFileNameWithoutExtension(filePath));

        modelGameObject.transform.parent = parentGameObject.transform;


        bool  orient          = true;
        float mapUV3dSize     = 100.0f;
        int   treeProcessType = 0;



        List <PiXYZLODSettings> lodSettingsList = new List <PiXYZLODSettings>();

        lodSettingsList.Add(GetDefaultLODSettings(meshQuality));


        loader.setSourceCoordinatesSystem(rightHanded, zUp, scale);
        loader.configure(orient, mapUV3dSize, (TreeProcessType)treeProcessType, LODsMode.NONE, lodSettingsList, true, true);

        yield return(null);

        CoroutineNode _routine = coroutineScheduler.StartCoroutine(loader.loadFileRuntime(modelGameObject, filePath, false, null));

        yield return(_routine);

        while (!_routine.finished)
        {
            ;
        }

        loader = null;

        //add Unity Colliders to every GO that has a mesh
        //CreateUnityColliders(modelGameObject);

        //set the model as static by default
        modelGameObject.isStatic = true;

        isImporting     = false;
        cadImportTiming = Time.realtimeSinceStartup - cadImportBeginTime;

        Bounds tmp = getSize(parentGameObject.transform.GetChild(0).gameObject);

        modelGameObject.transform.localPosition = new Vector3(0 - tmp.center.x, (0.5f - tmp.center.y) - (tmp.size.y / 2), 0 - tmp.center.z);


        if (ImportEnded != null && p_IsLastOne == true)
        {
            ImportEnded();
        }
        Debug.Log("CAD loaded");

        coroutineScheduler.StopAllCoroutines();
        yield break;
    }