Ejemplo n.º 1
0
        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";
        }
Ejemplo n.º 2
0
        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
        }