# egoGeometry

Geometric properties of ego bodies

Since R2020b

## Syntax

``[egoIDs,geomStruct] = egoGeometry(capsuleListObj)``
``[egoIDs,geomStruct] = egoGeometry(capsuleListObj,selectEgoIDs)``
``[egoIDs,geomStruct,status] = egoGeometry(capsuleListObj,selectEgoIDs)``

## Description

````[egoIDs,geomStruct] = egoGeometry(capsuleListObj)` returns the ego ID and the geometry parameters for each ego body in the capsule list.```
````[egoIDs,geomStruct] = egoGeometry(capsuleListObj,selectEgoIDs)` specifies which ego bodies to return the ID and geometry parameters for.```

example

````[egoIDs,geomStruct,status] = egoGeometry(capsuleListObj,selectEgoIDs)` returns an indicator of whether each ID in `selectEgoIDs` exists.```

## Examples

collapse all

Add ego bodies to an environment using the `dynamicCapsuleList` object. Modify the properties of the ego bodies. Remove an ego body from the environment. Visualize the states of all objects in the environment at different timestamps.

Create the `dynamicCapsuleList` object. Extract the maximum number of steps to use as the number of time stamps for the object paths.

```capsuleList = dynamicCapsuleList; numSteps = capsuleList.MaxNumSteps;```

Specify the states for the two ego bodies as a linear path from x = 0 m to x = 100 m. The two ego bodies are separated by 5 m in opposite directions on the y-axis.

```egoState = linspace(0,1,numSteps)'.*[100 0 0]; egoState1 = egoState+[0 5 0]; egoState2 = egoState+[0 -5 0];```

Generate default poses and geometric structures for the two ego bodies using ego IDs.

```[egoIDs,egoPoseStruct] = egoPose(capsuleList,[1 2]); [egoIDs,egoGeomStruct] = egoGeometry(capsuleList,egoIDs);```

Update Ego Bodies

Assign the states to the ego bodies.

```egoPoseStruct(1).States = egoState1; egoPoseStruct(2).States = egoState2;```

Increase the radius of the first ego body to 2 m.

`egoGeomStruct(1).Geometry.Radius = 2;`

update the ego bodies using the `updateEgoPose` and `updateEgoGeometry` object functions.

```updateEgoPose(capsuleList,egoIDs,egoPoseStruct); updateEgoGeometry(capsuleList,egoIDs,egoGeomStruct);```

Visualize the ego bodies.

```show(capsuleList,'TimeStep',1:numSteps); axis equal```

Remove Ego Body

Remove the first ego body from the capsule list by specifying its ID.

`removeEgo(capsuleList,1);`

Visualize the ego bodies again.

```show(capsuleList,'TimeStep',1:numSteps); axis equal```

## Input Arguments

collapse all

Dynamic capsule list, specified as a `dynamicCapsuleList` or `dynamicCapsuleList3D` object.

Ego body IDs, specified as a vector of positive integers. The function returns the ego IDs and geometry parameters for only the ego bodies specified in this vector.

## Output Arguments

collapse all

IDs of ego bodies, returned as a vector of positive integers.

Geometry parameters for ego bodies, returned as a structure or structure array where each structure contains the fields from the structure in the `Geometry` field of the associated ego body. The fields of this structure depend on whether you are using a `dynamicCapsuleList` or `dynamicCapsuleList3D` object.

Indication of ego body existence, returned as a N-element column vector of ones, zeros, and negative ones. Each value indicates whether the associated body exists (`1`), updated (`0`), or a duplicate (`-1`). If you specify the same ego body ID more than once in the `selectEgoIDs` argument, then the function marks all instances of that ID after the first as duplicates and ignores them.

## Version History

Introduced in R2020b