# 模型交互
# 图元选择
当鼠标选中图元的时候,使用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
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
2
3
4
5
6
7
8
9
10
11