:github_url: hide .. DO NOT EDIT THIS FILE!!! .. Generated automatically from Godot engine sources. .. Generator: https://github.com/godotengine/godot/tree/master/doc/tools/make_rst.py. .. XML source: https://github.com/godotengine/godot/tree/master/modules/csg/doc_classes/CSGPolygon3D.xml. .. _class_CSGPolygon3D: CSGPolygon3D ============ **Inherits:** :ref:`CSGPrimitive3D` **<** :ref:`CSGShape3D` **<** :ref:`GeometryInstance3D` **<** :ref:`VisualInstance3D` **<** :ref:`Node3D` **<** :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:`CSGMesh3D` 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:`MeshInstance3D` 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:`bool` | :ref:`path_rotation_accurate` | | +-------------------------------------------------------------+-----------------------------------------------------------------------------------+------------------------------------------------+ | :ref:`float` | :ref:`path_simplify_angle` | | +-------------------------------------------------------------+-----------------------------------------------------------------------------------+------------------------------------------------+ | :ref:`float` | :ref:`path_u_distance` | | +-------------------------------------------------------------+-----------------------------------------------------------------------------------+------------------------------------------------+ | :ref:`PackedVector2Array` | :ref:`polygon` | ``PackedVector2Array(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_CSGPolygon3D_Mode: .. rst-class:: classref-enumeration enum **Mode**: :ref:`🔗` .. _class_CSGPolygon3D_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_CSGPolygon3D_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_CSGPolygon3D_constant_MODE_PATH: .. rst-class:: classref-enumeration-constant :ref:`Mode` **MODE_PATH** = ``2`` The :ref:`polygon` shape is extruded along the :ref:`Path3D` specified in :ref:`path_node`. .. rst-class:: classref-item-separator ---- .. _enum_CSGPolygon3D_PathRotation: .. rst-class:: classref-enumeration enum **PathRotation**: :ref:`🔗` .. _class_CSGPolygon3D_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 Z coordinates to continually decrease to ensure viable shapes. .. _class_CSGPolygon3D_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 Z coordinates to continually decrease to ensure viable shapes. .. _class_CSGPolygon3D_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_CSGPolygon3D_PathIntervalType: .. rst-class:: classref-enumeration enum **PathIntervalType**: :ref:`🔗` .. _class_CSGPolygon3D_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_CSGPolygon3D_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_CSGPolygon3D_property_depth: .. rst-class:: classref-property :ref:`float` **depth** = ``1.0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_depth**\ (\ value\: :ref:`float`\ ) - :ref:`float` **get_depth**\ (\ ) When :ref:`mode` is :ref:`MODE_DEPTH`, the depth of the extrusion. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon3D_property_material: .. rst-class:: classref-property :ref:`Material` **material** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_material**\ (\ value\: :ref:`Material`\ ) - :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 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_CSGPolygon3D_property_mode: .. rst-class:: classref-property :ref:`Mode` **mode** = ``0`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_mode**\ (\ value\: :ref:`Mode`\ ) - :ref:`Mode` **get_mode**\ (\ ) The :ref:`mode` used to extrude the :ref:`polygon`. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon3D_property_path_continuous_u: .. rst-class:: classref-property :ref:`bool` **path_continuous_u** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_continuous_u**\ (\ value\: :ref:`bool`\ ) - :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_CSGPolygon3D_property_path_interval: .. rst-class:: classref-property :ref:`float` **path_interval** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_interval**\ (\ value\: :ref:`float`\ ) - :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_CSGPolygon3D_property_path_interval_type: .. rst-class:: classref-property :ref:`PathIntervalType` **path_interval_type** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_interval_type**\ (\ value\: :ref:`PathIntervalType`\ ) - :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_CSGPolygon3D_property_path_joined: .. rst-class:: classref-property :ref:`bool` **path_joined** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_joined**\ (\ value\: :ref:`bool`\ ) - :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_CSGPolygon3D_property_path_local: .. rst-class:: classref-property :ref:`bool` **path_local** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_local**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **is_path_local**\ (\ ) When :ref:`mode` is :ref:`MODE_PATH`, if ``true`` the :ref:`Transform3D` of the **CSGPolygon3D** is used as the starting point for the extrusions, not the :ref:`Transform3D` of the :ref:`path_node`. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon3D_property_path_node: .. rst-class:: classref-property :ref:`NodePath` **path_node** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_node**\ (\ value\: :ref:`NodePath`\ ) - :ref:`NodePath` **get_path_node**\ (\ ) When :ref:`mode` is :ref:`MODE_PATH`, the location of the :ref:`Path3D` object used to extrude the :ref:`polygon`. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon3D_property_path_rotation: .. rst-class:: classref-property :ref:`PathRotation` **path_rotation** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_rotation**\ (\ value\: :ref:`PathRotation`\ ) - :ref:`PathRotation` **get_path_rotation**\ (\ ) When :ref:`mode` is :ref:`MODE_PATH`, the path rotation method used to rotate the :ref:`polygon` as it is extruded. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon3D_property_path_rotation_accurate: .. rst-class:: classref-property :ref:`bool` **path_rotation_accurate** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_rotation_accurate**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **get_path_rotation_accurate**\ (\ ) When :ref:`mode` is :ref:`MODE_PATH`, if ``true`` the polygon will be rotated according to the proper tangent of the path at the sampled points. If ``false`` an approximation is used, which decreases in accuracy as the number of subdivisions decreases. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon3D_property_path_simplify_angle: .. rst-class:: classref-property :ref:`float` **path_simplify_angle** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_simplify_angle**\ (\ value\: :ref:`float`\ ) - :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_CSGPolygon3D_property_path_u_distance: .. rst-class:: classref-property :ref:`float` **path_u_distance** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_path_u_distance**\ (\ value\: :ref:`float`\ ) - :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_CSGPolygon3D_property_polygon: .. rst-class:: classref-property :ref:`PackedVector2Array` **polygon** = ``PackedVector2Array(0, 0, 0, 1, 1, 1, 1, 0)`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_polygon**\ (\ value\: :ref:`PackedVector2Array`\ ) - :ref:`PackedVector2Array` **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. **Note:** The returned array is *copied* and any changes to it will not update the original property value. See :ref:`PackedVector2Array` for more details. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon3D_property_smooth_faces: .. rst-class:: classref-property :ref:`bool` **smooth_faces** = ``false`` :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_smooth_faces**\ (\ value\: :ref:`bool`\ ) - :ref:`bool` **get_smooth_faces**\ (\ ) If ``true``, applies smooth shading to the extrusions. .. rst-class:: classref-item-separator ---- .. _class_CSGPolygon3D_property_spin_degrees: .. rst-class:: classref-property :ref:`float` **spin_degrees** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_spin_degrees**\ (\ value\: :ref:`float`\ ) - :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_CSGPolygon3D_property_spin_sides: .. rst-class:: classref-property :ref:`int` **spin_sides** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_spin_sides**\ (\ value\: :ref:`int`\ ) - :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.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |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.)` .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)` .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)` .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)` .. |bitfield| replace:: :abbr:`BitField (This value is an integer composed as a bitmask of the following flags.)` .. |void| replace:: :abbr:`void (No return value.)`