> For the complete documentation index, see [llms.txt](https://manual.karamba3d.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://manual.karamba3d.com/jp/2-hajimekata/2-getting-started-1/2.7-naming-and-selection-of-elements.md).

# 2.7 要素の命名と選択

要素にプロパティを付加したり、要素の結果を照会したり、モデルビュー (ModelView) コンポーネントを介して部分的なモデルの可視性を制御したりすることは、要素ID (Id) に依存します。気の利いた命名スキームは、要素を論理的な部品や階層にグループ化することによって、複雑なモデルの管理を容易にします。

## 要素名の定義

要素名は、作成時に「**梁要素を作成(Create Linear Element)**」または「**サーフェス要素を作成(Create Surface Element)**」コンポーネントを使用して割り当てられます。後で「**ModifyElement**」コンポーネントを使用して変更することもできます。

有効な名前は文字で始まる必要があり、文字、数字、またはアンダースコア（`_`）を含むことができます。各要素にはモデル内のインデックスに基づくデフォルト名がすでにあるため、数字のみの名前は許可されません。もう1つのデフォルト名は空文字列 `""` で、これは選択文字列として `""` を使用するとモデル内のすべての要素を選択することを意味します。

<figure><img src="https://147116332-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz9HWyQapP9tu9mJjh5O9%2Fuploads%2Fgit-blob-d9a902983d63cbc369ed4487a5f3bf9596e7e454%2Fhierarchicalelementselection%20(1).png?alt=media" alt=""><figcaption><p>図2.7.1: 要素の階層的命名スキーム。</p></figcaption></figure>

#### 複数の名前

要素には複数の名前を持たせることができます（例: インデックスとユーザー定義の名前）。複数の名前を割り当てるには、縦線で区切ります:\
`name1|name2|name3`\
これにより、`name1`、`name2`、`name3` の名前が要素に付加されます。

{% hint style="info" %}
要素名は一意である必要がないため、要素に複数の名前を付けて分類することができます: 例えば、長さの範囲、断面プロパティ、ジョイント条件などに従って分類できます。\
これらのカテゴリは、ModelViewコンポーネントの「View」入力を使用して便利に可視化できます（セクション [3.7.1.1 モデルビュー](/jp/3-konpnentorifarensu/3.6-results/3.7.1-general-results/3.6.1-modelview.md) 参照）。
{% endhint %}

#### 階層的な命名スキーム

階層的な命名スキームは、ドット表記を使用して作成できます:\
`Level1.Level2.Level3`\
そのような要素は、`Level1`、`Level1.Level2`、または `Level1.Level2.Level3` を使用して選択できます。これは次の省略形と等価です:\
`Level1|Level1.Level2|Level1.Level2.Level3`。

図2.7.1は、階層的な命名を使用してモデルの異なる部分に梁要素荷重を適用した、4つの梁要素を持つモデルを示しています。

## 名前による要素の選択

Karamba3Dで荷重を付加したり、断面を割り当てたり、モデルの可視性を制御したりするとき、要素は通常その**名前**で参照されます。場合によっては、要素オブジェクトを直接提供することもでき、その場合はモデル組み立てプロセス中に **GUID** が使用されます。

Karamba3Dでは **要素の命名は大文字小文字を区別します**。各要素には2つのデフォルト名があります:

* 空文字列
* 要素のインデックス（*ModelView* コンポーネントで可視化できます）。\
  要素インデックスは、要素が *AssembleModel* コンポーネントに入力された順序に対応します。

要素はそのIDで3つの方法で参照できます:

1. **直接名**: 完全な要素名を指定します。
2. **ワイルドカード選択**: 選択文字列で `*` または `&` を使用します。たとえば、`abc*` は `abc` の後に任意の文字が続く名前のすべての要素を選択します。
3. **正規表現**: `&` または `/` で始め、C#の正規表現ルールに従います。たとえば、`&^abc\d{3}$` は `abc` の後に正確に3桁の数字が続く名前にマッチします。\
   正規表現に不慣れな場合、ChatGPTのようなLLMを使用して作成することができます。

**シェルおよびメンブレン要素**の場合、用語「要素」は有限サーフェス要素のパッチを指します。それらの内部順序は、元のメッシュのメッシュ面の順序に対応します。表示のために単一の有限要素を参照するには、要素名に `/` とインデックスを追加します（例: `abc/0` は構造要素 `abc` 内の最初の有限要素を参照します）。\
詳細はサンプルファイル *OptiCroSec\_Shell\_Large.gh* を参照してください。

## コンポーネントによる要素の選択

プロパティに基づいて要素を選択するための「Select Elements」コンポーネントがあります。詳細は[こちら](/jp/3-konpnentorifarensu/3.1-model/3.1.16-select-elements.md)を参照してください。

## ジオメトリに基づく要素の選択

モデル要素の可視性は、*ModelView\_コンポーネントの*「View」\_入力を通じて制御できます。これまでに説明したすべての選択手法がここでも適用できます。さらに、Brep、平面、サーフェス、ベースラインなどのジオメトリ入力も使用できます。

* **Brep:** 要素は、その端点がBrep内にある場合に表示されます。
* **平面とサーフェス:** 要素は、対応する平面またはサーフェス上にある場合に表示されます。
* **ベースライン:** これらは、要素の可視性を判定するために使用される鉛直面を定義します。

複数の選択基準が\_「View」\_入力に与えられた場合、**OR条件**が適用されます。つまり、与えられた基準のうち少なくとも1つを満たす要素が表示されます。

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

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