user: What is CurveProfile(bpy_struct) and how is it used in Blender Python scripting?

assistant: # CurveProfile(bpy_struct)

base class — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct")

*class* bpy.types.CurveProfile(*bpy_struct*)
:   Profile Path editor used to build a profile path

    points
    :   Profile control points

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

    preset
    :   - `LINE`
          Line – Default.
        - `SUPPORTS`
          Support Loops – Loops on each side of the profile.
        - `CORNICE`
          Cornice Molding.
        - `CROWN`
          Crown Molding.
        - `STEPS`
          Steps – A number of steps defined by the segments.

        Type:
        :   enum in [`'LINE'`, `'SUPPORTS'`, `'CORNICE'`, `'CROWN'`, `'STEPS'`], default `'LINE'`

    segments
    :   Segments sampled from control points

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

    use_clip
    :   Force the path view to fit a defined boundary

        Type:
        :   boolean, default False

    use_sample_even_lengths
    :   Sample edges with even lengths

        Type:
        :   boolean, default False

    use_sample_straight_edges
    :   Sample edges with vector handles

        Type:
        :   boolean, default False

    update()
    :   Refresh internal data, remove doubles and clip points

    reset_view()
    :   Reset the curve profile grid to its clipping size

    initialize(*totsegments*)
    :   Set the number of display segments and fill tables

        Parameters:
        :   **totsegments** (*int in* *[**1**,* *1000**]**,* *(**never None**)*) – The number of segment values to initialize the segments table with

    evaluate(*length_portion*)
    :   Evaluate the at the given portion of the path length

        Parameters:
        :   **length_portion** (*float in* *[**0**,* *1**]*) – Length Portion, Portion of the path length to travel before evaluation

        Returns:
        :   Location, The location at the given portion of the profile

        Return type:
        :   [`mathutils.Vector`](mathutils.html#mathutils.Vector "mathutils.Vector") of 2 items in [-100, 100]

    *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