Name

CG_3DBuffer — 计算几何体周围的三维缓冲区。

Synopsis

geometry CG_3DBuffer(geometry geom, float8 radius, integer segments, integer buffer_type);

描述

生成输入几何体 geom 周围指定半径 radius 的三维缓冲区。缓冲区将在三维空间内生成,并形成几何体周围的立体表示。segments 参数指定缓冲区曲线部分的近似分割数。buffer_type 参数指定缓冲区生成类型:0: 球形缓冲区(默认)1: 平面缓冲区2: 方形缓冲区

可用性:3.6.0 - 需要 SFCGAL>= 2.0.0

该方法需要SFCGAL后端。

该函数支持 3d 并且不会丢失 z-index。

该函数支持多面体曲面。

此函数支持三角形和不规则三角网面 (TIN)。

示例

SELECT ST_AsText(CG_3DBuffer('POINT(0 0 0)', 1, 8, 0));
-- Result: POLYHEDRALSURFACE Z (((0 0 1, 0.5 -0.5 0.71, 0 -0.71 0.71, 0 0 1)), ... )

下一张图片是通过将 ST_AsX3D 查询的输出粘贴到 X3D Viewer 中进行绘制的结果。

SELECT string_agg('<Shape
>' || ST_AsX3D(cgbuffer3d_output)  || '<Appearance>
          <Material diffuseColor="0 0.8 0.2" specularColor="0 1 0"/>
        </Appearance>
    </Shape
>', '');

segments=32(球形缓冲区)

SELECT CG_3DBuffer(ST_GeomFromText('POINT(100 90)'), 50,32,0);

5边形球

SELECT CG_3DBuffer(
 ST_GeomFromText('POINT(100 90)'),
 50,5,0);
            

32边球形

SELECT CG_3DBuffer(
  ST_GeomFromText(
    'LINESTRING(50 50,150 150,150 50)'
    ),
 10,32,0);
            

32边方形

SELECT CG_3DBuffer(
  ST_GeomFromText(
    'LINESTRING(50 50,150 150,150 50)'
    ),
 10,32,2);