user: Describe Particle Operators from the Blender manual or Python API, including usage steps and snippets.

assistant: # Particle Operators

bpy.ops.particle.brush_edit(*\**, *stroke=None*, *pen_flip=False*)
:   Apply a stroke of brush to the particles

    Parameters:
    :   - **stroke** (`bpy_prop_collection` of `OperatorStrokeElement`, (optional)) – Stroke
        - **pen_flip** (*boolean**,* *(**optional**)*) – Pen Flip, Whether a tablet’s eraser mode is being used

bpy.ops.particle.connect_hair(*\**, *all=False*)
:   Connect hair to the emitter mesh

    Parameters:
    :   **all** (*boolean**,* *(**optional**)*) – All Hair, Connect all hair systems to the emitter mesh

bpy.ops.particle.copy_particle_systems(*\**, *space='OBJECT'*, *remove_target_particles=True*, *use_active=False*)
:   Copy particle systems from the active object to selected objects

    Parameters:
    :   - **space** (enum in [`'OBJECT'`, `'WORLD'`], (optional)) –

          Space, Space transform for copying from one object to another

          - `OBJECT`
            Object – Copy inside each object’s local space.
          - `WORLD`
            World – Copy in world space.
        - **remove_target_particles** (*boolean**,* *(**optional**)*) – Remove Target Particles, Remove particle systems on the target objects
        - **use_active** (*boolean**,* *(**optional**)*) – Use Active, Use the active particle system from the context

bpy.ops.particle.delete(*\**, *type='PARTICLE'*)
:   Delete selected particles or keys

    Parameters:
    :   **type** (enum in [`'PARTICLE'`, `'KEY'`], (optional)) – Type, Delete a full particle or only keys

bpy.ops.particle.disconnect_hair(*\**, *all=False*)
:   Disconnect hair from the emitter mesh

    Parameters:
    :   **all** (*boolean**,* *(**optional**)*) – All Hair, Disconnect all hair systems from the emitter mesh

bpy.ops.particle.duplicate_particle_system(*\**, *use_duplicate_settings=False*)
:   Duplicate particle system within the active object

    Parameters:
    :   **use_duplicate_settings** (*boolean**,* *(**optional**)*) – Duplicate Settings, Duplicate settings as well, so the new particle system uses its own settings

bpy.ops.particle.dupliob_copy()
:   Duplicate the current instance object

bpy.ops.particle.dupliob_move_down()
:   Move instance object down in the list

bpy.ops.particle.dupliob_move_up()
:   Move instance object up in the list

bpy.ops.particle.dupliob_refresh()
:   Refresh list of instance objects and their weights

bpy.ops.particle.dupliob_remove()
:   Remove the selected instance object

bpy.ops.particle.edited_clear()
:   Undo all edition performed on the particle system

bpy.ops.particle.hair_dynamics_preset_add(*\**, *name=''*, *remove_name=False*, *remove_active=False*)
:   Add or remove a Hair Dynamics Preset

    Parameters:
    :   - **name** (*string**,* *(**optional**,* *never None**)*) – Name, Name of the preset, used to make the path name
        - **remove_name** (*boolean**,* *(**optional**)*) – remove_name
        - **remove_active** (*boolean**,* *(**optional**)*) – remove_active

    File:
    :   [startup/bl_operators/presets.py:119](https://projects.blender.org/blender/blender/src/branch/main/scripts/startup/bl_operators/presets.py#L119)

bpy.ops.particle.hide(*\**, *unselected=False*)
:   Hide selected particles

    Parameters:
    :   **unselected** (*boolean**,* *(**optional**)*) – Unselected, Hide unselected rather than selected

bpy.ops.particle.mirror()
:   Duplicate and mirror the selected particles along the local X axis

bpy.ops.particle.new()
:   Add new particle settings

bpy.ops.particle.new_target()
:   Add a new particle target

bpy.ops.particle.particle_edit_toggle()
:   Toggle particle edit mode

bpy.ops.particle.particle_system_remove_all()
:   Remove all particle system within the active object

bpy.ops.particle.rekey(*\**, *keys_number=2*)
:   Change the number of keys of selected particles (root and tip keys included)

    Parameters:
    :   **keys_number** (*int in* *[**2**,* *inf**]**,* *(**optional**)*) – Number of Keys

bpy.ops.particle.remove_doubles(*\**, *threshold=0.0002*)
:   Remove selected particles close enough of others

    Parameters:
    :   **threshold** (*float in* *[**0**,* *inf**]**,* *(**optional**)*) – Merge Distance, Threshold distance within which particles are removed

bpy.ops.particle.reveal(*\**, *select=True*)
:   Show hidden particles

    Parameters:
    :   **select** (*boolean**,* *(**optional**)*) – Select

bpy.ops.particle.select_all(*\**, *action='TOGGLE'*)
:   (De)select all particles’ keys

    Parameters:
    :   **action** (enum in [`'TOGGLE'`, `'SELECT'`, `'DESELECT'`, `'INVERT'`], (optional)) –

        Action, Selection action to execute

        - `TOGGLE`
          Toggle – Toggle selection for all elements.
        - `SELECT`
          Select – Select all elements.
        - `DESELECT`
          Deselect – Deselect all elements.
        - `INVERT`
          Invert – Invert selection of all elements.

bpy.ops.particle.select_less()
:   Deselect boundary selected keys of each particle

bpy.ops.particle.select_linked()
:   Select all keys linked to already selected ones

bpy.ops.particle.select_linked_pick(*\**, *deselect=False*, *location=(0, 0)*)
:   Select nearest particle from mouse pointer

    Parameters:
    :   - **deselect** (*boolean**,* *(**optional**)*) – Deselect, Deselect linked keys rather than selecting them
        - **location** (*int array* *of* *2 items in* *[**0**,* *inf**]**,* *(**optional**)*) – Location

bpy.ops.particle.select_more()
:   Select keys linked to boundary selected keys of each particle

bpy.ops.particle.select_random(*\**, *ratio=0.5*, *seed=0*, *action='SELECT'*, *type='HAIR'*)
:   Select a randomly distributed set of hair or points

    Parameters:
    :   - **ratio** (*float in* *[**0**,* *1**]**,* *(**optional**)*) – Ratio, Portion of items to select randomly
        - **seed** (*int in* *[**0**,* *inf**]**,* *(**optional**)*) – Random Seed, Seed for the random number generator
        - **action** (enum in [`'SELECT'`, `'DESELECT'`], (optional)) –

          Action, Selection action to execute

          - `SELECT`
            Select – Select all elements.
          - `DESELECT`
            Deselect – Deselect all elements.
        - **type** (enum in [`'HAIR'`, `'POINTS'`], (optional)) – Type, Select either hair or points

bpy.ops.particle.select_roots(*\**, *action='SELECT'*)
:   Select roots of all visible particles

    Parameters:
    :   **action** (enum in [`'TOGGLE'`, `'SELECT'`, `'DESELECT'`, `'INVERT'`], (optional)) –

        Action, Selection action to execute

        - `TOGGLE`
          Toggle – Toggle selection for all elements.
        - `SELECT`
          Select – Select all elements.
        - `DESELECT`
          Deselect – Deselect all elements.
        - `INVERT`
          Invert – Invert selection of all elements.

bpy.ops.particle.select_tips(*\**, *action='SELECT'*)
:   Select tips of all visible particles

    Parameters:
    :   **action** (enum in [`'TOGGLE'`, `'SELECT'`, `'DESELECT'`, `'INVERT'`], (optional)) –

        Action, Selection action to execute

        - `TOGGLE`
          Toggle – Toggle selection for all elements.
        - `SELECT`
          Select – Select all elements.
        - `DESELECT`
          Deselect – Deselect all elements.
        - `INVERT`
          Invert – Invert selection of all elements.

bpy.ops.particle.shape_cut()
:   Cut hair to conform to the set shape object

bpy.ops.particle.subdivide()
:   Subdivide selected particles segments (adds keys)

bpy.ops.particle.target_move_down()
:   Move particle target down in the list

bpy.ops.particle.target_move_up()
:   Move particle target up in the list

bpy.ops.particle.target_remove()
:   Remove the selected particle target

bpy.ops.particle.unify_length()
:   Make selected hair the same length

bpy.ops.particle.weight_set(*\**, *factor=1.0*)
:   Set the weight of selected keys

    Parameters:
    :   **factor** (*float in* *[**0**,* *1**]**,* *(**optional**)*) – Factor, Interpolation factor between current brush weight, and keys’ weights