Related C++ Class: CClusterElementArray
v1.0
A collection of cluster elements in a Cluster object or ClusterProperty object.
The purpose of the data stored in this object depends whether it is
on a Cluster or a ClusterProperty.
The ClusterElementCollection returned by Cluster.Elements (and Envelope.Elements) provides the
mapping between an index of a component in a cluster with the index
of the component on the Geometry. For
example index 10 on a polygon Cluster might refer to Polygon 45 on
the geometry, in which case ClusterElementCollection.Item(10) has
the value 45. This data is read-only.
When trying to find if a particular geometry component is part of a
cluster it would be possible to search through this array. However
a more convenient and efficient method is to use Cluster.FindIndex.
On the other hand, the ClusterElementCollection returned by
ClusterProperty.Elements
(and Envelope.Weights) provides
read/write access to the actual data of the ClusterProperty. For
example in the case of a Vertex Color property this provides access
to the RGB values stored for each component. In this case the first
dimension has size 3, corresponding to the RGB values and the
second dimension corresponds to the index of the component. The
values are always represented as Doubles.
' ' This example demonstrates how to read and write the values on ' a weight map, using the ClusterElementCollection object. ' It also demonstrates how the indices on the cluster property ' correspond to the indices of the cluster, but that these indices do ' not directly correspond to the indices on the geometry. NewScene ,false set oSphere = ActiveSceneRoot.AddGeometry("Sphere","NurbsSurface") ' Create a weight map on a cluster that includes only a subset of the points set oCluster = oSphere.ActivePrimitive.Geometry.AddCluster( _ siVertexCluster, "MyFrontPoints", Array( 18,19,20,25,26,27) ) CreateWeightMap , oCluster.FullName, "MyWeightMap" set oWM = oCluster.LocalProperties( "MyWeightMap" ) ' Use the ClusterElementCollection.Array to access all the weights in a ' single 2-dimensional array ElArray = oWM.Elements.Array ' Set the weight on second item in the cluster, (which is point 19), to 100 ElArray(0,1) = 100 ' Set the weight on point 25 to 99 ElArray(0,3) = 99 ' Copy our altered array of values back onto the weight map oWM.Elements.Array = ElArray ' Use ClusterElementCollection.Item to set an individual weight on the ' Weight Map. Notice how it is still using an array 'Create a 1 Dimensional array with 1 element dim myWeight(0) myWeight(0) = 10 'Assign the value oWM.Elements.Item( 2 ) = myWeight 'Print out the contents set oCluster = oWM.Parent for i = 0 to oWM.Elements.Count - 1 indexOnGeometry = oCluster.Elements.Item(i) logmessage "Weight at " & i & " (pnt" & indexOnGeometry & _ ") is " & oWM.Elements.Item(i)(0) next 'Output of running this script is: 'INFO : "Weight at 0 (pnt18) is 1" 'INFO : "Weight at 1 (pnt19) is 100" 'INFO : "Weight at 2 (pnt20) is 10" 'INFO : "Weight at 3 (pnt25) is 99" 'INFO : "Weight at 4 (pnt26) is 1" 'INFO : "Weight at 5 (pnt27) is 1" |