//============================================================
 // <T>保存模板渲染信息。</T>
 //
 // @prama renderable 模板渲染信息
 //============================================================
 public void SaveRenderable(FDrTemplateRenderable renderable)
 {
     // 保存选项
     renderable.OptionSelect  = qdrOptionSelect.DataValue;
     renderable.OptionVisible = qdrOptionVisible.DataValue;
     renderable.OptionGround  = qdrOptionGround.DataValue;
 }
 //============================================================
 // <T>选中显示项目。</T>
 //
 // @param item 显示项目
 //============================================================
 public void SelectItem(object item)
 {
     qdrMaterialProperty.Visible           = false;
     qdrTemplateRenderableProperty.Visible = false;
     qdrTemplateMovieProperty.Visible      = false;
     // 显示材质
     if (item is FDrMaterialGroup)
     {
         FDrMaterialGroup material = item as FDrMaterialGroup;
         qdrMaterialProperty.Dock = DockStyle.Fill;
         qdrMaterialProperty.LoadMaterialGroup(material);
         qdrMaterialProperty.Visible = true;
     }
     // 显示渲染
     if (item is FDrTemplateRenderable)
     {
         FDrTemplateRenderable renderable = item as FDrTemplateRenderable;
         qdrTemplateRenderableProperty.LoadRenderable(renderable);
         qdrTemplateRenderableProperty.Dock    = DockStyle.Fill;
         qdrTemplateRenderableProperty.Visible = true;
     }
     // 显示动画
     if (item is FDrTemplateAnimationMovie)
     {
         FDrTemplateAnimationMovie movie = item as FDrTemplateAnimationMovie;
         qdrTemplateMovieProperty.LoadMovie(movie);
         qdrTemplateMovieProperty.Dock    = DockStyle.Fill;
         qdrTemplateMovieProperty.Visible = true;
     }
 }
 //============================================================
 // <T>加载模板渲染信息。</T>
 //
 // @prama renderable 模板渲染信息
 //============================================================
 public void LoadRenderable(FDrTemplateRenderable renderable)
 {
     // 设置属性
     txtModelName.Text    = renderable.ModelName;
     txtGeometryName.Text = renderable.GeometryName;
     txtMaterialName.Text = renderable.MaterialName;
     // 设置选项
     qdrOptionSelect.DataValue  = renderable.OptionSelect;
     qdrOptionVisible.DataValue = renderable.OptionVisible;
     qdrOptionGround.DataValue  = renderable.OptionGround;
 }
Exemple #4
0
        //============================================================
        public override void Serialize(IOutput output)
        {
            base.Serialize(output);
            // 存储属性
            output.WriteInt8((sbyte)_optionLoaded);
            output.WriteInt8((sbyte)_optionSelect);
            output.WriteInt8((sbyte)_optionGround);
            output.WriteInt8((sbyte)_optionMergeVertex);
            output.WriteInt8((sbyte)_optionMergeMaterial);
            output.WriteInt8((sbyte)_optionLightMap);
            //............................................................
            // 统计材质次数
            FDictionary <int> materialsCount = new FDictionary <int>();

            foreach (FDrTemplateRenderable renderable in  _renderables)
            {
                int materialCount = 0;
                if (materialsCount.Contains(renderable.MaterialCode))
                {
                    materialCount = materialsCount.Get(renderable.MaterialCode);
                }
                materialCount++;
                materialsCount.Set(renderable.MaterialCode, materialCount);
            }
            //............................................................
            // 存储渲染列表
            int count = _renderables.Count;

            output.WriteInt16((short)count);
            for (int n = 0; n < count; n++)
            {
                FDrTemplateRenderable renderable = _renderables[n];
                int materialCount = materialsCount.Get(renderable.MaterialCode);
                if (1 == materialCount)
                {
                    renderable.OptionMerge = EDrFlag.No;
                }
                renderable.Id = n + 1;
                renderable.Serialize(output);
            }
            //............................................................
            // 存储动画列表
            if (_animation.IsEmpty)
            {
                output.WriteBool(false);
            }
            else
            {
                output.WriteBool(true);
                _animation.Serialize(output);
            }
        }
Exemple #5
0
        //============================================================
        // <T>序列化数据。</T>
        //============================================================
        public void Import()
        {
            string       fileName = _directory + "\\model.m3x";
            FXmlDocument xdoc     = new FXmlDocument(fileName);
            FXmlNode     xscene   = xdoc.Root.Find("Scene");

            // 重新导入所有集合体(可以重复)
            _renderables.Clear();
            int      n     = 0;
            FXmlNode xmesh = xscene.Find("Mesh");

            foreach (FXmlNode xgeometry in xmesh.Nodes)
            {
                if (xgeometry.IsName("Geometry"))
                {
                    string   name  = xgeometry.Get("name");
                    string[] items = name.Split('|');
                    if (items.Length >= 2)
                    {
                        // 获得模型和集合体对象
                        string   modelCode    = items[0];
                        string   geometryName = items[1];
                        FDrModel model        = RContent3dManager.ModelConsole.Find(modelCode);
                        if (null == model)
                        {
                            RMoCore.TrackConsole.Write(this, "Import", "Model is not exists. (model={0})", modelCode);
                            continue;
                        }
                        model.Open();
                        FDrGeometry geometry = model.Mesh.Find(geometryName);
                        if (null == geometry)
                        {
                            RMoCore.TrackConsole.Write(this, "Import", "Model geometry is not exists. (model={0}, geometry={1})", modelCode, geometryName);
                            continue;
                        }
                        // 新建渲染对象
                        FDrTemplateRenderable renderable = new FDrTemplateRenderable();
                        renderable.Id           = n++;
                        renderable.Name         = name;
                        renderable.LightMapName = RString.Right(name, "|");
                        renderable.ModelName    = model.Name;
                        renderable.GeometryName = geometry.Name;
                        renderable.MaterialName = geometry.MaterialName;
                        renderable.LoadExportConfig(xgeometry);
                        _renderables.Push(renderable);
                    }
                }
            }
            _logger.Debug(this, "Import", "Import template success. (file_name={0})", fileName);
            Store();
        }
Exemple #6
0
        //============================================================
        // <T>存储配置信息。</T>
        //
        // @param config 配置信息
        //============================================================
        public void SaveConfig(FXmlNode xconfig)
        {
            // 设置信息
            xconfig.Set("name", _name);
            xconfig.Set("label", _label);
            xconfig.Set("option_loaded", _optionLoaded);
            xconfig.Set("option_select", _optionSelect);
            xconfig.Set("option_ground", _optionGround);
            xconfig.Set("option_merge_vertex", _optionMergeVertex);
            xconfig.Set("option_merge_material", _optionMergeMaterial);
            xconfig.Set("option_light_map", _optionLightMap);
            //............................................................
            // 存储渲染列表
            if (!_renderables.IsEmpty)
            {
                FXmlNode xrenderables = xconfig.CreateNode("Renderables");
                int      count        = _renderables.Count;
                xrenderables.Set("count", count);
                for (int n = 0; n < count; n++)
                {
                    FDrTemplateRenderable renderable = _renderables[n];
                    if (renderable.Id == 0)
                    {
                        renderable.Id = n + 1;
                    }
                    renderable.SaveConfig(xrenderables.CreateNode("Renderable"));
                }
            }
            //............................................................
            // 存储引用列表
            if (!_references.IsEmpty)
            {
                FXmlNode xreferences = xconfig.CreateNode("References");
                xreferences.Set("count", _references.Count);
                foreach (FDrTemplateReference reference in _references)
                {
                    reference.SaveConfig(xreferences.CreateNode("Renderable"));
                }
            }
            //............................................................
            // 存储引动画列表
            FXmlNode xanimation = xconfig.CreateNode("Animation");

            _animation.SaveConfig(xanimation);
        }
Exemple #7
0
        //============================================================
        // <T>根据模块名称和几何体名称,获得渲染对象。</T>
        //
        // @param modelName 模块名称
        // @param geometryName 几何体名称
        // @return 渲染对象
        //============================================================
        public FDrTemplateRenderable SyncRenderable(string modelName, string geometryName)
        {
            // 查询渲染对象
            if (!_renderables.IsEmpty)
            {
                foreach (FDrTemplateRenderable renderable in _renderables)
                {
                    if (renderable.ModelName.Equals(modelName) && renderable.GeometryName.Equals(geometryName))
                    {
                        return(renderable);
                    }
                }
            }
            // 新建渲染对象
            FDrTemplateRenderable newRenderable = new FDrTemplateRenderable();

            newRenderable.ModelName    = modelName;
            newRenderable.GeometryName = geometryName;
            _renderables.Push(newRenderable);
            return(newRenderable);
        }