# Zmienianie nazw konstrukcji

<figure><img src="/files/tr5gjW8pBxCoBaj4FKTm" alt=""><figcaption></figcaption></figure>

Podczas dodawania rur i konstrukcji do sieci rurociągów program Civil 3D używa szablonu do automatycznego przypisywania nazw. Jest to zwykle wystarczające podczas wstępnego umieszczania. Jednak w miarę rozwoju projektu nazwy będą musiały ulec zmianie. Ponadto może być wymaganych wiele różnych wzorów nazewnictwa, na przykład nadawanie konstrukcjom w rurociągu nazw sekwencyjnych od konstrukcji najdalszej w kolejności lub stosowanie wzoru nazewnictwa zgodnego ze schematem danych agencji lokalnej. W tym przykładzie pokazano, jak za pomocą dodatku Dynamo można definiować dowolnego typu strategię nazewnictwa, która ma być stosowana spójnie.

## Cel

> :dart: Zmiana nazw konstrukcji sieci rurociągów w kolejności opartej na pikietażu linii trasowania.

## Kluczowe pojęcia

> * Praca z ramkami ograniczającymi
> * Filtrowanie danych za pomocą węzła **List.FilterByBoolMask**
> * Sortowanie danych za pomocą węzła **List.SortByKey**
> * Generowanie i modyfikowanie ciągów tekstowych

## Zgodność wersji

{% hint style="success" %}
Ten wykres będzie działać w programie **Civil 3D 2020** i w nowszych wersjach.
{% endhint %}

## Zestaw danych

Najpierw pobierz pliki przykładów poniżej, a następnie otwórz plik DWG i wykres dodatku Dynamo.

{% file src="/files/k6e6FvsRYwnwBspyIf3m" %}

{% file src="/files/LTOlTlyWzLAgbZy1XK2h" %}

## Rozwiązanie

Poniżej przedstawiono przegląd logiki na tym wykresie.

> 1. Wybieranie konstrukcji na podstawie warstwy
> 2. Pobieranie lokalizacji konstrukcji
> 3. Filtrowanie konstrukcji na podstawie odsunięć, a następnie sortowanie ich na podstawie pikiet
> 4. Generowanie nowych nazw
> 5. Zmienianie nazw konstrukcji

Zacznijmy!

### Wybieranie konstrukcji

Najpierw musimy wybrać wszystkie konstrukcje, z którymi będziemy pracować. W tym celu wystarczy wybrać wszystkie obiekty na określonej warstwie, co oznacza, że można wybrać konstrukcje z różnych sieci rurociągów (przy założeniu, że mają one tę samą warstwę).

<figure><img src="/files/QPMKiOeeoCmbS7AZCGS2" alt=""><figcaption><p>Wybieranie konstrukcji na danej warstwie</p></figcaption></figure>

> 1. Ten węzeł gwarantuje, że nie zostaną przypadkowo pobrane żadne niepożądane typy obiektów, które mogą mieć tę samą warstwę co konstrukcje.

### Pobieranie lokalizacji konstrukcji

Mamy już konstrukcje. Teraz musimy ustalić ich położenia w przestrzeni, tak aby można było je sortować według lokalizacji. W tym celu skorzystamy z ramek ograniczających poszczególnych obiektów. **Ramka ograniczająca** obiektu to ramka o minimalnym rozmiarze, która w pełni zawiera geometryczne zakresy obiektu. Obliczając środek ramki ograniczającej, otrzymujemy całkiem dobre przybliżenie punktu wstawiania konstrukcji.

<figure><img src="/files/x5KBe8r721lShmCEzYSp" alt=""><figcaption><p>Ustalanie przybliżonych punktów wstawiania poszczególnych konstrukcji za pomocą ramek ograniczających</p></figcaption></figure>

Za pomocą tych punktów ustalimy pikiety i odsunięcia konstrukcji względem wybranej linii trasowania.

<div><figure><img src="/files/x9YGDRQ1HYHVqnljo7sr" alt="" width="268"><figcaption></figcaption></figure> <figure><img src="/files/MlltBxJZTSpRE8Fkscu3" alt="" width="306"><figcaption></figcaption></figure></div>

### Filtrowanie i sortowanie

Tutaj zaczyna się robić trochę trudniej. Na tym etapie mamy dużą listę wszystkich konstrukcji na określonej warstwie i wybraliśmy linię trasowania, wzdłuż której mają być sortowane. Problem w tym, że na liście mogą znajdować się konstrukcje, których nazw nie chcemy zmieniać. Mogą one na przykład nie być częścią interesującego nas segmentu.

<figure><img src="/files/hrjwdSIsgiCnjLFin1dq" alt="" width="555"><figcaption></figcaption></figure>

> 1. Wybrana linia trasowania
> 2. Konstrukcje, których nazwy chcemy zmienić
> 3. Konstrukcje, które powinny zostać pominięte

Dlatego musimy przefiltrować listę konstrukcji, aby nie uwzględniać tych, które mają odsunięcie od linii trasowania większe niż określone. Najlepiej zrobić to za pomocą węzła **List.FilterByBoolMask**. Po przefiltrowaniu listy konstrukcji użyjemy węzła **List.SortByKey**, aby posortować je według wartości pikiet.

{% hint style="info" %}
Jeśli nie zdarzyło Ci się jeszcze pracować z listami, skorzystaj z sekcji [Praca z listami](/pl/5_essential_nodes_and_concepts/5-4_designing-with-lists/2-working-with-lists.md).
{% endhint %}

<figure><img src="/files/xHaUslC11c40AjKfefxu" alt=""><figcaption><p>Filtrowanie i sortowanie konstrukcji</p></figcaption></figure>

> 1. Sprawdzanie, czy odsunięcie konstrukcji jest mniejsze niż wartość progowa
> 2. Zastąpienie wszelkich wartości null wartością *false*
> 3. Filtrowanie listy konstrukcji i pikiet
> 4. Sortowanie konstrukcji według pikiet

### Generowanie nowych nazw

Ostatnią czynnością, którą musimy wykonać, jest utworzenie nowych nazw konstrukcji. Użyjemy formatu `<alignment name>-STRC-<number>`. Dodano tu jeszcze kilka węzłów, aby w razie potrzeby uzupełnić liczby o dodatkowe zera (np. „01” zamiast „1”).

<figure><img src="/files/TWGrmM2nRlmC9UvpMJVu" alt=""><figcaption><p>Generowanie nowych nazw konstrukcji</p></figcaption></figure>

### Zmienianie nazw konstrukcji

Wreszcie przechodzimy do zmieniania nazw konstrukcji.

<figure><img src="/files/fbnjfbYlYBZw6Z561Kvq" alt="" width="289"><figcaption><p>Ustawianie nazw konstrukcji</p></figcaption></figure>

### Wynik

Oto przykład uruchomienia wykresu za pomocą **Odtwarzacza Dynamo**.

<figure><img src="/files/tr5gjW8pBxCoBaj4FKTm" alt=""><figcaption><p>Uruchamianie wykresu za pomocą Odtwarzacza Dynamo i wyświetlanie wyników w programie Civil 3D</p></figcaption></figure>

{% hint style="info" %}
Jeśli nie znasz jeszcze Odtwarzacza Dynamo Player, skorzystaj z sekcji [Odtwarzacz Dynamo (Dynamo Player)](/pl/dynamo-for-civil-3d/dynamo-player.md).
{% endhint %}

> :tada: Misja wykonana!

### Bonus: wizualizowanie w dodatku Dynamo

Przydatne może być wykorzystanie podglądu tła 3D dodatku Dynamo do wizualizacji pośrednich danych wyjściowych wykresu zamiast tylko wyniku końcowego. Jednym z prostych rozwiązań jest wyświetlenie ramek ograniczających dla konstrukcji. Ponadto ten konkretny zestaw danych zawiera korytarz w dokumencie, dlatego można przenieść geometrię linii charakterystycznych korytarza do dodatku Dynamo, aby zapewnić kontekst dla lokalizacji konstrukcji w przestrzeni. Jeśli wykres zostanie użyty z zestawem danych bez żadnych korytarzy, węzły te po prostu nie wykonają żadnych działań.

<figure><img src="/files/F4M9I5MQAJBc1MnJ88vD" alt=""><figcaption><p>Wizualizowanie geometrii konstrukcji i linii charakterystycznych korytarza</p></figcaption></figure>

Teraz możemy lepiej zrozumieć, jak działa proces filtrowania konstrukcji na podstawie odsunięć.

<figure><img src="/files/RbMJCXrXWFFxgvd2LnF8" alt=""><figcaption><p>Dostosowywanie wartości progowej odsunięcia linii trasowania i wizualizowanie odpowiednich konstrukcji w dodatku Dynamo</p></figcaption></figure>

## Pomysły

Oto kilka pomysłów na rozszerzenie możliwości tego wykresu.

{% hint style="info" %}
Zmień nazwy konstrukcji na podstawie ich **najbliższych linii trasowania**, zamiast wybierać określoną linię trasowania.
{% endhint %}

{% hint style="info" %}
**Zmień nazwy rur**, a nie tylko konstrukcji.
{% endhint %}

{% hint style="info" %}
**Ustaw warstwy** konstrukcji na podstawie ich segmentów.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://primer2.dynamobim.org/pl/dynamo-for-civil-3d/sample-workflows/utilities/rename-structures.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
