Description
A primitive that is composed of multiple other primitives. Since composites can contain other composites, they are commonly used to build hierarchies of primitives to efficiently evaluate display conditions. Primitives in a composite must have the same reference frame.
Public Methods
Add | Adds a primitive to the composite. |
Clear | Removes all primitives from the composite. |
Contains | Determines whether the composite contains a primitive. |
Remove | Removes a primitive from the composite. |
Public Properties
Count | Gets the number of primitives in the composite. |
TranslucentPrimitivesSortOrder | Gets or sets the sort order for translucent primitives in this composite. This determines a trade-off between rendering speed and quality. It is only recommended to use primitives sort order back to front when translucent primitives along the same line of sight cause blending artifacts. |
Interfaces
CoClasses that Implement IAgStkGraphicsCompositePrimitive
Example
Create layers of primitives
[C#] |
---|
IAgStkGraphicsSceneManager manager = ((IAgScenario)root.CurrentScenario).SceneManager;
Random r = new Random();
const int modelCount = 25;
Array positions = Array.CreateInstance(typeof(object), modelCount * 3);
//
// Create the models
//
IAgStkGraphicsCompositePrimitive models = manager.Initializers.CompositePrimitive.Initialize();
for (int i = 0; i < modelCount; ++i)
{
double latitude = 35 + 1.5 * r.NextDouble();
double longitude = -(80 + 1.5 * r.NextDouble());
double altitude = 0;
Array position = new object[3]{latitude, longitude, altitude};
positions.SetValue(latitude, 3 * i);
positions.SetValue(longitude, (3 * i) + 1);
positions.SetValue(altitude, (3 * i) + 2);
IAgStkGraphicsModelPrimitive model = manager.Initializers.ModelPrimitive.InitializeWithStringUri(modelFile);
model.SetPositionCartographic("Earth", ref position);
model.Scale = Math.Pow(10, 2);
models.Add((IAgStkGraphicsPrimitive)model);
}
//
// Create the markers
//
IAgStkGraphicsMarkerBatchPrimitive markers = manager.Initializers.MarkerBatchPrimitive.Initialize();
markers.RenderPass = AgEStkGraphicsMarkerBatchRenderPass.eStkGraphicsMarkerBatchRenderPassTranslucent;
markers.Texture = manager.Textures.LoadFromStringUri(markerFile);
markers.SetCartographic("Earth", ref positions);
//
// Create the points
//
IAgStkGraphicsPointBatchPrimitive points = manager.Initializers.PointBatchPrimitive.Initialize();
points.PixelSize = 5;
Array colors = Array.CreateInstance(typeof(object), modelCount);
for (int i = 0; i < colors.Length; i++)
colors.SetValue(Color.Orange.ToArgb(), i);
points.SetCartographicWithColorsAndRenderPass("Earth", ref positions, ref colors, AgEStkGraphicsRenderPassHint.eStkGraphicsRenderPassHintOpaque);
//
// Set the display Conditions
//
IAgStkGraphicsAltitudeDisplayCondition near = manager.Initializers.AltitudeDisplayCondition.InitializeWithAltitudes(0, 500000);
((IAgStkGraphicsPrimitive)models).DisplayCondition = (IAgStkGraphicsDisplayCondition)near;
IAgStkGraphicsAltitudeDisplayCondition medium = manager.Initializers.AltitudeDisplayCondition.InitializeWithAltitudes(500000, 2000000);
((IAgStkGraphicsPrimitive)markers).DisplayCondition = (IAgStkGraphicsDisplayCondition)medium;
IAgStkGraphicsAltitudeDisplayCondition far = manager.Initializers.AltitudeDisplayCondition.InitializeWithAltitudes(2000000, 4000000);
((IAgStkGraphicsPrimitive)points).DisplayCondition = (IAgStkGraphicsDisplayCondition)far;
manager.Primitives.Add((IAgStkGraphicsPrimitive)models);
manager.Primitives.Add((IAgStkGraphicsPrimitive)markers);
manager.Primitives.Add((IAgStkGraphicsPrimitive)points);
|
|
Create layers of primitives
[Visual Basic .NET] |
---|
Dim manager As IAgStkGraphicsSceneManager = DirectCast(root.CurrentScenario, IAgScenario).SceneManager
Dim r As New Random()
Dim holder As Integer = 25
Dim modelCount As Integer = 25
Dim positions As Array = Array.CreateInstance(GetType(Object), modelCount * 3)
'
' Create the models
'
Dim models As IAgStkGraphicsCompositePrimitive = manager.Initializers.CompositePrimitive.Initialize()
For i As Integer = 0 To modelCount - 1
Dim latitude As Double = 35 + 1.5 * r.NextDouble()
Dim longitude As Double = -(80 + 1.5 * r.NextDouble())
Dim altitude As Double = 0
Dim position As Array = New Object() {latitude, longitude, altitude}
positions.SetValue(latitude, 3 * i)
positions.SetValue(longitude, (3 * i) + 1)
positions.SetValue(altitude, (3 * i) + 2)
Dim model As IAgStkGraphicsModelPrimitive = manager.Initializers.ModelPrimitive.InitializeWithStringUri(modelFile)
model.SetPositionCartographic("Earth", position)
model.Scale = Math.Pow(10, 2)
models.Add(model)
Next
'
' Create the markers
'
Dim markers As IAgStkGraphicsMarkerBatchPrimitive = manager.Initializers.MarkerBatchPrimitive.Initialize()
markers.RenderPass = AgEStkGraphicsMarkerBatchRenderPass.eStkGraphicsMarkerBatchRenderPassTranslucent
markers.Texture = manager.Textures.LoadFromStringUri(markerFile)
markers.SetCartographic("Earth", positions)
'
' Create the points
'
Dim points As IAgStkGraphicsPointBatchPrimitive = manager.Initializers.PointBatchPrimitive.Initialize()
points.PixelSize = 5
DirectCast(points, IAgStkGraphicsPrimitive).Color = Color.Orange
Dim colors As Array = Array.CreateInstance(GetType(Object), modelCount)
For i As Integer = 0 To colors.Length - 1
colors.SetValue(Color.Orange.ToArgb(), i)
Next
points.SetCartographicWithColorsAndRenderPass("Earth", positions, colors, AgEStkGraphicsRenderPassHint.eStkGraphicsRenderPassHintOpaque)
'
' Set the display Conditions
'
Dim near As IAgStkGraphicsAltitudeDisplayCondition = manager.Initializers.AltitudeDisplayCondition.InitializeWithAltitudes(0, 500000)
DirectCast(models, IAgStkGraphicsPrimitive).DisplayCondition = DirectCast(near, IAgStkGraphicsDisplayCondition)
Dim medium As IAgStkGraphicsAltitudeDisplayCondition = manager.Initializers.AltitudeDisplayCondition.InitializeWithAltitudes(500000, 2000000)
DirectCast(markers, IAgStkGraphicsPrimitive).DisplayCondition = DirectCast(medium, IAgStkGraphicsDisplayCondition)
Dim far As IAgStkGraphicsAltitudeDisplayCondition = manager.Initializers.AltitudeDisplayCondition.InitializeWithAltitudes(2000000, 4000000)
DirectCast(points, IAgStkGraphicsPrimitive).DisplayCondition = DirectCast(far, IAgStkGraphicsDisplayCondition)
manager.Primitives.Add(DirectCast(models, IAgStkGraphicsPrimitive))
manager.Primitives.Add(DirectCast(markers, IAgStkGraphicsPrimitive))
manager.Primitives.Add(DirectCast(points, IAgStkGraphicsPrimitive))
|
|
See Also