Name

CG_3DBuffer — Beräknar en 3D-buffert runt en geometri.

Synopsis

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

Beskrivning

Genererar en 3D-buffert runt indatageometrin geom med en angiven radie. Bufferten konstrueras i 3D-rymd och skapar en volymetrisk representation av geometrins omgivning. Parametern segments definierar antalet segment som används för att approximera de krökta delarna av bufferten, med ett minimivärde på 4 segment. Parametern buffer_type anger vilken typ av buffert som ska skapas: 0: Rundad buffert (standard) 1: Platt buffert 2: Kvadratisk buffert

Indatageometrin måste vara en Point eller LineString.

Tillgänglighet: 3.6.0 - kräver SFCGAL >= 2.0.0

Denna metod behöver SFCGAL-backend.

Exempel

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)), ... )

Följande bilder gjordes genom att klistra in utdata från ST_AsX3D-frågan i X3D Viewer.

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

segment=32 (avrundad buffert)

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

5 segment rundade

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

32 segment, runda

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

32 segment, fyrkantiga

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