在C#使用AnyCAD三維控件の場景節點詳解

SceneNode是AnyCAD三維圖形平臺的AnyViz顯示引擎的核心對象之一,只有放在場景管理器(SceneManager)裏的節點才能被顯示引擎所顯示。 node

1.   節點分類

SceneNode是場景節點的基類,從SceneNode繼承的子類有如下三大類: ui

Ø  EntitySceneNode spa

掛接顯示對象/幾何對象的節點。好比建立的TopoShape須要顯示,就須要掛接在EntitySceneNode上才能加到場景中。 3d

爲了提升內存利用率,顯示引擎容許一個TopoShape被掛接在多個EntitySceneNode上。好比一個車的兩個前輪,幾何對象能夠共享。 orm

Ø  CustomizedSceneNode 對象

自定義的比較特殊的場景節點。從它又繼承了若干的子類。 繼承

Ø  GroupSceneNode 內存

用來對場景節點進行分組。GroupSceneNode下面能夠掛接各類SceneNode,包括GroupSceneNode類型。 ci

有的組合對象也是從該類集成而來,好比GridNode, LineNode, PointNode等。 it

 

注意:使用GroupSceneNode能夠把場景組織爲的結構。假如造成,後果就很嚴重了。

        

2.   屬性設置

SceneNode上除了能夠設置幾何對象的顯示樣式如PointStyleLineStyleFaceStyle,設置變換矩陣等,還能夠設置其餘幾個你可能感興趣的屬性。

 

2.1.  矩陣變換

SceneNode:SetTransform(trf); //變換到另一個位置。

經過GlobalInstance.MatrixBuilder能夠建立平移、旋轉、縮放矩陣。

 

2.2.  設置可見性

SceneNode:SetVisible(false); //隱身

2.3.  設置是否可被選擇

SceneNode:SetPickable(false);//對象不會被鼠標拾取到了

 

2.4.  設置是否受顯示模式影響

SceneNode:SetFilterable(false);//這下切換顯示點、邊、面都不會對這個節點有影響。它裏面有什麼就會顯示什麼。

 

2.5.  設置不受視圖縮放影響

SceneNode:SetFixedSize(true); //再怎麼縮放視圖,物體的大小都不會改變了。

 

注意:全部上面的屬性都具備狀態繼承性,即在GroupSceneNode上設置,它的子節點自動具有上述屬性。

 

2.6.  Id

Id是一個神奇的屬性,給每一個節點一個惟一的Id頗有必要。這樣在選擇到某個SceneNode後,就能夠根據它上面的Id關聯到用戶自定義數據。

另外根據Id,經過SceneManager:FindNode(id)就能夠找到對應的SceneNode

 

3.   代碼示例

3.1.  TopoShape掛接到多個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);

//此時node1node2是在同一個位置

//調用SceneNode:SetTransform(…)就能夠把node移到其餘的位置

 

3.2.  陣列

陣列本質上是改變物體的位置。對於幾何相同位置不一樣的物體,可使用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);

}

 

4.   練習

利用以上的API,能夠建立出一個四輪汽車了吧。

相關文章
相關標籤/搜索