[Grasshopper]内外判定をする5つのコンポーネントを解説

grasshopper

今回は、グラスホッパーで内外判定をする5つのコンポーネントを解説します。

それでは、順番に解説していきます。


本記事では、コンポーネントはアイコン表示になっています。


使用する5つのコンポーネント

使用する5つのコンポーネント1
使用する5つのコンポーネント2

今回は、内外判定をすることができる、

  • Point In Curve
  • Point in Curves
  • Point In Brep
  • Point In Breps
  • Shape In Brep

の5つのコンポーネントを解説します。

今回使用したグラスホッパーとライノセラスのデータダウンロードはこちら

ダウンロードできるデータのご利用に関しては、利用規約をご覧ください。

Point In Curve

最初は、Point In Curveについて解説します。

Point In Curveは、点が1つの閉じた線や曲線の内側・線上・外側にあるかを調べることができます。

使用する閉じた曲線と点

今回は例として、上の画像の閉じた曲線と複数の点を使います。

内側か外側か

使用コンポーネント:①PointCurve ③Point In Curve

Point In CurveのP端子に、点のデータをつなげます。

今回は、複数の点を格納しているPointをつなげています。

Point In CurveのC端子に、1つの閉じた線や曲線のデータをつなげます。

今回は、1つの曲線を格納しているCurveをつなげています。

すると、上の画像のように、Point In CurveのR端子から、0・1・2の3つの数値のどれかが出力されます。

0数値は、点が線や曲線の外側にあることを意味しています。

1数値は、点が線や曲線上にあることを意味しています。

2数値は、点が線や曲線の内側にあることを意味しています。

投影された点データ

Point In CurveのP’端子からは、線や曲線がある平面に投影された点データが出力されます。

投影された

例として、複数の点を、曲線より上に配置してみます。

すると、点が曲線ある平面に投影されていることが分かります。

点を取得する

追加コンポーネント:①Equality ②Dispatch

曲線の内側・線上・外側にある点を、それぞれ取得してみます。

Point In CurveのR端子を、EqualityのA端子につなげます。

さらに、内側の点を取得する場合、2の数値をEqualityのB端子につなげます。

線上にある点を取得する場合、1の数値をEqualityのB端子につなげます。

外側の点を取得する場合、0の数値をEqualityのB端子につなげます。

すると、Equalityの=端子から、数値が一致している場合はTrue、一致していない場合はFalseの情報が出力されます。

その後、Equalityの=端子を、DispatchのP端子につなげます。

さらに、元々の点データを、DispatchのL端子につなげます。

今回は、Pointをつなげています。

すると、DispatchのA端子から、内側・線上・外側にある点が出力されます。

今回は、DispatchのA端子をPointにつなげ、点を取得しています。

2の数値

上の画像は、EqualityのB端子に、2の数値を入力した様子です。

1の数値

上の画像は、EqualityのB端子に、1の数値を入力した様子です。

0の数値

上の画像は、EqualityのB端子に、0の数値を入力した様子です。

Point in Curves

次は、Point in Curvesについて解説します。

Point in Curvesは、点が複数の閉じた線や曲線の内側・線上・外側にあるかを調べることができます。

使用する複数の曲線と点

今回は例として、上の画像の3つの閉じた曲線と複数の点を使います。

使用コンポーネント:①PointCurve ③Point in Curves

Point in CurvesのP端子に、点のデータをつなげます。

今回は、複数の点を格納しているPointをつなげています。

Point in CurvesのC端子に、複数の閉じた線や曲線のデータをつなげます。

今回は、3つの曲線を格納しているCurveをつなげています。

すると、上の画像のように、Point in CurvesのR端子から、0・1・2の3つの数値のどれかが出力されます。

0数値は、点が線や曲線の外側にあることを意味しています。

1数値は、点が線や曲線上にあることを意味しています。

2数値は、点が線や曲線の内側にあることを意味しています。

I端子

Point in CurvesのI端子からは、点が線や曲線の内側にある場合は、点を囲っている曲線のインデックス番号(曲線の順番の番号)が出力されます。

点が線や曲線の外側にある場合、-1の数値が出力されます。

点と曲線を確認

追加コンポーネント:①List Item

実際に、点と曲線を取得して見てみます。

今回は、インデックス番号4にある、2の数値を使います。

Pointを、List itemのL端子につなげます。

さらに、4の数値を、List itemのi端子につなげます。

その後、Curveを、List ItemのL端子につなげます。

さらに、2の数値を、List Itemのi端子につなげます。

すると、上の画像のように、インデックス番号2番の曲線と、インデックス番号4番の点を取得できました。

-1

次は、-1の数値の場合を見てみます。

今回は、インデックス番号0の、-1の数値の場合を見てみます。

Pointを、List ItemのL端子につなげます。

さらに、0の数値を、List Itemのi端子につなげます。

外側の点

すると、上の画像のように、外側の点を取得できました。

このように、Point in CurvesのI端子からは、点が線や曲線の内側にある場合、点を囲っている曲線のインデックス番号が出力され、内側にない場合は-1の数値が出力されます。

投影された点データ

Point in CurvesのP’端子からは、線や曲線がある平面に投影された点データが出力されます。

投影

例として、複数の点を、曲線より上に配置してみます。

すると、曲線の内側に点がある場合、それらの点のみ曲線ある平面に投影されていることが分かります。

曲線の外側に点がある場合、それらの点は投影されず、元々の位置に点が留まっています。

追加コンポーネント:①Equality ②Dispatch

複数の曲線の内側・線上・外側にある点を、それぞれ取得してみます。

Point in CurvesのR端子を、EqualityのA端子につなげます。

さらに、内側の点を取得する場合、2の数値をEqualityのB端子につなげます。

線上にある点を取得する場合、1の数値をEqualityのB端子につなげます。

外側の点を取得する場合、0の数値をEqualityのB端子につなげます。

すると、Equalityの=端子から、数値が一致している場合はTrue、一致していない場合はFalseの情報が出力されます。

その後、Equalityの=端子を、DispatchのP端子につなげます。

さらに、元々の点データを、DispatchのL端子につなげます。

今回は、Pointをつなげています。

すると、DispatchのA端子から、内側・線上・外側にある点が出力されます。

今回は、DispatchのA端子をPointにつなげ、点を取得しています。

2

上の画像は、EqualityのB端子に、2の数値を入力した様子です。

1

上の画像は、EqualityのB端子に、1の数値を入力した様子です。

0

上の画像は、EqualityのB端子に、0の数値を入力した様子です。

Point In Brep

次に、Point In Brepについて解説しています。

Point In Brepは、点が1つのBrepモデルの内側か外側にあるかを調べることができます。

使用する複数の点とBrepモデル

今回は例として、上の画像の複数の点と、1つの直方体のBrepモデルを使います。

Point In Brep

使用コンポーネント:①BrepPoint ③Point In Brep

Brepモデルを、Point In BrepのB端子につなげます。

今回は、Brepに格納したモデルをつなげています。

点データを、Point In BrepのP端子につなげます。

今回は、複数の点を格納しているPointをつなげています。

すると、Point In Brepから、点がBrepモデルの内側にある場合はTrue、点がBrepモデルの外側にある場合はFalseの情報が出力されます。

Brepモデルの内側か外側にある点を取得

追加コンポーネント:①Dispatch

実際に、Brepモデルの内側・外側にある点を取得してみます。

Point In Brepを、DispatchのP端子につなげます。

さらに、元々の点データを、DispatchのL端子につなげます。

今回は、Pointをつなげています。

すると、DispatchのA端子から、内側の点データが出力されます。

また、DispatchのB端子から、外側の点データが出力されます。

今回は、DispatchのA端子、もしくはB端子にPointにつなげ、点を取得しています。

A端子

上の画像は、DispatchのA端子から出力される点データの様子です。

B端子

上の画像は、DispatchのB端子から出力される点データの様子です。

Point In Breps

次は、Point In Brepsについて解説します。

Point In Brepsは、点が複数のBrepモデルの内側か外側にあるかを調べることができます。

使用する複数のBrepモデルと点データ

今回は例として、上の画像の複数のBrepモデルと、複数の点データを使います。

Point In Breps

使用コンポーネント:①BrepPoint ③Point In Breps

複数のBrepモデルを、Point In BrepsのB端子につなげます。

今回は、Brepに格納したモデルをつなげています。

点データを、Point In BrepsのP端子につなげます。

今回は、複数の点を格納しているPointをつなげています。

すると、Point In BrepsのI端子から、点がBrepモデルの内側にある場合はTrue、点がBrepモデルの外側にある場合はFalseの情報が出力されます。

Brepモデルのインデックス番号

追加コンポーネント:①List Item

Point In Brepsのi端子からは、点がBrepモデルの内側にある場合、点を囲っているBrepモデルのインデックス番号(Brepモデルの順番の番号)が出力されます。

点がBrepモデルの外側にある場合、-1の数値が出力されます。

例として、Point In Brepsのi端子から出力される、インデックス番号7の2のデータを見てみます。

Pointを、List ItemのL端子につなげます。

さらに、7の数値を、List Itemのi端子につなげます。

その後、Brepを、List ItemのL端子につなげます。

さらに、2の数値を、List Itemのi端子につなげます。

すると、上の画像のように、インデックス番号2のBrepモデルと、インデックス番号7の点データを取得できました。

-1

次は、-1の数値の場合を見てみます。

今回は、インデックス番号2の、-1の数値の場合を見てみます。

Pointを、List ItemのL端子につなげます。

さらに、2の数値を、List Itemのi端子につなげます。

外側の点

すると、上の画像のように、外側の点を取得できました。

このように、Point In Brepsのi端子からは、点がBrepモデルの内側にある場合、点を囲っているBrepモデルのインデックス番号が出力され、内側にない場合は-1の数値が出力されます。

複数のBrepモデルの内側・外側にある点を取得

追加コンポーネント:①Dispatch

実際に、複数のBrepモデルの内側・外側にある点を取得してみます。

Point In BrepsのI端子を、DispatchのP端子につなげます。

さらに、元々の点データを、DispatchのL端子につなげます。

今回は、Pointをつなげています。

すると、DispatchのA端子から、内側の点データが出力されます。

また、DispatchのB端子から、外側の点データが出力されます。

今回は、DispatchのA端子、もしくはB端子にPointにつなげ、点を取得しています。

内側

上の画像は、DispatchのA端子から出力される点データの様子です。

外側

上の画像は、DispatchのB端子から出力される点データの様子です。

Shape in Brep

最後は、Shape in Brepについて解説します。

Shape in Brepは、様々なモデルの種類が、1つのBrepモデルの内側・交差・外側にあるかを調べることができます。

使用するモデル

最初の例として、上の画像の複数の小さい立方体と、大きな立方体のBrepモデルを使います。

Shape in Brep

使用コンポーネント:①Brep ②Shape In Brep

1つのBrepモデルを、Shape in BrepのB端子につなげます。

今回は、Brepに格納したBrepモデルをつなげています。

さらに、内側・交差・外側か調べたい任意の種類のモデルデータを、Shape in BrepのS端子につなげます。

今回は、Brepに格納した複数の小さい立方体をつなげています。

すると、Shape In Brepから、0・1・2のどれかの数値が出力されます。

0の数値の場合、モデルがBrepモデルの内側にあることを意味しています。

1の数値の場合、モデルがBrepモデルと交差していることを意味しています。

2の数値の場合、モデルがBrepモデルの外側にあることを意味しています。

内側・交差・外側のモデルを取得する

追加コンポーネント:①Equality ②Dispatch

実際に、内側・交差・外側にあるモデルを取得してみます。

Shape in BrepのR端子を、EqualityのA端子につなげます。

さらに、内側のモデルを取得する場合、0の数値をEqualityのB端子につなげます。

Brepモデルと交差しているモデルを取得する場合、1の数値をEqualityのB端子につなげます。

外側のモデルを取得する場合、2の数値をEqualityのB端子につなげます。

すると、Equalityの=端子から、数値が一致している場合はTrue、一致していない場合はFalseの情報が出力されます。

その後、Equalityの=端子を、DispatchのP端子につなげます。

さらに、内側・交差・外側か調べたいモデルを、DispatchのL端子につなげます。

今回は、Shape in BrepのS端子につなげているBrepをつなげています。

すると、DispatchのA端子から、内側・交差・外側にあるモデルが出力されます。

0

上の画像は、EqualityのB端子に0の数値を入力した場合です。

1

上の画像は、EqualityのB端子に1の数値を入力した場合です。

上の画像は、EqualityのB端子に2の数値を入力した場合です。

点データの場合
線データの場合

Shape in Brepは、様々なモデルデータでも、内外判定することができます。

上の2枚の画像は、点データと線データで内外判定をした様子です。

今回は以上になります。

Point In Curveコンポーネントを使用しているグラスホッパー記事はこちら↓

Point in Curvesコンポーネントを使用しているグラスホッパー記事はこちら↓

Point In Brepコンポーネントを使用しているグラスホッパー記事はこちら↓

Point In Brepsコンポーネントを使用しているグラスホッパー記事はこちら↓

Shape In Brepコンポーネントを使用しているグラスホッパー記事はこちら↓

コメント

Translate »
タイトルとURLをコピーしました