名前

CG_ExtrudeStraightSkeleton — ストレートスケルトンの押し出し

概要

geometry CG_ExtrudeStraightSkeleton(geometry geom, float roof_height, float body_height = 0);

説明

ポリゴンジオメトリの最大高での押出しを計算します。

[注記]

ストレートスケルトンの (歴史上の)最初の使用例は、おそらく、ポリゴンの屋根を与えて、ストレートスケルトンでテントの配置を得るというものだったでしょう。スケルトンの個々のエッジは平面からオフセット距離分引き上げられ、水が、屋根のどこに落ちるか関係なく、常に輪郭のエッジ (屋根の境界線)に落ちるという点で、結果の屋根は「正しい」ものになります。この関数はこのポリゴンの押出し、別名「屋根」を計算します。引数のbody_height が body_height > 0 となる場合には、ポリゴンはCG_Extrude(polygon, 0, 0, body_height)で押し出されるようになります。結果はこれらの多面体サーフェスの結合となります。

Availability: 3.5.0 - SFCGAL >= 1.5.0が必要です。

SFCGAL >= 1.5.0 が必要

このメソッドにはSFCGALバックエンドが必要です。

Extrude a polygon with a hole into a body and straight-skeleton roof.

Code
WITH data AS (
  SELECT 'POLYGON ((0 0,5 0,5 5,4 5,4 4,0 4,0 0),(1 1,1 2,2 2,2 1,1 1))'::geometry AS input_polygon
)
SELECT input_polygon AS input_polygon,
       CG_ExtrudeStraightSkeleton(input_polygon, 3.0, 2.0) AS straight_skeleton_extrusion
FROM data;
出力:
POLYGON((0 0,5 0,5 5,4 5,4 4,0 4,0 0),(1 1,1 2,2 2,2 1,1 1)) | POLYHEDRALSURFACE Z (((0 0 0,0 4 0,4 4 0,4 5 0,5 5 0,5 0 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((0 0 0,0 0 2,0 4 2,0 4 0,0 0 0)),((0 4 0,0 4 2,4 4 2,4 4 0,0 4 0)),((4 4 0,4 4 2,4 5 2,4 5 0,4 4 0)),((4 5 0,4 5 2,5 5 2,5 5 0,4 5 0)),((5 5 0,5 5 2,5 0 2,5 0 0,5 5 0)),((5 0 0,5 0 2,0 0 2,0 0 0,5 0 0)),((1 1 0,1 1 2,2 1 2,2 1 0,1 1 0)),((2 1 0,2 1 2,2 2 2,2 2 0,2 1 0)),((2 2 0,2 2 2,1 2 2,1 2 0,2 2 0)),((1 2 0,1 2 2,1 1 2,1 1 0,1 2 0)),((0 4 2,0 0 2,0.5 0.5 2.5,0.5 2.5 2.5,1 3 3,0 4 2)),((0 0 2,5 0 2,3.5 1.5 3.5,2.5 0.5 2.5,0.5 0.5 2.5,0 0 2)),((5 0 2,5 5 2,4.5 4.5 2.5,4.5 3.5 2.5,3.5 2.5 3.5,3.5 1.5 3.5,5 0 2)),((5 5 2,4 5 2,4.5 4.5 2.5,5 5 2)),((4 5 2,4 4 2,4.5 3.5 2.5,4.5 4.5 2.5,4 5 2)),((4 4 2,0 4 2,1 3 3,3 3 3,3.5 2.5 3.5,4.5 3.5 2.5,4 4 2)),((2 1 2,1 1 2,0.5 0.5 2.5,2.5 0.5 2.5,2 1 2)),((1 1 2,1 2 2,0.5 2.5 2.5,0.5 0.5 2.5,1 1 2)),((1 2 2,2 2 2,3 3 3,1 3 3,0.5 2.5 2.5,1 2 2)),((2 2 2,2 1 2,2.5 0.5 2.5,3.5 1.5 3.5,3.5 2.5 3.5,3 3 3,2 2 2)))
Figure
Geometry figure for visual-cg-extrudestraightskeleton-01