# アトラクタ ポイント

アトラクタ ポイントは、ジオメトリ パターンを試すのに適しています。距離に基づいてオブジェクトを徐々に変化させるために使用できます。

このワークフローでは、次の方法を学習します。

* リストを作成、管理、編集する。
* 直接操作を使用して 3D プレビューでポイントを移動する。
* 実行モードを変更する。

## 目的を定義する

この演習では円を作成し、近接する点までの距離により、円の半径の入力値を定義します。この場合、円を作成することが「*目的*」で、近接する点までの距離が「*関係*」になります。

> 距離ベースの関係を定義する点は、通常「アトラクタ」と呼ばれます。ここでは、アトラクタ点までの距離を使用して、円の大きさを指定します。

## 次のステップ

> 下のリンクをクリックして、サンプル ファイルをダウンロードします。
>
> すべてのサンプル ファイルの一覧については、付録を参照してください。

目的と関係を確認したところで、グラフの作成を開始します。グラフを作成するには、Dynamo が実行するアクションの順番を表すノードが必要になります。まず、**Number**、**Number Slider**、**Point.ByCoordinates**、**Geometry.DistanceTo、Circle.ByCenterPointRadius** の各ノードを追加します。

!

> 1. \[Input] > \[Basic] > \[**Number**]を選択します。
> 2. \[Input] > \[Basic] > \[**Number Slider**]を選択します。
> 3. \[Geometry] > \[Points] > \[Point] > \[**By Coordinates(x,y,z)**]を選択します。
> 4. \[Geometry] > \[Modifiers] > \[Geometry] > \[**DistanceTo**]を選択します。
> 5. \[Geometry] > \[Curves] > \[Circle] > \[**ByCenterPointRadius**]を選択します。

### ノードをワイヤで接続する

ノードを追加したら、そのノードのポートをワイヤで接続する必要があります。この接続により、データのフローが定義されます。

!

> 1. **Number** ノードを **Point.ByCoordinates** ノードに接続します。
> 2. **Number Sliders** ノードを **Point.ByCoordinates** ノードに接続します。
> 3. **Point.ByCoordinates** (2)ノードを **DistanceTo** ノードに接続します。
> 4. **Point.ByCoordinates** ノードと **DistanceTo** ノードを **Circle.ByCenterPointRadius** ノードに接続します。

### プログラムを実行する

プログラム フローの定義が完了したら、後はプログラム フローの実行を Dynamo に対して指示するだけです。プログラムを実行すると、自動的に実行したか手動モードで\[実行]をクリックして実行したかに関係なく、データがワイヤ経由で送信され、結果が 3D プレビューに表示されます。

!

> 1. \[実行]をクリック - 実行バーが手動モードになっている場合は、\[実行]をクリックしてグラフを実行する必要があります。
> 2. ノードのプレビュー - ノードの右下隅にあるボックス上にカーソルを合わせると、ポップアップに結果が表示されます。
> 3. 3D プレビュー - ノードを使用してジオメトリを作成した場合は、そのジオメトリが 3D プレビューに表示されます。
> 4. 作成ノードに関する出力ジオメトリが表示されます。

### **Code Block** を追加する

プログラムが稼働している場合、アトラクタ点を通過する円が 3D プレビューに表示されます。この状態で、さらに詳細やコントロールを追加することができます。ここでは、半径に対する影響を調整できるように、Circle ノードの入力を調整しましょう。別の **Number Slider** ノードをワークスペースに追加してから、ワークスペースの空白領域をダブルクリックして **Code Block** ノードを追加します。次に、Code Block ノードのフィールドで「`X/Y`」を指定します。

!

> 1. **Code Block**
> 2. **DistanceTo** ノードと **Number Slider** ノードを **Code Block** ノードに接続します。
> 3. **Code Block** ノードを **Circle.ByCenterPointRadius** ノードに接続します。

### シーケンスを使用する

単純なプログラムを作成して次第に複雑なものにしていく方法は、プログラムを段階的に開発するための効果的な方法です。1 つの円で機能するプログラムを作成したら、複数の円でも機能するようにプログラムの性能を拡張してみましょう。1 つの中心点の代わりに点のグリッドを使用し、生成されるデータ構造の変更を適用すると、プログラムによって多くの円が作成されます。各円の半径の値は、アトラクタ点までの調整された距離によって定義されたユニークな値になります。

!

> 1. **Number Sequence** ノードを追加して **Point.ByCoordinates** ノードの入力を置き換え、Point.ByCoordinates ノードを右クリックして\[レーシング] > \[外積]を選択します。
> 2. Point.ByCoordinates ノードの後に **Flatten** ノードを追加します。リストを完全にフラット化するには、`amt` 入力を既定の `-1` のままにします。
> 3. 3D プレビューが円のグリッドによって更新されます。

### 直接操作で値を調整する

場合によっては、数値を操作しない方がいいことがあります。このような場合、背景の 3D プレビューをナビゲートする際に、点ジオメトリを手動で操作することができます。また、点によって作成された他のジオメトリをコントロールすることもできます。たとえば、**Sphere.ByCenterPointRadius** ノードの場合、直接操作を行うこともできます。点の位置は、**Point.ByCoordinates** ノードで X、Y、Z の値を使用してコントロールすることができます。ただし、直接操作の場合、**3D プレビュー ナビゲーション** モードで点を手動で移動することにより、スライダの値を更新することができます。この方法により、点の場所を識別する個別の値セットを直感的にコントロールすることができます。

!

> 1. **直接操作**を使用するには、移動する点のパネルを選択します。選択した点の上に矢印が表示されます。
> 2. **3D プレビュー ナビゲーション** モードに切り替えます。

> 1. 点の上にカーソルを合わせると、X 軸、Y 軸、Z 軸が表示されます。
> 2. 色付きの矢印をクリックして対応する軸にドラッグすると、手動で移動した点に合わせて **Number Slider** ノードの値が更新されます。

!

> 1. **直接操作**を実行する前は、1 つのスライダだけが **Point.ByCoordinates** コンポーネントに接続されていたことに注意してください。点を X 方向に手動で移動すると、X 入力用として新しい **Number Slider** ノードが自動的に生成されます。
