Пример #1
0
        private void exportBtn_Click(object sender, EventArgs e)
        {
            SaveFileDialog dlg = new SaveFileDialog();

            dlg.DefaultExt = "*.emx";
            dlg.Filter     = "Ebatiano's ModelX(*.emx)|*.emx";

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                String ext = Path.GetExtension(dlg.FileName);
                foreach (var exporter in _exporters)
                {
                    if (ext.ToLowerInvariant() == exporter.SupportedFileExt)
                    {
                        using (Stream stream = dlg.OpenFile())
                        {
                            ModelX model = ApplyChanges(_model);
                            exporter.Export(stream, model);
                        }
                        return;
                    }
                }

                MessageBox.Show("No exporter avaliable to save file using specyfied format.");
            }
        }
Пример #2
0
        // CRUD,匿名委托风格

        /*
         *  Entity.From<T>()
         *      .Set/Where(Action<T> action)
         *      .Select(Action<T> action)
         *      .Insert/Delete/Update/ToList/ToSingle()
         *
         *  Entity.From<Model1>().Set(m => {
         *      m.IntValue = 2;
         *      m.StrValue = "abc";
         *  }).Insert();
         *  Entity.From<Model1>().Where(m => {
         *      m.IntValue = 2;
         *      m.StrValue = "abc";
         *  }).Delete();
         *  Entity.From<Model1>().Set(m => {
         *      m.StrValue = "abc";
         *  })
         *  .Where(m => {
         *      m.IntValue = 2;
         *  }).Update();
         */



        public void Test_实体CUD_匿名委托风格()
        {
            // 先删除之前测试可能遗留下来的数据
            Entity.From <ModelX>().Where(m => m.IntField = 1978).Delete();

            // 插入一条记录,只给2个字段赋值
            Entity.From <ModelX>()
            .Set(m => { m.IntField = 1978; m.StringField = "abc"; })
            .Insert();

            // 检验刚才插入的数据行
            ModelX m1 = Entity.From <ModelX>().Where(m => m.IntField = 1978).ToSingle();

            Assert.IsNotNull(m1);
            Assert.AreEqual("abc", m1.StringField);

            // 更新数据行,WHERE条件是IntField,要更新的字符是StringField
            Entity.From <ModelX>()
            .Set(m => m.StringField = "12345")
            .Where(m => m.IntField  = 1978)
            .Update();

            // 检验刚才更新的数据行,本次查询只加载一个字段StringField
            ModelX m2 = Entity.From <ModelX>()
                        .Where(m => m.IntField     = 1978)
                        .Select(m => m.StringField = null) // 只加载StringField字段
                        .ToSingle();

            Assert.IsNotNull(m2);
            Assert.AreEqual("12345", m2.StringField);
            Assert.AreEqual(0, m2.IntField);    // 没有加载这个字段


            // 再次插入一条记录,只给2个字段赋值
            Entity.From <ModelX>()
            .Set(m => { m.IntField = 1978; m.StringField = "www"; })
            .Insert();

            // 查询列表,应该包含本次测试插入的二条记录
            List <ModelX> list = Entity.From <ModelX>()
                                 .Where(m => m.IntField = 1978)
                                 // 下行代码指出结果需要包含哪些字段,只需要在语句中列出相应的属性即可,赋了什么值并不重要
                                 .Select(m => { m.IntField = 0; m.StringField = null; })
                                 .ToList();

            Assert.IsNotNull(list);
            Assert.AreEqual(2, list.Count);
            Assert.AreEqual("12345", list[0].StringField);
            Assert.AreEqual("www", list[1].StringField);

            // 根据“IntField = 1978”来删除,应该删除2条记录
            int rows = Entity.From <ModelX>().Where(m => m.IntField = 1978).Delete();

            Assert.AreEqual(2, rows);

            // 再查询一次,应该是没有记录了
            ModelX m3 = Entity.From <ModelX>().Where(m => m.IntField = 1978).ToSingle();

            Assert.IsNull(m3);
        }
Пример #3
0
        public static Object Load(String name)
        {
            String directory = Path.GetDirectoryName(name);

            EmxImporter importer = new EmxImporter();
            ModelX      model    = null;

            using (Stream stream = ContentLoader.Current.Open(name + ".emx"))
            {
                model = importer.Import(stream, (fn) =>
                {
                    return(ContentLoader.Current.Open(Path.Combine(directory, fn)));
                });
            }

            foreach (var set in model.MaterialsSets)
            {
                foreach (var material in set)
                {
                    if (!String.IsNullOrWhiteSpace(material.Texture))
                    {
                        Texture2D texture = ContentLoader.Current.Load <Texture2D>(Path.Combine(directory, material.Texture));
                        material.Textures = new MaterialTextures(texture);
                    }
                }
            }

            IGraphicsDeviceService deviceService = ContentLoader.Current.GetService <IGraphicsDeviceService>();

            model.PrepareForRender(deviceService.GraphicsDevice);

            return(model);
        }
Пример #4
0
        public void UpdateEntity(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            ModelX entity = null;
            bool   found  = true;

            using (var connection = dbConnection)
            {
                connection.Open();

                entity       = connection.Get <ModelX>(2);
                entity.Prop1 = "ENTITY 2 UPDATED";
                entity.Prop2 = "XXX";
                entity.Prop4 = 10;

                found = connection.Update(entity);

                entity = connection.Get <ModelX>(2);

                connection.Close();
            }

            Assert.True(found);
            Assert.NotNull(entity);
            Assert.Equal("ENTITY 2 UPDATED", entity.Prop1);
            Assert.Equal("CUSTOM VALUE", entity.Prop2);
            Assert.Equal(0, entity.Prop4);
        }
Пример #5
0
        public void DeleteMany(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            var entities = new List <ModelX>()
            {
                { new ModelX()
                  {
                      Prop1 = "ENTITY 10"
                  } },
                { new ModelX()
                  {
                      Prop1 = "ENTITY 11"
                  } }
            };

            bool found = false;

            ModelX entity1 = null;
            ModelX entity2 = null;

            using (var connection = dbConnection)
            {
                connection.Open();
                connection.InsertMany <ModelX>(entities);
                found   = connection.DeleteMany <ModelX>(entities);
                entity1 = connection.Get <ModelX>(entities.First().Id);
                entity2 = connection.Get <ModelX>(entities.Skip(1).First().Id);
                connection.Close();
            }

            Assert.True(found);
            Assert.Null(entity1);
            Assert.Null(entity2);
        }
Пример #6
0
        public void DeleteEntityByKeyTuple(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            ModelX entity = new ModelX()
            {
                Prop1 = "ENTITY 10",
                Prop2 = "READONLY PROP",
                Prop4 = 10
            };

            bool found = false;

            using (var connection = dbConnection)
            {
                connection.Open();
                connection.Insert(entity);
                var id = entity.Id;
                found  = connection.Delete <ModelX>(ValueTuple.Create(id));
                entity = connection.Get <ModelX>(id);
                connection.Close();
            }

            Assert.True(found);
            Assert.Null(entity);
        }
Пример #7
0
        public void InsertEntity(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            ModelX entity = new ModelX()
            {
                Prop1 = "ENTITY 3",
                Prop2 = "READONLY PROP",
                Prop4 = 10
            };

            using (var connection = dbConnection)
            {
                connection.Open();

                var all = connection.GetAll <ModelX>();
                var id  = all.Select(e => e.Id).Max() + 1;
                connection.Insert(entity);

                Assert.Equal(id, entity.Id);

                entity = connection.Get <ModelX>(id);

                Assert.NotNull(entity);
                Assert.Equal("ENTITY 3", entity.Prop1);
                Assert.Equal("DEFAULT VALUE", entity.Prop2);
                Assert.Equal(0, entity.Prop4);

                connection.Close();
            }
        }
Пример #8
0
        private void UpdatePreview()
        {
            ModelX newModel = ApplyChanges(_model);

            if (_previewModel != null)
            {
                _previewModel.DisposeBuffers();

                for (Int32 set = 0; set < _previewModel.MaterialsSetsCount; ++set)
                {
                    foreach (var material in _previewModel.Materials(set))
                    {
                        String texName = material.Texture;

                        if (material.Textures != null)
                        {
                            material.Textures.Dispose();
                        }
                    }
                }
            }

            _previewModel = newModel;
            LoadTextures(_previewModel, Path.GetDirectoryName(_importFile));

            _preview.Model       = _previewModel;
            _preview.MaterialSet = _currentSet;
        }
Пример #9
0
        public async Task Test_属实体CUD_属性赋值风格_Async()
        {
            ShowCurrentThread();

            // 注意:
            // 1、异步调用必须使用 DbContext,不能再使用 ConnectionScope 创建的作用域
            // 2、代码中也不能再使用快捷的静态方法。
            using (DbContext db = DbContext.Create()) {
                // 先删除之前测试可能遗留下来的数据
                await db.Entity.From <ModelX>().Where(m => m.IntField = 1978).DeleteAsync();

                ShowCurrentThread();

                // 插入一条记录,只给2个字段赋值
                ModelX obj = db.Entity.BeginEdit <ModelX>();
                obj.IntField    = 1978;
                obj.StringField = "abc";
                await obj.InsertAsync();

                ShowCurrentThread();

                // 检验刚才插入的数据行
                ModelX m1 = await db.Entity.From <ModelX>().Where(m => m.IntField = 1978).ToSingleAsync();

                Assert.IsNotNull(m1);
                Assert.AreEqual("abc", m1.StringField);
                ShowCurrentThread();

                // m1 进入编辑状态
                m1             = db.Entity.BeginEdit(m1);
                m1.StringField = "12345";
                int effect = await m1.UpdateAsync();                        // 提交更新,WHERE过滤条件由主键字段决定

                Assert.AreEqual(1, effect);
                ShowCurrentThread();

                // 检验刚才更新的数据行
                ModelX m2 = await db.Entity.From <ModelX>().Where(m => m.IntField = 1978).ToSingleAsync();

                Assert.IsNotNull(m2);
                Assert.AreEqual("12345", m2.StringField);
                ShowCurrentThread();

                // 删除数据行
                ModelX obj2 = db.Entity.BeginEdit <ModelX>();
                obj2.IntField = 1978;
                effect        = await obj2.DeleteAsync();

                Assert.AreEqual(1, effect);
                ShowCurrentThread();

                // 检验删除结果
                ModelX m3 = await db.Entity.From <ModelX>().Where(m => m.IntField = 1978).ToSingleAsync();

                Assert.IsNull(m3);
                ShowCurrentThread();
            }
        }
Пример #10
0
        public void InsertManySingleShot(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            ModelX entity1 = new ModelX()
            {
                Prop1 = "ENTITY 10"
            };
            ModelX entity2 = new ModelX()
            {
                Prop1 = "ENTITY 11"
            };

            var entities = new List <ModelX>()
            {
                { entity1 },
                { entity2 }
            };

            using (var connection = dbConnection)
            {
                connection.Open();

                var all    = connection.GetAll <ModelX>();
                var lastId = all.Last().Id;

                var entity1Id = lastId + 1;
                var entity2Id = lastId + 2;

                var count = connection.InsertMany <ModelX>(entities, operationMode: OperationMode.SingleShot);

                Assert.Equal(entity1Id, entity1.Id);
                Assert.Equal(entity2Id, entity2.Id);
                Assert.Equal(2, count);

                entity1 = connection.Get <ModelX>(entity1Id);

                Assert.NotNull(entity1);
                Assert.Equal("ENTITY 10", entity1.Prop1);
                Assert.Equal("DEFAULT VALUE", entity1.Prop2);
                Assert.Equal(0, entity1.Prop4);

                entity2 = connection.Get <ModelX>(entity2Id);

                Assert.NotNull(entity2);
                Assert.Equal("ENTITY 11", entity2.Prop1);
                Assert.Equal("DEFAULT VALUE", entity2.Prop2);
                Assert.Equal(0, entity2.Prop4);

                connection.Close();
            }
        }
Пример #11
0
        private void LoadTextures(ModelX model, String directory)
        {
            for (Int32 set = 0; set < model.MaterialsSetsCount; ++set)
            {
                foreach (var material in model.Materials(set))
                {
                    String texName = material.Texture;

                    if (material.Textures != null)
                    {
                        material.Textures.Dispose();
                    }

                    if (String.IsNullOrWhiteSpace(texName))
                    {
                        material.Textures = null;
                        continue;
                    }

                    String fileName = Path.Combine(directory, texName);

                    try
                    {
                        using (Stream stream = new FileStream(fileName, FileMode.Open))
                        {
                            Texture2D texture = Texture2D.FromStream(_preview.GraphicsDevice, stream);
                            material.Textures = new MaterialTextures(texture);
                        }
                    }
                    catch
                    {
                        fileName = GetFileNameWithoutExtension(texName) + ".png";
                        fileName = Path.Combine(directory, fileName);

                        try
                        {
                            using (Stream stream = new FileStream(fileName, FileMode.Open))
                            {
                                Texture2D texture = Texture2D.FromStream(_preview.GraphicsDevice, stream);
                                material.Textures = new MaterialTextures(texture);
                            }
                        }
                        catch
                        {
                            material.Textures = null;
                        }
                    }
                }
            }
        }
Пример #12
0
        private void importBtn_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.DefaultExt      = "*.ply";
            dlg.CheckFileExists = true;
            dlg.Filter          = "Supported model files (*.obj, *.ply, *.emx)|*.obj;*.ply;*.emx|Polygon File Format(*.ply)|*.ply|Ebatiano's ModelX(*.emx)|*.emx";

            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                String ext = Path.GetExtension(dlg.FileName);
                foreach (var importer in _importers)
                {
                    if (ext.ToLowerInvariant() == importer.SupportedFileExt)
                    {
                        using (Stream stream = dlg.OpenFile())
                        {
                            try
                            {
                                _model = importer.Import(stream, (fname) =>
                                {
                                    return(new FileStream(Path.Combine(Path.GetDirectoryName(dlg.FileName), fname), FileMode.Open));
                                });

                                checkZisUp.Checked = _model.Up.Z > 0;

                                _exportSize = OriginalSize;
                                _importFile = dlg.FileName;

                                _currentSet      = 0;
                                _currentMaterial = 0;

                                FillAvaliableTextures(Path.GetDirectoryName(dlg.FileName));
                                UpdatePreview();
                                UpdateEdits();
                                UpdateCombos();
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(String.Format("Error while importing model:\n{0}", ex.ToString()));
                            }
                        }
                        return;
                    }
                }

                MessageBox.Show("No importer avaliable to open this file.");
            }
        }
Пример #13
0
        public void UpdateMany(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            ModelX entity1 = null;
            ModelX entity2 = null;

            bool found = true;

            using (var connection = dbConnection)
            {
                connection.Open();

                entity1 = connection.Get <ModelX>(1);
                entity2 = connection.Get <ModelX>(2);

                entity1.Prop1 = "ENTITY 1 UPDATED";
                entity1.Prop2 = "XXX";
                entity1.Prop4 = 10;

                entity2.Prop1 = "ENTITY 2 UPDATED";
                entity2.Prop2 = "XXX";
                entity2.Prop4 = 10;

                var entities = new List <ModelX>()
                {
                    { entity1 },
                    { entity2 }
                };

                found = connection.UpdateMany(entities as IEnumerable <ModelX>);

                entity1 = connection.Get <ModelX>(1);
                entity2 = connection.Get <ModelX>(2);

                connection.Close();
            }

            Assert.True(found);
            Assert.NotNull(entity1);
            Assert.Equal("ENTITY 1 UPDATED", entity1.Prop1);
            Assert.Equal("DEFAULT VALUE", entity1.Prop2);
            Assert.Equal(0, entity1.Prop4);

            Assert.NotNull(entity2);
            Assert.Equal("ENTITY 2 UPDATED", entity2.Prop1);
            Assert.Equal("CUSTOM VALUE", entity2.Prop2);
            Assert.Equal(0, entity2.Prop4);
        }
Пример #14
0
        public ActionResult Search(String key, Int32?pageIndex)
        {
            var name  = RouteData.Values["modelName"] + "";
            var model = ModelX.FindByName(name);

            var code = RouteData.Values["categoryCode"] + "";
            var cat  = Category.FindByCode(code);

            var pager = new Pager {
                PageIndex = pageIndex ?? 1, PageSize = PageSize
            };
            var list = Info.Search(model != null ? model.ID : 0, cat != null ? cat.ID : 0, key, pager);

            return(View(list));
        }
Пример #15
0
        public ActionResult Index()
        {
            var name  = RouteData.Values["modelName"] + "";
            var model = ModelX.FindByName(name);

            // 选择模版
            var tmp = model.IndexTemplate;

            if (tmp.IsNullOrEmpty() || !ViewExists(tmp))
            {
                tmp = GetView("Index", model);
            }

            return(View(tmp, model));
        }
Пример #16
0
        public void GetNonExistingEntity(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            ModelX entity = null;

            using (var connection = dbConnection)
            {
                connection.Open();
                entity = connection.Get <ModelX>(10);
                connection.Close();
            }

            Assert.Null(entity);
        }
Пример #17
0
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            var name = values[parameterName] + "";

            if (name.IsNullOrEmpty())
            {
                return(false);
            }

            if (ModelX.FindByName(name) != null)
            {
                return(true);
            }

            return(false);
        }
Пример #18
0
        public void NotExistsEntity(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            bool exists = false;
            var  key    = new ModelX {
                Id = -1
            };

            using (var connection = dbConnection)
            {
                connection.Open();
                exists = connection.Exists <ModelX>(key);
                connection.Close();
            }

            Assert.False(exists);
        }
Пример #19
0
        public void Test_属实体CUD_属性赋值风格()
        {
            // 先删除之前测试可能遗留下来的数据
            Entity.From <ModelX>().Where(m => m.IntField = 1978).Delete();

            // 插入一条记录,只给2个字段赋值
            ModelX obj = Entity.BeginEdit <ModelX>();

            obj.IntField    = 1978;
            obj.StringField = "abc";
            obj.Insert();

            // 检验刚才插入的数据行
            ModelX m1 = Entity.From <ModelX>().Where(m => m.IntField = 1978).ToSingle();

            Assert.IsNotNull(m1);
            Assert.AreEqual("abc", m1.StringField);

            // m1 进入编辑状态
            m1             = Entity.BeginEdit(m1);
            m1.StringField = "12345";
            int effect = m1.Update();                    // 提交更新,WHERE过滤条件由主键字段决定

            Assert.AreEqual(1, effect);

            // 检验刚才更新的数据行
            ModelX m2 = Entity.From <ModelX>().Where(m => m.IntField = 1978).ToSingle();

            Assert.IsNotNull(m2);
            Assert.AreEqual("12345", m2.StringField);

            // 删除数据行
            ModelX obj2 = Entity.BeginEdit(new ModelX());

            obj2.IntField = 1978;
            effect        = obj2.Delete();
            Assert.AreEqual(1, effect);

            // 检验删除结果
            ModelX m3 = Entity.From <ModelX>().Where(m => m.IntField = 1978).ToSingle();

            Assert.IsNull(m3);
        }
Пример #20
0
        public void GetEntityById(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            ModelX entity = null;

            using (var connection = dbConnection)
            {
                connection.Open();
                entity = connection.Get <ModelX>(1);
                connection.Close();
            }

            Assert.NotNull(entity);
            Assert.Equal(1, entity.Id);
            Assert.Equal("ENTITY 1", entity.Prop1);
            Assert.Equal("DEFAULT VALUE", entity.Prop2);
            Assert.Equal(0, entity.Prop4);
        }
Пример #21
0
        public void DeleteNonExistingEntity(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            ModelX entity = new ModelX()
            {
                Id = 10
            };

            bool found = false;

            using (var connection = dbConnection)
            {
                connection.Open();
                found = connection.Delete(entity);
                connection.Close();
            }

            Assert.False(found);
        }
Пример #22
0
        public void UpdateEntityExcept(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            Fixture fixture = new Fixture();
            ModelX  entity  = fixture.Create <ModelX>();

            entity.Prop2 = "DEFAULT VALUE";
            entity.Id    = 0;

            var  originalEntity = entity;
            bool found          = false;

            using (var connection = dbConnection)
            {
                connection.Open();

                connection.Insert(entity);

                entity       = connection.Get <ModelX>(entity.Id);
                entity.Prop1 = "TARGET UPDATE";
                entity.Prop3 = "TARGET UPDATE";

                found = connection.UpdateExcept(entity, new List <string>()
                {
                    { "Prop1" }
                });

                entity = connection.Get <ModelX>(entity.Id);

                connection.Close();
            }

            Assert.True(found);
            Assert.NotNull(entity);
            Assert.NotSame(originalEntity, entity);
            Assert.Equal(originalEntity.Prop1, entity.Prop1);
            Assert.Equal(originalEntity.Prop2, entity.Prop2);
            Assert.NotEqual(originalEntity.Prop3, entity.Prop3);
            Assert.Equal("TARGET UPDATE", entity.Prop3);
        }
Пример #23
0
        public void UpdateNonExistingEntity(IDbConnection dbConnection)
        {
            QueryHelper.FlushCache();

            ModelX entity = new ModelX();

            entity.Id    = 10;
            entity.Prop1 = "ENTITY 10";
            entity.Prop2 = "XXX";
            entity.Prop4 = 10;

            bool found = true;

            using (var connection = dbConnection)
            {
                connection.Open();

                found = connection.Update(entity);

                connection.Close();
            }

            Assert.False(found);
        }
Пример #24
0
        static void Main(string[] args)
        {
            int speed = 20;

            Console.WriteLine();
            Console.WriteLine("Encapsulation");
            ModelX modelx = new ModelX()
            {
                Year           = 2019,
                Make           = "Tesla",
                Model          = "Model X",
                NumberOfWheels = 4,
                IsSuv          = true,
                IsElectric     = true
            };


            Console.WriteLine($"{modelx.IsSuv}, ModelX class is instantiated");
            Console.WriteLine();
            Console.WriteLine("Inheritance");
            modelx.Accelerate(speed);
            Console.WriteLine();
            Console.WriteLine("Abstraction");
            modelx.OpenFalconWingDoors();
            Console.WriteLine();
            Console.WriteLine("Polymorphism");
            modelx.RegistrationFees();

            Console.WriteLine();
            Console.WriteLine("Garage");
            Garage garage = new Garage(2, 0);

            garage.AddCar(modelx);
            garage.AddCar(modelx);
            garage.AddCar(modelx);
        }
Пример #25
0
        private ModelX ApplyChanges(ModelX model)
        {
            Boolean swapZy = swapZyCheckBox.Checked;
            Boolean swapYz = swapYzCheckBox.Checked;

            Vector3 scale = _exportSize / OriginalSize;

            Vector3 move = Vector3.Zero;

            if (centerX.Checked)
            {
                move.X = -(_model.BoundA.X + _model.BoundB.X) / 2;
            }

            if (centerY.Checked)
            {
                move.Y = -(_model.BoundA.Y + _model.BoundB.Y) / 2;
            }

            if (centerZ.Checked)
            {
                move.Z = -(_model.BoundA.Z + _model.BoundB.Z) / 2;
            }

            if (layXz.Checked)
            {
                move.Y = -_model.BoundA.Y;
            }

            if (layXy.Checked)
            {
                move.Z = -_model.BoundA.Z;
            }

            if (Math.Abs(scale.X - scale.Y) > 0.0000001 || Math.Abs(scale.X - scale.Z) > 0.0000001)
            {
                throw new Exception("Niepoprawna wielkość modelu.");
            }

            VertexPositionNormalTexture[] vertices = new VertexPositionNormalTexture[_model.Vertices.Length];

            for (Int32 idx = 0; idx < vertices.Length; ++idx)
            {
                vertices[idx]          = _model.Vertices[idx];
                vertices[idx].Position = (vertices[idx].Position + move) * scale.X;

                if (swapZy || swapYz)
                {
                    Single mul = swapYz ? -1 : 1;

                    vertices[idx].Position = new Vector3(-vertices[idx].Position.X, vertices[idx].Position.Z, vertices[idx].Position.Y);
                    vertices[idx].Normal   = new Vector3(-vertices[idx].Normal.X, vertices[idx].Normal.Z, vertices[idx].Normal.Y);
                }
            }

            String newName;

            List <Material[]> materials = new List <Material[]>();

            for (Int32 set = 0; set < _model.MaterialsSetsCount; ++set)
            {
                materials.Add(new Material[_model.Materials(set).Length]);

                Material[] newSet = materials.Last();

                for (Int32 idx = 0; idx < newSet.Length; ++idx)
                {
                    Material mat = _model.Materials(set)[idx];
                    newName = mat.Texture;

                    newName = GetFileNameWithoutExtension(newName);

                    if (newName != mat.Texture)
                    {
                        mat = new Material(newName, mat.Diffuse, mat.Ambient, mat.Specular, mat.SpecularExponent, mat.Emissive, mat.Opacity);
                    }

                    newSet[idx] = mat;
                }
            }

            ModelX modelX = new ModelX(materials, _model.Subsets, vertices);

            modelX.Up = checkZisUp.Checked ? new Vector3(0, 0, 1) : new Vector3(0, 1, 0);
            return(modelX);
        }
Пример #26
0
        public static void Render(ModelX model, IShaderEffect effect, Vector3 ambientColor, int materialsSet)
        {
            GraphicsDevice device = model.VertexBuffer.GraphicsDevice;

            Material[] materials = model.Materials(materialsSet);

            device.SetVertexBuffer(model.VertexBuffer);

            for (int steps = 0; steps < 2; ++steps)
            {
                for (int idx = 0; idx < model.Subsets.Length; ++idx)
                {
                    var subset = model.Subsets[idx];

                    Material material = materials[subset.Material];

                    if (steps == 0)
                    {
                        if (material.Opacity < 1)
                        {
                            continue;
                        }
                    }

                    if (steps == 1)
                    {
                        if (material.Opacity == 1)
                        {
                            continue;
                        }
                    }

                    device.Indices = subset.IndexBuffer;

                    //// Draw the triangle.
                    effect.DiffuseColor      = material.Diffuse;
                    effect.AmbientLightColor = ambientColor * material.Ambient;
                    effect.SpecularColor     = material.Specular;
                    effect.EmissiveColor     = material.Emissive;
                    effect.Alpha             = material.Opacity;

                    MaterialTextures textures = material.Textures;

                    effect.SpecularPower = material.SpecularExponent;

                    Texture2D texture = textures != null ? textures.Diffuse : null;

                    effect.Texture        = texture;
                    effect.TextureEnabled = texture != null;

                    effect.Apply(0);

                    int startIndex = 0;

                    while (startIndex < subset.Indices.Length)
                    {
                        int primitiveCount = Math.Min((subset.Indices.Length - startIndex) / 3, 30000);

                        device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, model.Vertices.Length, startIndex, primitiveCount);
                        startIndex += primitiveCount * 3;
                    }
                }
            }
        }
Пример #27
0
        public static void DataComponentTest()
        {
            //ALM
            var model = new ModelX();

            DCTExample.Execute(c =>
            {
                #region 1 default
                //Create + Create to Edited
                model.StateEnum = ModelXState.Edited;
                model._Save();
                DCTExample.Context.SaveChanges();

                //Edited to Edited2
                model.StateEnum = ModelXState.Edited2;
                model._Save();
                DCTExample.Context.SaveChanges();

                //Edited2 to Error
                model.StateEnum = ModelXState.Error;
                model._Save();
                DCTExample.Context.SaveChanges();
                #endregion
                #region 2 Create to Edited2 - error
                var model2 = new ModelX();
                //Create + Create to Edited
                model2.StateEnum = ModelXState.Edited2;
                model2._Save();
                DCTExample.Context.SaveChanges();
                #endregion
                #region 3 Create to Error - error
                var model3 = new ModelX();
                //Create + Create to Edited
                model3.StateEnum = ModelXState.Error;
                model3._Save();
                DCTExample.Context.SaveChanges();
                #endregion
                #region 4 Create to Edited
                var model4 = new ModelX();
                //Create + Create to Edited
                model4.StateEnum = ModelXState.Edited;
                model4._Save();
                DCTExample.Context.SaveChanges();
                #endregion
                #region 5 Create to Edited2
                var model5 = new ModelX();
                //Create + Create to Edited
                model5.StateEnum = ModelXState.Edited;
                model5._Save();
                DCTExample.Context.SaveChanges();
                model5.StateEnum = ModelXState.Edited2;
                model5._Save();
                DCTExample.Context.SaveChanges();
                #endregion



                //Query
                var set = model._DbSet();
                set     = ModelX.DbSet();
                set     = DCTExample.Context.DbSet <ModelX>();
                set     = c.DbSet <ModelX>();

                //Creators
                var visualModel = model._ConvertToServiceModel <ModelXService>();
            });
        }
Пример #28
0
 public ModelX Import(Stream stream, OpenFileDelegate openFileDelegate)
 {
     return(ModelX.Load(stream));
 }
Пример #29
0
        public override void Execute()
        {
            #line 4 "..\..\Areas\Admin\Views\Index\_Left.cshtml"

            var user = ManageProvider.User;

            var fact = ObjectContainer.Current.Resolve <IMenuFactory>();

            var Menus = fact.Root.Childs;
            if (user != null && user.Role != null)
            {
                Menus = fact.GetMySubMenus(fact.Root.ID);
            }

            // 如果顶级只有一层,并且至少有三级目录,则提升一级
            if (Menus.Count == 1 && Menus[0].Childs.All(m => m.Childs.Count > 0))
            {
                Menus = Menus[0].Childs;
            }

            String[] icos = new String[] { "fa-tachometer", "fa-desktop", "fa-list", "fa-pencil-square-o", "fa-list-alt", "fa-calendar", "fa-picture-o", "fa-tag", "fa-file-o" };
            Int32    _idx = 0;


            #line default
            #line hidden
            WriteLiteral("\r\n<ul");

            WriteLiteral(" class=\"nav nav-list\"");

            WriteLiteral(">\r\n");


            #line 22 "..\..\Areas\Admin\Views\Index\_Left.cshtml"


            #line default
            #line hidden

            #line 22 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
            foreach (IMenu menu in Menus.Where(m => m.Visible))
            {
                var childs = fact.GetMySubMenus(menu.ID).Where(m => m.Visible);
                if (_idx >= icos.Length)
                {
                    _idx = 0;
                }


            #line default
            #line hidden
                WriteLiteral("        <li ");


            #line 26 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                Write(Html.Raw(menu == Menus[0] ? "class=\"active open\"" : ""));


            #line default
            #line hidden
                WriteLiteral(">\r\n            <a");

                WriteLiteral(" href=\"#\"");

                WriteLiteral(" class=\"dropdown-toggle\"");

                WriteLiteral(">\r\n                <i");

                WriteAttribute("class", Tuple.Create(" class=\"", 1009), Tuple.Create("\"", 1043)
                               , Tuple.Create(Tuple.Create("", 1017), Tuple.Create("menu-icon", 1017), true)
                               , Tuple.Create(Tuple.Create(" ", 1026), Tuple.Create("fa", 1027), true)

            #line 28 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                               , Tuple.Create(Tuple.Create(" ", 1029), Tuple.Create <System.Object, System.Int32>(icos[_idx++]

            #line default
            #line hidden
                                                                                                                  , 1030), false)
                               );

                WriteLiteral("></i>\r\n                <span");

                WriteLiteral(" class=\"menu-text\"");

                WriteLiteral(">");


            #line 29 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                Write(menu.DisplayName);


            #line default
            #line hidden
                WriteLiteral("</span>\r\n\r\n                <b");

                WriteLiteral(" class=\"arrow fa fa-angle-down\"");

                WriteLiteral("></b>\r\n            </a>\r\n");


            #line 33 "..\..\Areas\Admin\Views\Index\_Left.cshtml"


            #line default
            #line hidden

            #line 33 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                if (childs.Any())
                {
            #line default
            #line hidden
                    WriteLiteral("                <b");

                    WriteLiteral(" class=\"arrow\"");

                    WriteLiteral("></b>\r\n");


            #line 36 "..\..\Areas\Admin\Views\Index\_Left.cshtml"



            #line default
            #line hidden
                    WriteLiteral("                <ul");

                    WriteLiteral(" class=\"submenu\"");

                    WriteLiteral(">\r\n");


            #line 38 "..\..\Areas\Admin\Views\Index\_Left.cshtml"


            #line default
            #line hidden

            #line 38 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                    foreach (IMenu menu2 in childs)
                    {
            #line default
            #line hidden

            #line 40 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                        Write(Html.Partial("_Left_Item", menu2));


            #line default
            #line hidden

            #line 40 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                        ;
                    }


            #line default
            #line hidden
                    WriteLiteral("                </ul>\r\n");


            #line 43 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                }


            #line default
            #line hidden
                WriteLiteral("        </li>\r\n");


            #line 45 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
            }


            #line default
            #line hidden
            WriteLiteral("    ");

            WriteLiteral("\r\n");


            #line 47 "..\..\Areas\Admin\Views\Index\_Left.cshtml"


            #line default
            #line hidden

            #line 47 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
            foreach (var mod in ModelX.GetAll())
            {
                // 判断是否有权访问该频道
                var res = "CMS\\" + mod.Name;
                //if (!user.Has(res) && !user.Has(res + "Category")) { continue; }
                //if (!user.Has(res)) { continue; }
                if (_idx >= icos.Length)
                {
                    _idx = 0;
                }


            #line default
            #line hidden
                WriteLiteral("        <li>\r\n            <a");

                WriteLiteral(" href=\"#\"");

                WriteLiteral(" class=\"dropdown-toggle\"");

                WriteLiteral(">\r\n                <i");

                WriteAttribute("class", Tuple.Create(" class=\"", 1924), Tuple.Create("\"", 1958)
                               , Tuple.Create(Tuple.Create("", 1932), Tuple.Create("menu-icon", 1932), true)
                               , Tuple.Create(Tuple.Create(" ", 1941), Tuple.Create("fa", 1942), true)

            #line 56 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                               , Tuple.Create(Tuple.Create(" ", 1944), Tuple.Create <System.Object, System.Int32>(icos[_idx++]

            #line default
            #line hidden
                                                                                                                  , 1945), false)
                               );

                WriteLiteral("></i>\r\n                <span");

                WriteLiteral(" class=\"menu-text\"");

                WriteLiteral(">");


            #line 57 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                Write(mod.ToString());


            #line default
            #line hidden
                WriteLiteral("</span>\r\n\r\n                <b");

                WriteLiteral(" class=\"arrow fa fa-angle-down\"");

                WriteLiteral("></b>\r\n            </a>\r\n\r\n            <b");

                WriteLiteral(" class=\"arrow\"");

                WriteLiteral("></b>\r\n\r\n            <ul");

                WriteLiteral(" class=\"submenu\"");

                WriteLiteral(">\r\n                <li>\r\n                    <a");

                WriteAttribute("href", Tuple.Create(" href=\"", 2223), Tuple.Create("\"", 2252)
                               , Tuple.Create(Tuple.Create("", 2230), Tuple.Create <System.Object, System.Int32>(Href("~/CMS/Info/Mod/")
                                                                                                                 , 2230), false)

            #line 66 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                               , Tuple.Create(Tuple.Create("", 2245), Tuple.Create <System.Object, System.Int32>(mod.ID

            #line default
            #line hidden
                                                                                                                 , 2245), false)
                               );

                WriteLiteral(" target=\"main\"");

                WriteLiteral(">\r\n                        <i");

                WriteLiteral(" class=\"menu-icon fa fa-caret-right\"");

                WriteLiteral("></i>\r\n");

                WriteLiteral("                        ");


            #line 68 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                Write(mod);


            #line default
            #line hidden
                WriteLiteral(" 管理\r\n                    </a>\r\n                </li>\r\n");


            #line 71 "..\..\Areas\Admin\Views\Index\_Left.cshtml"


            #line default
            #line hidden

            #line 71 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                foreach (ICategory cat2 in mod.GetTopCategories())
                {
            #line default
            #line hidden

            #line 73 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                    Write(Html.Partial("_Left_Category", cat2));


            #line default
            #line hidden

            #line 73 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
                    ;
                }


            #line default
            #line hidden
                WriteLiteral("            </ul>\r\n        </li>\r\n");


            #line 77 "..\..\Areas\Admin\Views\Index\_Left.cshtml"
            }


            #line default
            #line hidden
            WriteLiteral("</ul>\r\n<!-- /.nav-list -->\r\n");
        }
Пример #30
0
 public void Export(Stream stream, ModelX model)
 {
     model.Save(stream);
 }