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,能夠建立出一個四輪汽車了吧。