SceneNode是AnyCAD三维图形平台的AnyViz显示引擎的核心对象之一,只有放在场景管理器(SceneManager)里的节点才能被显示引擎所显示。 node
SceneNode是场景节点的基类,从SceneNode继承的子类有如下三大类: ui
Ø EntitySceneNode spa
挂接显示对象/几何对象的节点。好比建立的TopoShape须要显示,就须要挂接在EntitySceneNode上才能加到场景中。 3d
为了提升内存利用率,显示引擎容许一个TopoShape被挂接在多个EntitySceneNode上。好比一个车的两个前轮,几何对象能够共享。 orm
Ø CustomizedSceneNode 对象
自定义的比较“特殊”的场景节点。从它又继承了若干的子类。 继承
Ø GroupSceneNode 内存
用来对场景节点进行分组。GroupSceneNode下面能够挂接各类SceneNode,包括GroupSceneNode类型。 ci
有的组合对象也是从该类集成而来,好比GridNode, LineNode, PointNode等。 it
注意:使用GroupSceneNode能够把场景组织为树的结构。假如造成图,后果就很严重了。
在SceneNode上除了能够设置几何对象的显示样式如PointStyle、LineStyle、FaceStyle,设置变换矩阵等,还能够设置其余几个你可能感兴趣的属性。
SceneNode:SetTransform(trf); //变换到另一个位置。
经过GlobalInstance.MatrixBuilder能够建立平移、旋转、缩放矩阵。
SceneNode:SetVisible(false); //隐身
SceneNode:SetPickable(false);//对象不会被鼠标拾取到了
SceneNode:SetFilterable(false);//这下切换显示点、边、面都不会对这个节点有影响。它里面有什么就会显示什么。
SceneNode:SetFixedSize(true); //再怎么缩放视图,物体的大小都不会改变了。
注意:全部上面的属性都具备状态继承性,即在GroupSceneNode上设置,它的子节点自动具有上述属性。
Id是一个神奇的属性,给每一个节点一个惟一的Id颇有必要。这样在选择到某个SceneNode后,就能够根据它上面的Id关联到用户自定义数据。
另外根据Id,经过SceneManager:FindNode(id)就能够找到对应的SceneNode。
若是使用的是.Net三维控件,类RenderWindow3d提供了ShowGeometry方法直接把TopoShape转换为SceneNode。
如:
TopoShape cylinder = GlobalInstance.BrepTools.MakeCone(new Vector3(100, 0, 0), new Vector3(0, 0, 1), 20, 100, 40, 315); SceneNode node1 = renderView.ShowGeometry(cylinder, ++shapeId); SceneNode node2 = renderView.ShowGeometry(cylinder, ++shapeId); //此时node1和node2是在同一个位置 //调用SceneNode:SetTransform(…)就能够把node移到其余的位置 |
阵列本质上是改变物体的位置。对于几何相同位置不一样的物体,可使用MatrixBuilder来构造位移矩阵,把矩阵施加到各个SceneNode上便可。
for (int i = 0; i < 10; ++i) { Matrix4 trf = GlobalInstance.MatrixBuilder.MakeTranslate(i * 100, 0, 0); SceneNode aNode = renderView.ShowGeometry(cylinder, ++shapeId); node.SetTransform(trf); } |
利用以上的API,能够建立出一个四轮汽车了吧。