//============================================================ 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); } }
//============================================================ 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); } }
//============================================================ // <T>获得指定代码的数据集。</T> //============================================================ public FRsDataset FetchDataset(string code) { FRsDataset dataset = null; if (_datasets.Contains(code)) { dataset = _datasets.Get(code); dataset.Open(); } return(dataset); }
//============================================================ 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); }
//============================================================ // <T>根据名称获得几何体。</T> // // @return 几何体 //============================================================ public FDrGeometry Get(string name) { return(_geometryDictionary.Get(name)); }