# Drawing 3D Features from a List of E3DObjects

The code shows how to display the ReferenceTopPosition feature of each extracted object in a E3DViewer.

## C++

```cpp
#include <eVision/Easy3D/Easy3DObject/E3DObjectExtractor.h>
#include <eVision/Easy3D/E3DViewer.h>
```

```cpp
using namespace eVision;
using namespace eVision::Easy3D;
E3DObjectExtractor extractor;
// Get the list of E3DObjects
std::vector<E3DObject> objects = extractor.GetObjects();

// Register the list of E3DObjects to the 3D viewer
E3DViewer viewer3D(0, 0, 640, 480);
viewer3D.Register3DObjects(objects);


// Define and use a render style for the ReferenceTopPosition feature
ERenderStyle renderStyle;
renderStyle.pointRGB = EC24A(100, 0, 0);
viewer3D.SetFeatureStyleForAll3DObjects(renderStyle, E3DObjectFeature_ReferenceTopPosition);

// Set a different rendering color for the first object
ERenderStyle selectedRenderStyle;
selectedRenderStyle.pointRGB = EC24A(255, 255, 0);
viewer3D.SetFeatureStyleFor3DObject(0, selectedRenderStyle, E3DObjectFeature_ReferenceTopPosition);

// Enable the display of the TopZPosition feature
viewer3D.ShowFeatureForAll3DObjects(E3DObjectFeature_ReferenceTopPosition);
```

## C#

```cs
using eVision;
using eVision.Easy3D;
```

```cs
E3DObjectExtractor extractor = new E3DObjectExtractor();

// Get the list of E3DObjects
E3DObject[] objects = extractor.Objects;

// Register the list of E3DObject to the 3D viewer
E3DViewer viewer3D = new E3DViewer(0, 0, 100, 100);
viewer3D.Register3DObjects(objects);


// Define and use a render style for the ReferenceTopPosition feature
ERenderStyle renderStyle = new ERenderStyle();
renderStyle.pointRGB = new EC24A(100, 0, 0);
viewer3D.SetFeatureStyleForAll3DObjects(renderStyle, E3DObjectFeature.ReferenceTopPosition);

// Set a different rendering color for the first object
ERenderStyle selectedRenderStyle = new ERenderStyle();
selectedRenderStyle.pointRGB = new EC24A(255, 255, 0);
viewer3D.SetFeatureStyleFor3DObject(0, selectedRenderStyle, E3DObjectFeature.ReferenceTopPosition);

// Enable the display of the ReferenceTopPosition feature
viewer3D.ShowFeatureForAll3DObjects(E3DObjectFeature.ReferenceTopPosition);
```

## Python

```py
import eVision
from eVision import Easy3D
extractor = Easy3D.E3DObjectExtractor()

# Get the list of E3DObjects
objects = extractor.Objects

# Register the list of E3DObject to the 3D viewer
viewer3D = Easy3D.E3DViewer(0, 0, 100, 100)
viewer3D.Register3DObjects(objects)

# Define and use a render style for the ReferenceTopPosition feature
render_style = Easy3D.ERenderStyle()
render_style.pointRGB = eVision.EC24A(100, 0, 0)
viewer3D.SetFeatureStyleForAll3DObjects(render_style, Easy3D.E3DObjectFeature.ReferenceTopPosition)

# Set a different rendering color for the first object
selected_render_style = Easy3D.ERenderStyle()
selected_render_style.pointRGB = eVision.EC24A(255, 255, 0)
viewer3D.SetFeatureStyleFor3DObject(0, selected_render_style, Easy3D.E3DObjectFeature.ReferenceTopPosition)

# Enable the display of the ReferenceTopPosition feature
viewer3D.ShowFeatureForAll3DObjects(Easy3D.E3DObjectFeature.ReferenceTopPosition)
```
