# 模型交互

# 图元选择

当鼠标选中图元的时候,使用RenderControl可以接收选中消息。RenderControl::SetSelectCallback用于注册用户接收选择消息的回调函数,参数PickedItem包含了被选择的图元信息:

mRenderControl.SetSelectCallback((PickedItem item) =>
            {
                this.listBox1.Items.Clear();
                 // SceneNode的类型
                this.listBox1.Items.Add(item.GetNode().GetType().Name);
                 // SceneNode的Id
                this.listBox1.Items.Add(String.Format("NodeId: {0}", item.GetNodeId()));
                // 鼠标点击的位置
                this.listBox1.Items.Add(item.GetPoint().GetPosition().ToString());
                // 选中的子图元类型
                this.listBox1.Items.Add(item.GetShapeType().ToString()); 
                // 选中子图元的在整体图元的索引
                this.listBox1.Items.Add(String.Format("SubIndex: {0}", item.GetShapeIndex())); 
            });
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 图元数据关联

每个SceneNode都具有全局唯一的ID。当程序重新打开的时候,SceneNode的ID会重新分配。 创建SceneNode后,可以通过ID来跟应用的业务数据关联;当选中图元后,可以根据ID获取业务信息。

# 位移动画

通过组合使用平移、旋转和缩等矩阵变换放来模拟物体的运动。通过RenderControl::SetAnimationCallback可以得到每一帧绘制的消息,在Callback中可以对SceneNode进行矩阵变换。

 mRenderControl.SetAnimationCallback((float timer)=>{
                
                // 更新构件
                var matrixR = Matrix4.makeRotationAxis(new Vector3(0, 0, 1), time);
                var matrixT = Matrix4.makeTranslation(-50, 0, 0);
                ConeNode1.SetTransform(matrixR * matrixT);
                ConeNode1.RequstUpdate();

                // 更新场景
                mRenderControl.RequestDraw();
            });
1
2
3
4
5
6
7
8
9
10
11

#

Last Updated: 8/25/2020, 8:57:36 PM