Example #1
0
        /// <summary>
        /// Carga dinamicamente todas las dll de ejemplos de la carpeta de ejemplos
        /// </summary>
        /// <param name="exampleDir"></param>
        /// <returns></returns>
        public List <TgcExample> loadExamples(string exampleDir)
        {
            //Buscar todas las dll que esten en el directorio de ejemplos, evitando las creadas de DEBUG Y BIN por parte del IDE
            List <string> exampleFiles = getExampleFiles(exampleDir, DIR_SKIP_LISP);

            List <TgcExample> examples = new List <TgcExample>();

            foreach (string file in exampleFiles)
            {
                try
                {
                    Assembly assembly = Assembly.LoadFile(file);
                    foreach (Type type in assembly.GetTypes())
                    {
                        if (!type.IsClass || type.IsNotPublic || type.IsAbstract)
                        {
                            continue;
                        }

                        /*
                         * Type[] interfaces = type.GetInterfaces();
                         * if (((IList)interfaces).Contains(typeof(TgcExample)))
                         * {
                         */

                        if (type.BaseType.Equals(typeof(TgcExample)))
                        {
                            object     obj     = Activator.CreateInstance(type);
                            TgcExample example = (TgcExample)obj;
                            examples.Add(example);

                            //cargar path del ejemplo
                            example.setExampleDir(file.Substring(0, file.LastIndexOf("\\") + 1));
                        }
                    }
                }
                catch (Exception e)
                {
                    GuiController.Instance.Logger.logError("No se pudo cargar la dll: " + file, e);
                }
            }

            return(examples);
        }
Example #2
0
        /// <summary>
        /// Deja de ejecutar el ejemplo actual
        /// </summary>
        internal void stopCurrentExample()
        {
            if (currentExample != null)
            {
                currentExample.close();
                tgcD3dDevice.resetWorldTransofrm();
                Logger.log("Ejemplo " + currentExample.getName() + " terminado");
                currentExample = null;
                elapsedTime = -1;

                if (FullScreenEnable && fullScreenPanel.Visible)
                {
                    closeFullScreenPanel();
                }
            }
        }
Example #3
0
        /// <summary>
        /// Arranca a ejecutar un ejemplo.
        /// Para el ejemplo anterior, si hay alguno.
        /// </summary>
        /// <param name="example"></param>
        internal void executeExample(TgcExample example)
        {
            stopCurrentExample();
            userVars.clearVars();
            modifiers.clear();
            resetDefaultConfig();
            fpsCamera.resetValues();
            rotCamera.resetValues();
            thirdPersonCamera.resetValues();

            //Ejecutar init
            try
            {
                example.init();

                //Ver si abrimos una ventana para modo FullScreen
                if (FullScreenEnable)
                {
                    mainForm.removePanel3dFromMainForm();
                    fullScreenPanel.Controls.Add(panel3d);
                    fullScreenPanel.Show(mainForm);
                }

                this.currentExample = example;
                panel3d.Focus();
                mainForm.setCurrentExampleStatus("Ejemplo actual: " + example.getName() );
                Logger.log("Ejecutando ejemplo: " + example.getName(), Color.Blue);
            }
            catch (Exception e)
            {
                Logger.logError("Error en init() de ejemplo: " + example.getName(), e);

            }
        }