# Управление группами точек

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-860970db9cbdf8a33d24ec6d1e14a5883672005b%2FSurvey_CreatePointGroups_Player.gif?alt=media" alt=""><figcaption></figcaption></figure>

Работа с точками COGO и группами точек в Civil 3D является ключевым элементом многих процессов, связанных с завершением обработки полевых данных. Dynamo отлично подходит для управления данными. В этом примере мы рассмотрим один из возможных примеров использования.

## Цель

> :dart: Создание группы точек для каждого уникального описания точки COGO.

## Основные этапы

> * Работа со списками
> * Группировка схожих объектов с помощью узла **List.GroupByKey**
> * Отображение пользовательских выходных данных в проигрывателе Dynamo

## Совместимость версий

{% hint style="success" %}
Этот график будет работать в **Civil 3D 2020** и более поздних версиях.
{% endhint %}

## Набор данных

Сначала скачайте файлы примеров ниже, а затем откройте файл DWG и график Dynamo.

{% file src="<https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-68c592610d9a8821d43a6a5e7cc5a1a9aab62cb5%2FSurvey_CreatePointGroups.dyn?alt=media>" %}

{% file src="<https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-56020caa20760d9eef2dd6a67c62f283400c283b%2FSurvey_CreatePointGroups.dwg?alt=media>" %}

## Решение

Ниже представлен обзор логики, используемой в этом графике.

> 1. Получение всех точек COGO в документе.
> 2. Группировка точек COGO по описанию.
> 3. Создание групп точек.
> 4. Вывод сводных данных в проигрывателе Dynamo.

Приступим!

### Получение точек COGO

Сначала необходимо получить все группы точек в документе, а затем все точки COGO в каждой группе. В результате мы получим *вложенный список*, или список списков. Если мы выровняем все элементы в один список с помощью узла **List.Flatten**, это упростит дальнейшую работу.

{% hint style="info" %}
Если вы еще не знакомы со списками, см. раздел [2-working-with-lists](https://primer2.dynamobim.org/ru/5_essential_nodes_and_concepts/5-4_designing-with-lists/2-working-with-lists "mention").
{% endhint %}

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-b6d5829e6972d7bcf560913c4c888b076f0b8c63%2FSurvey_CreatePointGroups_GetPoints.png?alt=media" alt=""><figcaption><p>Получение всех групп точек и точек COGO</p></figcaption></figure>

### Группирование точек по описанию

Теперь, когда мы получили все точки COGO, необходимо разделить их на группы на основе их описаний. С этой задаче блестяще справится узел **List.GroupByKey**. По сути, он группирует все элементы с одинаковым ключом.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-1dc33f106d1fe23c1ddcfaf5d44981bb93c5e073%2FSurvey_CreatePointGroups_GroupPoints.png?alt=media" alt="" width="563"><figcaption><p>Группирование точек COGO по описанию</p></figcaption></figure>

### Создание групп точек

Самое сложное позади. Последний шаг — создание новой группы точек Civil 3D на основе сгруппированных точек COGO.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-c00a6e7ad8cf938ca43602d6f0305bc93ebfd5ac%2FSurvey_CreatePointGroups_CreatePointGroups.png?alt=media" alt="" width="371"><figcaption><p>Создание новой группы точек</p></figcaption></figure>

### Вывод сводных данных

При запуске графика в области фонового просмотра Dynamo не отображается ничего, поскольку у нас нет никакой геометрии. Так что единственный способ убедиться, что график выполняется правильно, — проверить область инструментов или выполнить предварительный просмотр выходных данных узла. Однако если запустить график с помощью **проигрывателя Dynamo**, можно получить дополнительную информацию о результатах за счет вывода сводки по созданным группам точек. Для этого щелкнем узел правой кнопкой мыши и установим для него значение *Является выводом*. В данном случае для просмотра результатов используется переименованный узел **Watch**.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-70ccd96998b9092870379ff76ce2f158216df4c5%2FSurvey_CreatePointGroups_Output.png?alt=media" alt="" width="437"><figcaption><p>Если задать для узла значение <em>Является выводом</em>, его содержимое будет отображаться в выводе проигрывателя Dynamo.</p></figcaption></figure>

### Результат

Ниже приведен пример запуска графика с помощью **проигрывателя Dynamo**.

<figure><img src="https://2422276774-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frrl0CzV5yPtxYRNkwD4h%2Fuploads%2Fgit-blob-860970db9cbdf8a33d24ec6d1e14a5883672005b%2FSurvey_CreatePointGroups_Player.gif?alt=media" alt=""><figcaption><p>Запуск графика с помощью проигрывателя Dynamo и просмотр результатов в области инструментов</p></figcaption></figure>

{% hint style="info" %}
Если вы еще не знакомы с проигрывателем Dynamo, см. раздел [dynamo-player](https://primer2.dynamobim.org/ru/dynamo-for-civil-3d/dynamo-player "mention").
{% endhint %}

> :tada: Миссия выполнена!

## Идеи

Вот несколько вариантов того, как можно расширить возможности этого графика.

{% hint style="info" %}
Изменение принципа группировки точек, чтобы она выполнялась по **полному описанию**, а не по исходному.
{% endhint %}

{% hint style="info" %}
Группировка точек по другим **готовым категориям** (например, «Базовые снимки», «Геодезические знаки» и т. д.).
{% endhint %}

{% hint style="info" %}
Автоматическое создание поверхностей TIN для точек в определенных группах.
{% endhint %}
