Cluster

Cluster

Object Hierarchy | 関連する C++クラス:Cluster

継承

SIObject

ProjectItem

SceneItem

Cluster

説明

クラスタとは、Geometry上のコンポーネントのセットです。たとえば、人体の左腕のポリゴンは、クラスタを作成することによりグループ化できます。

クラスタには、そのコンポーネントに含まれているコンポーネントに対応するSIObject.Typeが含まれます(例:pnt、knot、poly)。ジオメトリには、異なる種類のクラスタを含む複数のクラスタを含めることができます。複数のクラスタに特定のコンポーネントが含まれる場合があります。ジオメトリ上でサポートされるClusterTypesは、オブジェクトのタイプによって異なります。たとえば、siKnotCluster を使用できるオブジェクトは、NurbsSurfaceまたはNurbsCurveだけです。

クラスタはParticleCloudのジオメトリ上に作成できます。これらのクラスタはタイプ siVertexCluster ですが、Particle が含まれます。

特定タイプのすべてのコンポーネントを含むクラスタは「常に完全」と呼ばれ、Cluster.IsAlwaysComplete メソッドで検証できます。「常に完全」なクラスタは、コンポーネントがモデリングオペレーションによって追加されていてもジオメトリのすべてのコンポーネントをカバーします。ただし、ジオメトリのすべてのコンポーネントをカバーするクラスタは、「常に完全」である必要はないので注意してください。その他のクラスタにはコンポーネントのサブセットが含まれます。どの場合でも、クラスタのコンポーネントインデックスは、ジオメトリのコンポーネントインデックスと直接一致することはありません。クラスタインデックスおよびジオメトリインデックス間のマッピングは、Cluster.ElementsおよびCluster.FindIndicesから使用できます。

クラスタは、ClusterPropertyおよびUserDataMapを使用してコンポーネント別データを保存する場合に役立ちます。クラスタは、そのクラスタ固有のCustomPropertyオブジェクトを持つことができます。これらのプロパティはすべてSceneItem.AddPropertyで作成し、SceneItem.LocalPropertiesで表示します。ClusterPropertyのいくつかのタイプは、常に完全であるクラスタが必要なことに注意してください。

警告:エッジをメッシュに追加するなどの操作でジオメトリを変更すると、クラスタが拡張したり縮小したりすることがあります。

v5.0 のように、Cluster オブジェクトで呼び出されたベースプロパティSIObject.Parent は、X3DObjectの代わりにPrimitiveを戻します。

メソッド

AddCustomOp AddCustomProperty AddICEAttribute AddMaterial
AddProperty AddScriptedOp AddScriptedOpFromFile AnimatedParameters2
ApplyEnvelope BelongsToオペレータ CreateSubComponent EvaluateAt
FindIndex FindIndices GetICEAttributeFromName GetLocalPropertyFromName
GetLocalPropertyFromName2 GetPropertyFromName GetPropertyFromName2 GetStaticKinematicStatesオペレータ
HasStaticKinematicStateオペレータ IsA IsAlwaysCompleteオペレータ IsAnimated2
IsClassOfオペレータ IsEqualToオペレータ IsKindOf IsLockedオペレータ
IsSelectedオペレータ LockOwners RemoveICEAttribute SetAsSelectedオペレータ
SetCapabilityFlagオペレータ SetLock SetMaterial TaggedParameters
UnSetLock      
       

プロパティ

Application BranchFlagオペレータ Capabilitiesオペレータ Categories
CenterReference Elementsオペレータ Envelopes EvaluationID
Familiesオペレータ FullNameオペレータ Help HierarchicalEvaluationID
ICEAttributes LocalProperties LockLevelオペレータ LockMastersオペレータ
LockTypeオペレータ Material Model Nameオペレータ
NestedObjects ObjectID Origin OriginPath
Owners PPGLayoutオペレータ Parametersオペレータ Parent
Parent3DObject Properties Selectedオペレータ Typeオペレータ

1. VBScript の例

'

'	This example shows how to create many different cluster types.

'	It also shows how to find all clusters in a scene

'

NewScene ,false

set oRoot = Application.ActiveProject.ActiveScene.Root

set grid = oRoot.AddGeometry("Grid","MeshSurface")

set gridGeometry = grid.ActivePrimitive.Geometry

'Only certain types makes sense on a MeshSurface	

'This cluster we will create as a subset of the vertices

gridGeometry.AddCluster siVertexCluster,"PntCluster",Array(1,4,7,10,13,16,19,22)

'The rest we will create as complete clusters

gridGeometry.AddCluster siPolygonCluster,"PolygonC"

gridGeometry.AddCluster siEdgeCluster

gridGeometry.AddCluster siSampledPointCluster

'A different set makes sense with Nurbs

set torus = oRoot.AddGeometry("Torus","NurbsSurface")

set torusGeometry = torus.ActivePrimitive.Geometry

torusGeometry.AddCluster siVertexCluster,"PntCluster"

torusGeometry.AddCluster siSampledPointCluster

torusGeometry.AddCluster siSurfaceCurveCluster 

torusGeometry.AddCluster siKnotCurveUCluster

torusGeometry.AddCluster siKnotCurveVCluster

torusGeometry.AddCluster siBoundaryCluster

torusGeometry.AddCluster siKnotCluster 

torusGeometry.AddCluster siTrimCurveCluster

torusGeometry.AddCluster siIsoLineUCluster 

torusGeometry.AddCluster siIsoLineVCluster

torusGeometry.AddCluster siSubSurfaceCluster

set circle = oRoot.AddGeometry("Circle","NurbsCurve")

set circleGeometry = circle.ActivePrimitive.Geometry

circleGeometry.AddCluster siIsoPointCluster

circleGeometry.AddCluster siVertexCluster,"PntCluster"

circleGeometry.AddCluster siKnotCluster 

set particleCloud = CreateParticleCloud().Item(0)

particleCloud.ActivePrimitive.Geometry.AddCluster siVertexCluster, "MyParticles"

' Now traverse the scene finding all the clusters

logmessage "Clusters in Scene......................"

set oSceneObjs = ActiveSceneRoot.FindChildren()

for each oItem in oSceneObjs

	'Use error handling to skip over the objects that don't

	'support clusters		

	on error resume next	

	set oClusters = oItem.ActivePrimitive.Geometry.Clusters

	if ( err = 0 ) then

		logmessage oItem & " has " & oClusters.Count & " Clusters: "

		for each oCls in oClusters

			logmessage "    " & oCls & " (type: " & oCls.Type & ")"

		next

	end if	

next

'The output of this script is:

'INFO : "Clusters in Scene......................"

'INFO : "grid has 4 Clusters: "

'INFO : "    grid.polymsh.cls.PntCluster (type: pnt)"

'INFO : "    grid.polymsh.cls.edge.clslist.Edge (type: edge)"

'INFO : "    grid.polymsh.cls.PolygonC (type: poly)"

'INFO : "    grid.polymsh.cls.sample.clslist.Sample (type: sample)"

'INFO : "torus has 11 Clusters: "

'INFO : "    torus.surfmsh.cls.V_Knot_Curve (type: knotcrvv)"

'INFO : "    torus.surfmsh.cls.U_Knot_Curve (type: knotcrvu)"

'INFO : "    torus.surfmsh.cls.sample.clslist.Sample (type: sample)"

'INFO : "    torus.surfmsh.cls.PntCluster (type: pnt)"

'INFO : "    torus.surfmsh.cls.Surface_Curve (type: srfcrv)"

'INFO : "    torus.surfmsh.cls.V_Isoline (type: isolinev)"

'INFO : "    torus.surfmsh.cls.knot.clslist.Knot (type: knot)"

'INFO : "    torus.surfmsh.cls.Boundary (type: bndry)"

'INFO : "    torus.surfmsh.cls.Subsurface (type: subsrf)"

'INFO : "    torus.surfmsh.cls.U_Isoline (type: isolineu)"

'INFO : "    torus.surfmsh.cls.Trim_Curve (type: trimcrv)"

'INFO : "circle has 3 Clusters: "

'INFO : "    circle.crvlist.cls.Isopoint (type: isopnt)"

'INFO : "    circle.crvlist.cls.PntCluster (type: pnt)"

'INFO : "    circle.crvlist.cls.knot.clslist.Knot (type: knot)"

'INFO : "cloud has 1 Clusters: "

'INFO : "    cloud.cloud.cls.MyParticles (type: pnt)"

2. JScript の例

//Step 1: Simulate the user creating a scene and selecting

//some points on a grid

var oGrid = ActiveSceneRoot.AddGeometry( "Grid", "MeshSurface" ) ;

SelectObj( oGrid ) ;

ActivateVertexSelTool();

AddToSelection( oGrid.Name + ".pnt[0-8]", null, true);

//Step 2: Get the selected components using OM

var oSubComponent = Selection(0).SubComponent ;

//Expect that 9 components were selected

logmessage( oSubComponent.ComponentCollection.Count ) ;

//Step 3: it is simple to create a cluster

var oCluster = oSubComponent.CreateCluster() ;

logmessage( oCluster.FullName  ) ;

//Output of this example:

//INFO : "9"

//INFO : "grid.polymsh.cls.Point"

関連項目

ClusterProperty Geometry.AddCluster Geometry.Clusters Geometry.SaveShapeKey