境界矩形は、ネットワーク、可視領域、ネットワークエディタペイン内のノードのサイズと位置を表現することができます。
メソッド ¶
__init__(x1, y1, x2, y2)
浮動小数点で指定した境界を使って、新しい境界矩形を構築します。
setTo(bounds_sequence)
(xmin, ymin, xmax, ymax)値のシーケンスを指定して、境界矩形の位置を設定します。
そのタプルのサイズが4つでない場合は、hou.InvalidSizeを引き起こします。
isValid()
→ bool
この境界矩形が有効であるかどうかを返します。これは、その境界矩形が何かしらの方法で初期化されたかどうかを意味します。
>>> hou.BoundingRect().isValid() False >>> hou.BoundingRect(0, 0, 0, 0).isValid() True >>> hou.BoundingRect(0, 0, 0, 0).isValid() True
isAlmostEqual(rect, tolerance=0.00001)
→ bool
この境界矩形が許容値の範囲内で他の境界矩形と同じかどうかを返します。
>>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> subrect = hou.BoundingRect(0.001, 0.001, 0.999, 1.001) >>> unitrect.isAlmostEqual(subrect) False >>> unitrect.isAlmostEqual(subrect, 0.01) True
size()
→ hou.Vector2
この境界矩形のx
軸とy
軸でのサイズを表現したベクトルを返します。
このメソッドは以下のように実装することができます:
def size(self): return self.max() - self.min()
center()
→ hou.Vector2
境界矩形の中心の位置を返します。
このメソッドは以下のように実装することができます:
def center(self): return (self.min() + self.max()) * 0.5
contains(point)
→ bool
位置を表現した2つのfloatのシーケンス(例えばhou.Vector2)を指定すると、その位置が境界矩形内にあるかどうかを返します。
>>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> unitrect.contains((0.5, 0.5)) True >>> unitrect.contains((1, 1)) True >>> unitrect.contains((0, 0)) True >>> unitrect.contains((1.01, 0.5)) False
contains(rect)
→ bool
hou.BoundingRectオブジェクトを指定すると、このオブジェクトで表現されている矩形の内側に矩形があるかどうかを返します。
>>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> unitrect.contains(hou.BoundingRect(0.5, 0.5, 1.0, 1.0)) True >>> unitrect.contains(hou.BoundingRect(0.5, 0.5, 1.5, 1.5)) False
intersects(point0, point1)
→ bool
2つの端点(2個のfloatのシーケンスで指定)で定義されたラインを指定すると、そのラインがこの矩形と交差していればTrueを返します。
>>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> unitrect.intersects((0.5, 1.5), (0.5, -0.5)) True >>> unitrect.intersects((0.5, 1.5), (-0.5, 1.5)) False
intersects(point0, point1, point2)
→ bool
3つの点(2個のfloatのシーケンスで指定)で定義された三角形を指定すると、その三角形の一部または全部がこの矩形と重なっていればTrueを返します。
>>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> unitrect.intersects((-1.0, -1.0), (4.0, -1.0), (-1.0, 4.0)) True >>> unitrect.intersects((0.5, 2.0), (2.0, 0.5), (2.0, 2.0)) False
intersects(rect)
→ bool
hou.BoundingRectオブジェクトを指定すると、その矩形の一部または全部がこのオブジェクトで表現された矩形と重なっていればTrueを返します。
>>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> unitrect.intersects(hou.BoundingRect(0.5, 0.5, 1.0, 1.0)) True >>> unitrect.intersects(hou.BoundingRect(0.5, 0.5, 1.5, 1.5)) True >>> unitrect.intersects(hou.BoundingRect(1.5, 1.5, 2.5, 2.5)) False
closestPoint(point)
→ hou.Vector2
位置を表現した2つのfloatのシーケンス(例えばhou.Vector2)を指定すると、その指定したポイントに最も近い境界矩形内の位置を返します。
>>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> unitrect.closestPoint((0.5, 0.5)) <hou.Vector2 [0.5, 0.5]> >>> unitrect.closestPoint((100, 0.5)) <hou.Vector2 [1.0, 0.5]> >>> unitrect.closestPoint((-10, -5)) <hou.Vector2 [0, 0]>
getOffsetToAvoid(bounds, direction = None)
→ hou.Vector2
この境界矩形がbounds
矩形と重ならないように移動させなければならない最小距離を表現したベクトルを返します。
direction
にhou.Vector2を指定することで、そのオフセットさせる方向を指定することができます。
境界矩形が重なっていなければ、その結果はhou.Vector2(0.0, 0.0)
になります。
>>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> subrect = hou.BoundingRect(0.2, 0.4, 0.8, 0.6) >>> unitrect.getOffsetToAvoid(subrect) <hou.Vector2 [0, 0.6]> >>> unitrect.getOffsetToAvoid(subrect, hou.Vector2(1.0, 0.0)) <hou.Vector2 [0.8, 0]> >>> unitrect.getOffsetToAvoid(subrect, hou.Vector2(1.0, 1.0)) <hou.Vector2 [0.6, 0.6]>
translate(offset)
offsetパラメータに2つのfloatのタプルまたはhou.Vector2を渡すことで、その量だけこの矩形が移動します。
>>> rect = hou.BoundingRect(1, 1, 2, 2) >>> rect.translate(hou.Vector2(1, -1)) >>> rect <hou.BoundingRect [2, 0, 3, 1]>
scale(scale)
scaleパラメータに2つのfloatのタプルまたはhou.Vector2を渡すことで、その量だけこの矩形がスケールします。 マイナスの値を渡すと、左下コーナーが右上コーナーの上側または右側になった間違った矩形になってしまいます。
>>> rect = hou.BoundingRect(1, 1, 2, 2) >>> rect.scale(hou.Vector2(2, 3)) >>> rect <hou.BoundingRect [2, 3, 4, 6]> >>> rect.scale((-1, -1)) >>> rect <hou.BoundingRect [-2, -3, -4, -6]> >>> rect.isValid() False
expand(offset)
offsetパラメータに2つのfloatのタプルまたはhou.Vector2を渡すことで、矩形の中心からその距離だけその矩形のエッジが移動します。 このoffsetは矩形の両側に適用されるので、実際にはその値の2倍の距離だけ矩形の幅と高さが変わります。
offsetにマイナス値を渡すことで、その矩形を縮小させることができますが、その矩形を現行サイズよりも大きく縮小させると、間違った矩形になってしまいます。
>>> rect = hou.BoundingRect(1, 1, 2, 2) >>> rect.expand((1, 1)) >>> rect <hou.BoundingRect [0, 0, 3, 3]> >>> rect.expand((0, -2)) >>> rect <hou.BoundingRect [0, 2, 3, 1]> >>> rect.isValid() False
enlargeToContain(point_or_rect)
指定したエレメントが含まれるように境界矩形を拡大します。 このエレメントには、位置または他の境界矩形を表現した2つのfloatのシーケンス(例えばhou.Vector2)を指定することができます。 そのエレメントがこの矩形に既に完全に含まれていて拡大する必要がなければ、何も変更されません。
>>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> unitrect.enlargeToContain((2, 0.5)) >>> unitrect <hou.BoundingRect [0, 0, 2, 1]> >>> unitrect = hou.BoundingRect(0, 0, 1, 1) >>> unitrect.enlargeToContain(hou.BoundingRect(0.5, 0.5, 2, 1.5)) >>> unitrect <hou.BoundingRect [0, 0, 2, 1.5]>
intersect(rect)
hou.BoundingRectオブジェクトを指定すると、このオブジェクト内の矩形を2つの矩形が重なっている領域になるように更新します。
>>> rect = hou.BoundingRect(0, 0, 1, 1) >>> rect.intersect(hou.BoundingRect(0.5, 0.5, 1.5, 1.5)) >>> rect <hou.BoundingRect [0.5, 0.5, 1, 1]>