private void Create_Btn_Click(object sender, EventArgs e) { var Log = "正在创建C3D对象..."; Debug += DateTime.Now + ":" + Log + "\r\n\r\n"; C3DFile file = C3DFile.Create();//创建C3D对象 Log = "正在录入动作捕捉点数据..."; Debug += DateTime.Now + ":" + Log + "\r\n\r\n"; for (int n = 0; n < MOCAP_FRAMES.Count; n++)//时间序列 { C3DPoint3DData[] c3DPoints = new C3DPoint3DData[POINTS_COUNT]; var Points = MOCAP_FRAMES[n]; for (int i = 0; i < POINTS_COUNT; i++)//节点数 { C3DPoint3DData point3DData = new C3DPoint3DData() { X = (float)Points[i].X * (float)SCALE, Y = (float)Points[i].Y * (float)SCALE, Z = (float)Points[i].Z * (float)SCALE, Residual = 0, CameraMask = 0 }; c3DPoints[i] = point3DData; } C3DFrame c3DFrame = new C3DFrame(c3DPoints); file.AllFrames.Add(c3DFrame); } Log = "正在设置头信息..."; Debug += DateTime.Now + ":" + Log + "\r\n\r\n"; file.Header.PointCount = (ushort)POINTS_COUNT; file.Header.FirstFrameIndex = 1; file.Header.LastFrameIndex = (ushort)(MOCAP_FRAMES.Count - 1); file.Header.IsSupport4CharsLabel = false; file.Parameters.SetGroup(1, "POINT", ""); file.Parameters[1].Add("FRAMES", "").SetData <Int16>((short)(MOCAP_FRAMES.Count - 1)); file.Parameters[1].Add("USED", "").SetData <Int16>((short)POINTS_COUNT); Log = "正在保存到C3D文件..."; Debug += DateTime.Now + ":" + Log + "\r\n\r\n"; file.SaveTo(System.AppDomain.CurrentDomain.BaseDirectory + "output.c3d"); Log = "保存成功!已在程序根目录下生成'output.c3d'文件!"; Debug += DateTime.Now + ":" + Log + "\r\n\r\n"; }
private void LoadData(Boolean isFirstLoad) { if (this._file == null) { return; } C3DParameterCache cache = C3DParameterCache.CreateCache(this._file); C3DHeaderEvent[] events = this._file.Header.GetAllHeaderEvents(); UInt16 firstFrameIndex = this._file.Header.FirstFrameIndex; UInt16 lastFrameIndex = this._file.Header.LastFrameIndex; #region 第一次初始化 if (isFirstLoad) { for (Int32 i = 0; i < 4; i++) { this._status[i] = new ChartScaleStatus(firstFrameIndex, lastFrameIndex, Single.MaxValue, Single.MinValue); } this.ShowStripLine(events, cache.FrameRate); this.SetMarker(); } #endregion #region 列表内容填充 for (Int32 i = 0; i < 4; i++) { this._points[i] = new Dictionary <Int32, Single>(); this._status[i].Mins[1] = Single.MaxValue; this._status[i].Maxs[1] = Single.MinValue; this._status[i].Maxs[0] = (this._status[i].Maxs[0] == this._status[i].Mins[0] ? this._status[i].Maxs[0] + 1 : this._status[i].Maxs[0]); this._status[i].Maxs[1] = (this._status[i].Maxs[1] == this._status[i].Mins[1] ? this._status[i].Maxs[1] + 1 : this._status[i].Maxs[1]); } this._status[3].Mins[1] = -1.0F; this._status[3].Maxs[1] = Math.Max(this._status[3].Maxs[1], 1.0F); for (Int32 i = 0; i < this._file.AllFrames.Count; i++) { Int32 index = firstFrameIndex + i; C3DPoint3DData point3D = this._file.AllFrames[i].Point3Ds[this._pid]; if (_showResidual || point3D.Residual > -1) { this._points[0][index] = point3D.X; this._points[1][index] = point3D.Y; this._points[2][index] = point3D.Z; for (Int32 j = 0; j < 3; j++) { this._status[j].Mins[1] = Math.Min(this._status[j].Mins[1], this._points[j][index]); this._status[j].Maxs[1] = Math.Max(this._status[j].Maxs[1], this._points[j][index]); } } this._points[3][index] = point3D.Residual; this._status[3].Maxs[1] = Math.Max(this._status[3].Maxs[1], point3D.Residual); if (isFirstLoad) { this.lvItems.Items.Add(new ListViewItem(new String[] { (index).ToString(), point3D.X.ToString("F3"), point3D.Y.ToString("F3"), point3D.Z.ToString("F3"), point3D.Residual.ToString("F3"), point3D.CameraMaskInfo })); } } #endregion #region 绑定数据 for (Int32 i = 0; i < 4; i++) { ChartBindingHelper.BindDataToChart <Int32, Single>(this._charts[i], this._points[i], this._status[i].Mins[0], this._status[i].Maxs[0], this._status[i].Mins[1], this._status[i].Maxs[1]); } #endregion }