Dynamo
Primer for v2.0
日本語
日本語
  • この Web サイトについて
  • はじめに
    • Dynamo とは、その動作の仕組みとは
    • Primer ユーザ ガイド、Dynamo コミュニティ、プラットフォーム
  • Dynamo のセットアップ
  • ユーザ インタフェース
    • ワークスペース
    • ライブラリ
  • ノードとワイヤ
  • 基本ノードと概念
    • ノードの索引
    • 計算設計用のジオメトリ
      • ジオメトリの概要
      • ベクトル、平面、座標系
      • 点群
      • 曲線
      • サーフェス
      • 立体
      • メッシュ
    • プログラムの構成要素
      • データ
      • 数学的方法
      • ロジック
      • 文字列
      • 色
    • リストを使用した設計
      • リストの概要
      • リストの操作
      • リストのリスト
      • N 次元のリスト
    • Dynamo のディクショナリ
      • ディクショナリとは
      • [Dictionary]カテゴリのノード
      • コード ブロックにおけるディクショナリ
      • Revit での使用例
  • カスタム ノードとパッケージ
    • カスタム ノード
      • カスタム ノードの概要
      • カスタム ノードを作成する
      • ライブラリへのパブリッシュ
    • パッケージ
      • パッケージの概要
      • パッケージのケース スタディ - Mesh Toolkit
      • パッケージを開発する
      • パッケージをパブリッシュする
      • Zero-Touch Importing
  • Revit 用の Dynamo
    • Revit との連携
    • 選択
    • 編集
    • 作成
    • カスタマイズ
    • 設計図書の作成
  • Dynamo for Civil 3D
    • Civil 3D の接続
    • スタートアップ
    • ノード ライブラリ
    • サンプル ワークフロー
      • 道路
        • 照明柱の配置
      • 土地
        • サービスの配置
      • ユーティリティ
        • 構造物の名前を変更する
      • 軌道
        • クリアランスのエンベロープ
      • 測量
        • ポイント グループ管理
    • 高度なトピック
      • オブジェクト バインド
      • Python と Civil 3D
    • Dynamo プレーヤ
    • 便利なパッケージ
    • リソース
  • Dynamo in Forma Beta
    • Forma で Dynamo Player を設定する
    • Dynamo Player でグラフを追加、共有する
    • Dynamo Player でグラフを実行する
    • Dynamo コンピューティング サービスとデスクトップ版 Dynamo の違い
  • Dynamo でのコーディング
    • コード ブロックと DesignScript
      • コード ブロックとは
      • DesignScript 構文
      • 省略表記
      • 関数
    • DesignScript を使用するジオメトリ
      • DesignScript ジオメトリの基本
      • ジオメトリ プリミティブ
      • ベクトル計算
      • 曲線: 補間および制御点
      • 移動、回転、およびその他の変換
      • サーフェス: 補間、制御点、ロフト、回転
      • ジオメトリのパラメータ化
      • 交差およびトリム
      • ジオメトリのブール演算
      • Python 点ジェネレータ
    • Python
      • Python Script ノード
      • Python と Revit
      • 独自の Python テンプレートを設定する
    • 言語の変更
  • ベスト プラクティス
    • 見やすいプログラムを作成するためのガイドライン
    • スクリプト作成のガイドライン
    • スクリプト リファレンス
    • プログラムを管理する
    • Dynamo で大規模なデータ セットを効率的に操作する
  • サンプル ワークフロー
    • スタートアップ ワークフロー
      • パラメータを使用する花瓶
      • アトラクタ ポイント
    • 概念インデックス
  • 開発者向け Primer
    • ソースから Dynamo をビルドする
      • ソースから DynamoRevit をビルドする
      • Dynamo での依存関係の管理と更新
    • Dynamo 向けの開発
      • スタートアップ
      • Zero-Touch ケース スタディ - グリッド ノード
      • Zero-Touch ノードで Python スクリプトを実行する(C#)
      • Zero-Touch の詳細を確認する
      • Dynamo ノードの高度なカスタマイズ
      • Dynamo パッケージで COM (相互運用)タイプを使用する
      • NodeModel ケース スタディ - カスタム UI
      • Dynamo 2.x 用のパッケージと Dynamo ライブラリを更新する
      • Dynamo 3.x 用のパッケージと Dynamo ライブラリを更新する
      • 拡張機能
      • Dynamo 2.0+ のカスタム パッケージ編成を定義する
      • Dynamo コマンド ライン インタフェース
      • Dynamo の統合
      • Dynamo for Revit 向けの開発
      • パッケージをパブリッシュする
      • Visual Studio からパッケージをビルドする
      • パッケージとしての拡張機能
    • プル リクエスト
    • テストによる期待
    • サンプル
  • 付録
    • よくある質問(FAQ)
    • ビジュアル プログラミングと Dynamo
    • リソース
    • リリース ノート
    • 便利なパッケージ
    • サンプル ファイル
    • ホスト統合マップ
    • PDF をダウンロード
    • Dynamo のキーボード ショートカット
Powered by GitBook
On this page
  • リストの概要
  • ゼロで始まるインデックス
  • 入力と出力
  • レーシング
  • 複製とは
  • 演習
  • 最短リスト
  • 最長リスト
  • 直積
Edit on GitHub
Export as PDF
  1. 基本ノードと概念
  2. リストを使用した設計

リストの概要

Previousリストを使用した設計Nextリストの操作

Last updated 28 days ago

リストの概要

リストとは、要素(項目)の集合です。例として、1 房のバナナを考えてみましょう。1 本のバナナが、リスト(房)内の 1 つの項目になります。それぞれのバナナをばらばらに取り上げるより、房をまとめて持ち上げる方が簡単です。同じことが、データ構造内のパラメータに基づく関係によって各要素をグループ化する場合についても当てはまります。

日用品を購入する場合、購入した商品をすべて買い物カゴに入れます。このカゴも、リストと考えることができます。たとえば、3 房のバナナを使用して 多くの バナナ ブレッドを作るとします。この場合、すべてのバナナが入っている袋がバナナの房のリストで、それぞれの房がバナナのリストになります。この袋は 2 次元の「リストのリスト」で、バナナの房は 1 次元の「リスト」です。

Dynamo では、リスト データには順序が付けられ、各リストの最初の項目にはインデックス「0」が割り当てられます。次のセクションでは、Dynamo におけるリストの定義の仕組みと、複数のリストの相互関係について説明します。

ゼロで始まるインデックス

リストのインデックスは、1 ではなく必ず 0 から始まります。これは、最初は不思議に感じるかもしれません。今後、リストの最初の項目と言う場合は、インデックス 0 の付いた項目のことを意味します。

たとえば、右手の指を使って数を数える場合、1 から 5 の順序で数えます。0 から数え始めることはほとんどないはずです。しかし、右手の指を Dynamo のリストだと仮定すると、それぞれの指に 0 から 4 のインデックスが割り当てられることになります。プログラミングの初心者にとっては少し不思議に感じられるかもしれませんが、ほとんどのコンピュータ システムでは、インデックスの値はゼロで始まるのが普通です。

ここでも、引き続きリスト内に 5 つの項目が含まれています。ただし、最初の項目に 0 のインデックス値が割り当てられているものと仮定して説明を続けます。リストに格納できる項目は、数値だけではありません。Dynamo でサポートされているデータ タイプであれば、点、曲線、サーフェス、ファミリなど、任意のデータ タイプをリスト内に格納することができます。

a.インデックス

b.点

c.項目

多くの場合、リストに格納されているデータのタイプを確認する最も簡単な方法は、ノードの出力を Watch ノードに接続する方法です。既定では、Watch ノードにはリストの左側のすべてのインデックスと、右側のすべてのデータ項目が自動的に表示されます。

これらのインデックスは、リストを操作する場合の重要な要素です。

入力と出力

リストの入力と出力は、使用する Dynamo ノードによって異なります。例として、5 つの点を持つリストのノードの出力を PolyCurve.ByPoints ノードと Circle.ByCenterPointRadius ノードに接続してみましょう。

  1. PolyCurve.ByPoints ノードの points 入力には、Point[] が必要です。これは、点のリストを表しています。

  2. PolyCurve.ByPoints ノードの出力は、5 つの点を持つリストから作成された単一のポリカーブです。

  3. Circle.ByCenterPointRadius ノードの centerPoint 入力には、Point が必要です。

  4. Circle.ByCenterPointRadius ノードの出力は、5 つの円を持つリストです。それぞれの円の中心が、元のリスト内の点に対応しています。

PolyCurve.ByPoints と Circle.ByCenterPointRadius の入力データは同じですが、Polycurve.ByPoints ノードは 1 つのポリカーブを返し、Circle.ByCenterPointRadius ノードは各点を中心とする 5 つの円を返します。この場合、5 つの点をつなぐ曲線としてポリカーブが描画され、Circle.ByCenterPointRadius ノードは各点を中心とする個別の円を描画します。これは、直感的に理解することができます。では、データには何が起きているのでしょうか。

Polycurve.ByPoints の points 入力の上にカーソルを置くと、この入力に Point[] が必要であることがわかります。最後の角括弧に注意してください。これは、点のリストであることを表しています。ポリカーブを作成するには、ポリカーブごとにリストを入力する必要があります。入力された各リストは、Polycurve.ByPoints ノードによって 1 つのポリカーブに集約されます。

一方、Circle.ByCenterPointRadius ノードの centerPoint 入力には、Point が必要です。このノードはリストの項目である 1 つの点を取得し、それを円の中心として定義します。入力されたデータから 5 つの円が生成されるのは、このためです。Dynamo の入力に関するこれらの違いを認識しておくと、ノードによるデータ処理の仕組みを正しく理解することができます。

レーシング

データの一致は、明確に解決することができない問題です。このような問題は、異なるサイズの入力をノードに渡すときに発生します。データ一致アルゴリズムを変更すると、結果が大きく変わってしまうことがあります。

例として、2 点の間に直線セグメントを作成するノード(Line.ByStartPointEndPoint)を考えてみます。このノードは、点の座標を指定する 2 つの入力パラメータを使用します。

最短リスト

最も単純な方法は、一方のリストが終了するまで、入力された点を 1 対 1 で接続していく方法です。これは、「最短リスト」アルゴリズムと呼ばれます。Dynamo ノードの既定の動作です。

最長リスト

「最長リスト」アルゴリズムの場合、すべてのリストの最後の項目に達するまで、同じ要素を繰り返し使用して入力が接続されたままの状態になります。

直積

最後に、「直積」方式について説明します。この方式では、考えられる接続がすべて生成されます。

これらの点の集まりの間に直線を描画する場合、いくつかの方法があります。レーシング オプションを使用するには、ノードの中心を右クリックして[レーシング]メニューを選択します。

複製とは

たとえば、ブドウが一房あるとします。グレープ ジュースを作ろうとする場合、粒を 1 つ 1 つ絞るのではなく、丸ごとジューサーに入れるでしょう。Dynamo の複製も同様に機能します。操作を一度に 1 つずつの項目に適用するのではなく、Dynamo で一度にリスト全体に適用します。

Dynamo ノードは、リストを操作していることを自動的に認識し、複数の要素に操作を適用します。つまり、手動で項目を繰り返す必要はありません。自動で実行されます。しかし、リストが複数ある場合、Dynamo はリストの処理方法をどのように決定するのでしょうか。

主に 2 つの方法があります。

直交座標系複製

たとえば、キッチンでフルーツ ジュースを作っているとします。フルーツのリスト({apple, orange, pear})と、各ジュース用の決まった分量の水(1 cup)があります。同じ量の水を使って、それぞれのフルーツでジュースを作るとします。このような場合に役立つのが直交座標系複製です。

つまり、Dynamo では、フルーツのリストを Juice.Maker ノードの fruit 入力に入れ、water 入力はすべてカップ 1 個になります。次に、ノードは各フルーツを個別に処理し、一定量の水と組み合わせます。結果は次のとおりです。

apple juice with 1 cup of water orange juice with 1 cup of water pear juice with 1 cup of water

各フルーツは同じ量の水とのペアになります。

Zip 複製

Zip 複製は仕組みが少し異なります。フルーツ({apple, orange, pear})と砂糖の量({2 tbsp, 3 tbsp, 1 tbsp})の 2 つのリストがあるとすると、Zip 複製では各リストの対応する項目を結合します。例:

apple juice with 2 tablespoons of sugar orange juice with 3 tablespoons of sugar pear juice with 1 tablespoon of sugar

各フルーツは、対応する量の砂糖とのペアになっています。

演習

下のリンクをクリックして、サンプル ファイルをダウンロードします。

すべてのサンプルファイルの一覧については、付録を参照してください。

次の図を使用して、レーシング操作について説明します。ここでは、上記の基準ファイルを使用して、最短リスト、最長リスト、直積を定義します。

Point.ByCoordinates ノードでレーシングを変更しますが、上図のグラフについては何も変更しません。

最短リスト

レーシング オプション(既定のオプションも同様)として_最短リスト_を選択すると、5 つのポイントで構成される基本的な対角線が得られます。最短リストのレーシングは、2 つのリストのうち短い方のリストの最後の項目に達した場合に動作が終了します。そのためこの例では、5 つの点が含まれているリストの最後に達すると、レーシング動作が停止します。

最長リスト

レーシングを[最長リスト]に変更すると、垂直方向に伸びる対角線が生成されます。上の概念図のように、長い方のリストの最後の項目に達するまで、短い方のリスト(項目数が 5 のリスト)の最後の項目が繰り返し使用されます。

直積

レーシングを[直積]に変更すると、各リスト間で考えられるすべての組み合わせの 5x10 の点のグリッドが生成されます。これは、上の概念図に示す直積に該当するデータ構造です。ただし、ここで使用しているデータは、「リストのリスト」です。ポリカーブを接続すると、各リストは X 値によって定義され、垂直な直線の列が生成されていることがわかります。

写真:

この仕組みの詳細については、「」を参照してください。

Augustus Binu
複製とレーシングのガイド
3KB
Lacing.dyn
バナナ
入力例
入力例
入力例
入力例