:github_url: hide .. DO NOT EDIT THIS FILE!!! .. Generated automatically from Godot engine sources. .. Generator: https://github.com/godotengine/godot/tree/3.6/doc/tools/make_rst.py. .. XML source: https://github.com/godotengine/godot/tree/3.6/modules/csg/doc_classes/CSGPolygon.xml. .. _class_CSGPolygon: CSGPolygon ========== **Inherits:** :ref:`CSGPrimitive` **<** :ref:`CSGShape` **<** :ref:`GeometryInstance` **<** :ref:`VisualInstance` **<** :ref:`CullInstance` **<** :ref:`Spatial` **<** :ref:`Node` **<** :ref:`Object` Extrudes a 2D polygon shape to create a 3D mesh. .. rst-class:: classref-introduction-group Description ----------- An array of 2D points is extruded to quickly and easily create a variety of 3D meshes. See also :ref:`CSGMesh` for using 3D meshes as CSG nodes. \ **Note:** CSG nodes are intended to be used for level prototyping. Creating CSG nodes has a significant CPU cost compared to creating a :ref:`MeshInstance` with a :ref:`PrimitiveMesh`. Moving a CSG node within another CSG node also has a significant CPU cost, so it should be avoided during gameplay. .. rst-class:: classref-introduction-group Tutorials --------- - :doc:`Prototyping levels with CSG <../tutorials/3d/csg_tools>` .. rst-class:: classref-reftable-group Properties ---------- .. table:: :widths: auto +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`float` | :ref:`depth` | ``1.0`` | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`Material` | :ref:`material` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`Mode` | :ref:`mode` | ``0`` | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`bool` | :ref:`path_continuous_u` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`float` | :ref:`path_interval` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`PathIntervalType` | :ref:`path_interval_type` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`bool` | :ref:`path_joined` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`bool` | :ref:`path_local` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`NodePath` | :ref:`path_node` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`PathRotation` | :ref:`path_rotation` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`float` | :ref:`path_simplify_angle` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`float` | :ref:`path_u_distance` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`PoolVector2Array` | :ref:`polygon` | ``PoolVector2Array( 0, 0, 0, 1, 1, 1, 1, 0 )`` | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`bool` | :ref:`smooth_faces` | ``false`` | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`float` | :ref:`spin_degrees` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ | :ref:`int` | :ref:`spin_sides` | | +-----------------------------------------------------------+---------------------------------------------------------------------------+------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Enumerations ------------ .. _enum_CSGPolygon_Mode: .. rst-class:: classref-enumeration enum **Mode**: .. _class_CSGPolygon_constant_MODE_DEPTH: .. rst-class:: classref-enumeration-constant :ref:`Mode` **MODE_DEPTH** = ``0`` The :ref:`polygon` shape is extruded along the negative Z axis. .. _class_CSGPolygon_constant_MODE_SPIN: .. rst-class:: classref-enumeration-constant :ref:`Mode` **MODE_SPIN** = ``1`` The :ref:`polygon` shape is extruded by rotating it around the Y axis. .. _class_CSGPolygon_constant_MODE_PATH: .. rst-class:: classref-enumeration-constant :ref:`Mode` **MODE_PATH** = ``2`` The :ref:`polygon` shape is extruded along the :ref:`Path` specified in :ref:`path_node`. .. rst-class:: classref-item-separator ---- .. _enum_CSGPolygon_PathRotation: .. rst-class:: classref-enumeration enum **PathRotation**: .. _class_CSGPolygon_constant_PATH_ROTATION_POLYGON: .. rst-class:: classref-enumeration-constant :ref:`PathRotation` **PATH_ROTATION_POLYGON** = ``0`` The :ref:`polygon` shape is not rotated. \ **Note:** Requires the path's Z coordinates to continually decrease to ensure viable shapes. .. _class_CSGPolygon_constant_PATH_ROTATION_PATH: .. rst-class:: classref-enumeration-constant :ref:`PathRotation` **PATH_ROTATION_PATH** = ``1`` The :ref:`polygon` shape is rotated along the path, but it is not rotated around the path axis. \ **Note:** Requires the path's Z coordinates to continually decrease to ensure viable shapes. .. _class_CSGPolygon_constant_PATH_ROTATION_PATH_FOLLOW: .. rst-class:: classref-enumeration-constant :ref:`PathRotation` **PATH_ROTATION_PATH_FOLLOW** = ``2`` The :ref:`polygon` shape follows the path and its rotations around the path axis. .. rst-class:: classref-item-separator ---- .. _enum_CSGPolygon_PathIntervalType: .. rst-class:: classref-enumeration enum **PathIntervalType**: .. _class_CSGPolygon_constant_PATH_INTERVAL_DISTANCE: .. rst-class:: classref-enumeration-constant :ref:`PathIntervalType` **PATH_INTERVAL_DISTANCE** = ``0`` When :ref:`mode` is set to :ref:`MODE_PATH`, :ref:`path_interval` will determine the distance, in meters, each interval of the path will extrude. .. _class_CSGPolygon_constant_PATH_INTERVAL_SUBDIVIDE: .. rst-class:: classref-enumeration-constant :ref:`PathIntervalType` **PATH_INTERVAL_SUBDIVIDE** = ``1`` When :ref:`mode` is set to :ref:`MODE_PATH`, :ref:`path_interval` will subdivide the polygons along the path. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Property Descriptions --------------------- .. _class_CSGPolygon_property_depth: .. rst-class:: classref-property :ref:`float` **depth** = ``1.0`` .. rst-class:: classref-property-setget - void **set_depth** **(** :ref:`float` value **)** - :ref:`float` **get_depth** **(** **)** When :ref:`mode` is :ref:`MODE_DEPTH`, the depth of the extrusion. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_material: .. rst-class:: classref-property :ref:`Material` **material** .. rst-class:: classref-property-setget - void **set_material** **(** :ref:`Material` value **)** - :ref:`Material` **get_material** **(** **)** Material to use for the resulting mesh. The UV maps the top half of the material to the extruded shape (U along the the length of the extrusions and V around the outline of the :ref:`polygon`), the bottom-left quarter to the front end face, and the bottom-right quarter to the back end face. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_mode: .. rst-class:: classref-property :ref:`Mode` **mode** = ``0`` .. rst-class:: classref-property-setget - void **set_mode** **(** :ref:`Mode` value **)** - :ref:`Mode` **get_mode** **(** **)** The :ref:`mode` used to extrude the :ref:`polygon`. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_path_continuous_u: .. rst-class:: classref-property :ref:`bool` **path_continuous_u** .. rst-class:: classref-property-setget - void **set_path_continuous_u** **(** :ref:`bool` value **)** - :ref:`bool` **is_path_continuous_u** **(** **)** When :ref:`mode` is :ref:`MODE_PATH`, by default, the top half of the :ref:`material` is stretched along the entire length of the extruded shape. If ``false`` the top half of the material is repeated every step of the extrusion. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_path_interval: .. rst-class:: classref-property :ref:`float` **path_interval** .. rst-class:: classref-property-setget - void **set_path_interval** **(** :ref:`float` value **)** - :ref:`float` **get_path_interval** **(** **)** When :ref:`mode` is :ref:`MODE_PATH`, the path interval or ratio of path points to extrusions. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_path_interval_type: .. rst-class:: classref-property :ref:`PathIntervalType` **path_interval_type** .. rst-class:: classref-property-setget - void **set_path_interval_type** **(** :ref:`PathIntervalType` value **)** - :ref:`PathIntervalType` **get_path_interval_type** **(** **)** When :ref:`mode` is :ref:`MODE_PATH`, this will determine if the interval should be by distance (:ref:`PATH_INTERVAL_DISTANCE`) or subdivision fractions (:ref:`PATH_INTERVAL_SUBDIVIDE`). .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_path_joined: .. rst-class:: classref-property :ref:`bool` **path_joined** .. rst-class:: classref-property-setget - void **set_path_joined** **(** :ref:`bool` value **)** - :ref:`bool` **is_path_joined** **(** **)** When :ref:`mode` is :ref:`MODE_PATH`, if ``true`` the ends of the path are joined, by adding an extrusion between the last and first points of the path. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_path_local: .. rst-class:: classref-property :ref:`bool` **path_local** .. rst-class:: classref-property-setget - void **set_path_local** **(** :ref:`bool` value **)** - :ref:`bool` **is_path_local** **(** **)** When :ref:`mode` is :ref:`MODE_PATH`, if ``true`` the :ref:`Transform` of the **CSGPolygon** is used as the starting point for the extrusions, not the :ref:`Transform` of the :ref:`path_node`. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_path_node: .. rst-class:: classref-property :ref:`NodePath` **path_node** .. rst-class:: classref-property-setget - void **set_path_node** **(** :ref:`NodePath` value **)** - :ref:`NodePath` **get_path_node** **(** **)** When :ref:`mode` is :ref:`MODE_PATH`, the location of the :ref:`Path` object used to extrude the :ref:`polygon`. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_path_rotation: .. rst-class:: classref-property :ref:`PathRotation` **path_rotation** .. rst-class:: classref-property-setget - void **set_path_rotation** **(** :ref:`PathRotation` value **)** - :ref:`PathRotation` **get_path_rotation** **(** **)** When :ref:`mode` is :ref:`MODE_PATH`, the :ref:`PathRotation` method used to rotate the :ref:`polygon` as it is extruded. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_path_simplify_angle: .. rst-class:: classref-property :ref:`float` **path_simplify_angle** .. rst-class:: classref-property-setget - void **set_path_simplify_angle** **(** :ref:`float` value **)** - :ref:`float` **get_path_simplify_angle** **(** **)** When :ref:`mode` is :ref:`MODE_PATH`, extrusions that are less than this angle, will be merged together to reduce polygon count. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_path_u_distance: .. rst-class:: classref-property :ref:`float` **path_u_distance** .. rst-class:: classref-property-setget - void **set_path_u_distance** **(** :ref:`float` value **)** - :ref:`float` **get_path_u_distance** **(** **)** When :ref:`mode` is :ref:`MODE_PATH`, this is the distance along the path, in meters, the texture coordinates will tile. When set to 0, texture coordinates will match geometry exactly with no tiling. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_polygon: .. rst-class:: classref-property :ref:`PoolVector2Array` **polygon** = ``PoolVector2Array( 0, 0, 0, 1, 1, 1, 1, 0 )`` .. rst-class:: classref-property-setget - void **set_polygon** **(** :ref:`PoolVector2Array` value **)** - :ref:`PoolVector2Array` **get_polygon** **(** **)** The point array that defines the 2D polygon that is extruded. This can be a convex or concave polygon with 3 or more points. The polygon must *not* have any intersecting edges. Otherwise, triangulation will fail and no mesh will be generated. \ **Note:** If only 1 or 2 points are defined in :ref:`polygon`, no mesh will be generated. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_smooth_faces: .. rst-class:: classref-property :ref:`bool` **smooth_faces** = ``false`` .. rst-class:: classref-property-setget - void **set_smooth_faces** **(** :ref:`bool` value **)** - :ref:`bool` **get_smooth_faces** **(** **)** If ``true``, applies smooth shading to the extrusions. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_spin_degrees: .. rst-class:: classref-property :ref:`float` **spin_degrees** .. rst-class:: classref-property-setget - void **set_spin_degrees** **(** :ref:`float` value **)** - :ref:`float` **get_spin_degrees** **(** **)** When :ref:`mode` is :ref:`MODE_SPIN`, the total number of degrees the :ref:`polygon` is rotated when extruding. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon_property_spin_sides: .. rst-class:: classref-property :ref:`int` **spin_sides** .. rst-class:: classref-property-setget - void **set_spin_sides** **(** :ref:`int` value **)** - :ref:`int` **get_spin_sides** **(** **)** When :ref:`mode` is :ref:`MODE_SPIN`, the number of extrusions made. .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)` .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)` .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)` .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`