Exemplo n.º 1
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);
            }
        }
Exemplo n.º 2
0
        //============================================================
        public void LoadResource(FDxRsTemplate resource)
        {
            //............................................................
            // 加载材质列表
            int materialCount = resource.Materials.Count;

            for (int n = 0; n < materialCount; n++)
            {
                // 创建几何体
                FDxRsTemplateMaterial rsMaterial = resource.Materials[n];
                FDxSpatialMaterial    material   = new FDxSpatialMaterial();
                material.Device = _device;
                material.LoadResource(rsMaterial);
                // 增加渲染对象
                _materials.Set(material.Name, material);
            }
            //............................................................
            // 加载渲染列表
            int renderableCount = resource.Renderables.Count;

            for (int n = 0; n < renderableCount; n++)
            {
                // 创建几何体
                FDxRsTemplateRenderable rsRenderable = resource.Renderables[n];
                FDxGeometry             geometry     = RDxCore.GeometryConsole.Create(_device, rsRenderable.ModelCode, rsRenderable.GeometryName);
                geometry.Display = this;
                geometry.LoadRenderable(rsRenderable);
                _geometries.Push(geometry);
                // 设置材质
                FDxSpatialMaterial material = _materials.Get(rsRenderable.MaterialCode);
                geometry.ModelMaterial = material;
                // 增加渲染对象
                _renderables.Push(geometry);
            }
        }
Exemplo n.º 3
0
        //============================================================
        // <T>获得指定代码的数据集。</T>
        //============================================================
        public FRsDataset FetchDataset(string code)
        {
            FRsDataset dataset = null;

            if (_datasets.Contains(code))
            {
                dataset = _datasets.Get(code);
                dataset.Open();
            }
            return(dataset);
        }
Exemplo n.º 4
0
        //============================================================
        protected bool LoadFileRows(Excel.Worksheet worksheet)
        {
            // 检查列表
            if (_columns.IsEmpty)
            {
                return(false);
            }
            Excel.Range cells = worksheet.Cells;
            // 读取头数据
            int    columnIndex = 0;
            string code        = _columns.Value(0).Name;
            string id          = _columns[0].Name;

            for (int n = 1; n < DATA_COL_MAXCNT; n++)
            {
                string name = cells[DATA_NAME_ROW, n].Text;
                if (RString.IsEmpty(name))
                {
                    break;
                }
                if (_columns.Contains(name))
                {
                    FXlsColumn column = _columns.Get(name);
                    column.Index = n;
                    if (name == code)
                    {
                        columnIndex = n;
                    }
                }
            }
            // 计算最大行数和列数
            int   count    = _columns.Count;
            Range rowRange = worksheet.Rows[1];

            object[,] rowValues = rowRange.get_Value();
            int columnCount = 1;

            for (; columnCount < DATA_COL_MAXCNT; columnCount++)
            {
                if (rowValues[1, columnCount] == null)
                {
                    break;;
                }
            }
            string columnCode = "";
            int    ch         = columnCount / 26;
            int    cl         = columnCount % 26;

            if (ch > 0)
            {
                columnCode += (char)('A' + ch - 1);
            }
            columnCode += (char)('A' + cl);
            Range columnRange = worksheet.Columns[columnIndex];

            object[,] columnValues = columnRange.get_Value();
            int rowCount = 1;

            for (; rowCount < DATA_ROW_MAXCNT; rowCount++)
            {
                if (columnValues[rowCount, 1] == null)
                {
                    break;;
                }
            }
            // 获得数据
            Range range = worksheet.get_Range("A3:" + columnCode + rowCount);

            object[,] values = range.get_Value();
            // 转换数据
            for (int r = 1; r <= rowCount; r++)
            {
                FXlsRow row = new FXlsRow();
                for (int n = 0; n < count; n++)
                {
                    FXlsColumn column = _columns.Value(n);
                    int        index  = column.Index;
                    if (index > 0)
                    {
                        object value    = values[r, index];
                        string valueStr = String.Empty;
                        if (null != value)
                        {
                            valueStr = value.ToString();
                            if (!RString.IsEmpty(valueStr))
                            {
                                valueStr = FormatValue(column, valueStr);
                            }
                        }
                        row.Set(column.Name, valueStr);
                    }
                }
                //for(int n = 0; n < count; n++) {
                //   FXlsColumn column = _columns.Value(n);
                //   int index = column.Index;
                //   if(index > 0) {
                //      string value = cells[r, index].Text;
                //      if(!RString.IsEmpty(value)) {
                //         value = FormatValue(column, value);
                //      }
                //      row.Set(column.Name, value);
                //   }
                //}
                if (!row.Contains(code))
                {
                    break;
                }
                if (RString.IsEmpty(row.Get(code)))
                {
                    break;
                }
                _rows.Push(row);
            }
            return(true);
        }
Exemplo n.º 5
0
 //============================================================
 // <T>根据名称获得几何体。</T>
 //
 // @return 几何体
 //============================================================
 public FDrGeometry Get(string name)
 {
     return(_geometryDictionary.Get(name));
 }