user: Give a detailed overview of Curves(ID): syntax, arguments, return values, common patterns.

assistant: # Curves(ID)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`ID`](bpy.types.ID.html#bpy.types.ID "bpy.types.ID")

*class* bpy.types.Curves(*ID*)
:   Hair data-block for hair curves

    animation_data
    :   Animation data for this data-block

        Type:
        :   [`AnimData`](bpy.types.AnimData.html#bpy.types.AnimData "bpy.types.AnimData"), (readonly)

    attributes
    :   Geometry attributes

        Type:
        :   [`AttributeGroupCurves`](bpy.types.AttributeGroupCurves.html#bpy.types.AttributeGroupCurves "bpy.types.AttributeGroupCurves") [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`Attribute`](bpy.types.Attribute.html#bpy.types.Attribute "bpy.types.Attribute"), (readonly)

    color_attributes
    :   Geometry color attributes

        Type:
        :   [`AttributeGroupCurves`](bpy.types.AttributeGroupCurves.html#bpy.types.AttributeGroupCurves "bpy.types.AttributeGroupCurves") [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`Attribute`](bpy.types.Attribute.html#bpy.types.Attribute "bpy.types.Attribute"), (readonly)

    curve_offset_data
    :   Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`IntAttributeValue`](bpy.types.IntAttributeValue.html#bpy.types.IntAttributeValue "bpy.types.IntAttributeValue"), (readonly)

    curves
    :   All curves in the data-block

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`CurveSlice`](bpy.types.CurveSlice.html#bpy.types.CurveSlice "bpy.types.CurveSlice"), (readonly)

    materials
    :   Type:
        :   [`IDMaterials`](bpy.types.IDMaterials.html#bpy.types.IDMaterials "bpy.types.IDMaterials") [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`Material`](bpy.types.Material.html#bpy.types.Material "bpy.types.Material"), (readonly)

    normals
    :   The curve normal value at each of the curve’s control points

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`FloatVectorValueReadOnly`](bpy.types.FloatVectorValueReadOnly.html#bpy.types.FloatVectorValueReadOnly "bpy.types.FloatVectorValueReadOnly"), (readonly)

    points
    :   Control points of all curves

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`CurvePoint`](bpy.types.CurvePoint.html#bpy.types.CurvePoint "bpy.types.CurvePoint"), (readonly)

    position_data
    :   Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`FloatVectorAttributeValue`](bpy.types.FloatVectorAttributeValue.html#bpy.types.FloatVectorAttributeValue "bpy.types.FloatVectorAttributeValue"), (readonly)

    selection_domain
    :   Type:
        :   enum in [Attribute Curves Domain Items](bpy_types_enum_items/attribute_curves_domain_items.html#rna-enum-attribute-curves-domain-items), default `'POINT'`

    surface
    :   Mesh object that the curves can be attached to

        Type:
        :   [`Object`](bpy.types.Object.html#bpy.types.Object "bpy.types.Object")

    surface_collision_distance
    :   Distance to keep the curves away from the surface

        Type:
        :   float in [1.192e-07, inf], default 0.005

    surface_uv_map
    :   The name of the attribute on the surface mesh used to define the attachment of each curve

        Type:
        :   string, default “”, (never None)

    use_mirror_x
    :   Enable symmetry in the X axis

        Type:
        :   boolean, default False

    use_mirror_y
    :   Enable symmetry in the Y axis

        Type:
        :   boolean, default False

    use_mirror_z
    :   Enable symmetry in the Z axis

        Type:
        :   boolean, default False

    use_sculpt_collision
    :   Enable collision with the surface while sculpting

        Type:
        :   boolean, default False

    add_curves(*sizes*)
    :   add_curves

        Parameters:
        :   **sizes** (*int array* *of* *1 items in* *[**0**,* *inf**]*) – Sizes, The number of points in each curve

    remove_curves(*\**, *indices=(0,)*)
    :   Remove all curves. If indices are provided, remove only the curves with the given indices.

        Parameters:
        :   **indices** (*int array* *of* *1 items in* *[**0**,* *inf**]**,* *(**optional**)*) – Indices, The indices of the curves to remove

    resize_curves(*sizes*, *\**, *indices=(0,)*)
    :   Resize all existing curves. If indices are provided, resize only the curves with the given indices. If the new size for a curve is smaller, the curve is trimmed. If the new size for a curve is larger, the new end values are default initialized.

        Parameters:
        :   - **sizes** (*int array* *of* *1 items in* *[**1**,* *inf**]*) – Sizes, The number of points in each curve
            - **indices** (*int array* *of* *1 items in* *[**0**,* *inf**]**,* *(**optional**)*) – Indices, The indices of the curves to resize

    reorder_curves(*new_indices*)
    :   Reorder the curves by the new indices.

        Parameters:
        :   **new_indices** (*int array* *of* *1 items in* *[**0**,* *inf**]*) – New indices, The new index for each of the curves

    set_types(*\**, *type='CATMULL_ROM'*, *indices=(0,)*)
    :   Set the curve type. If indices are provided, set only the types with the given curve indices.

        Parameters:
        :   - **type** (enum in [Curves Type Items](bpy_types_enum_items/curves_type_items.html#rna-enum-curves-type-items), (optional)) – Type
            - **indices** (*int array* *of* *1 items in* *[**0**,* *inf**]**,* *(**optional**)*) – Indices, The indices of the curves to resize

    unit_test_compare(*\**, *curves=None*, *threshold=7.1526e-06*)
    :   unit_test_compare

        Parameters:
        :   - **curves** ([`Curves`](#bpy.types.Curves "bpy.types.Curves"), (optional)) – Curves to compare to
            - **threshold** (*float in* *[**0**,* *inf**]**,* *(**optional**)*) – Threshold, Comparison tolerance threshold

        Returns:
        :   Return value, String description of result of comparison

        Return type:
        :   string, (never None)

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type