How do I distribute objects along an edge loop?
This can be done using Instancing and an Array and Curve modifier. and also by instancing a loop and a mesh object.
Curve method

In Edit Mode select your edge loop (Alt select an edge or vertex) and duplicate it: press Shift + D, hit Esc and separate it By Selection by pressing P.

Go into Object Mode, select the loop and press Alt + C to Convert it, choose Curve from Mesh/Text.

Add a Plane object, move it to the location of your tack object and scale it roughly to the size of your tack object. Then parent the tack object to the plane: Shift select the tack and the plane, in that order, and press Ctrl + P and choose Object(Keep Transform). After that select the plane object and go to Properties &gt; Object Properties &gt; Instancing and click on Faces. Make sure that the box next to Render Instancer in unchecked.

With the plane selected go to the Modifier Properties tab in the Properties window. Add an Array modifier to the plane and (later) change the values per your preferences. Change Count for number of tacks, and Offset value for the distance between them. (Best to already put some values in the fields, so you have something to work with.)

Then add a Curve modifier to the plane object, and as a target Object choose your edge loop curve object. Move your plane/tack array to your curve object and move it around until it looks relatively fine and in position.

If thing are moving in a weird and unexpected way, make sure the axis of the Offset value of the Array modifier is the same as the Deformation Axis of the Curve modifier.


Why the plane and the instancing? Why not put the Array and Curve modifier directly on the tack object? It would deform your tack object if you change the position and/or rotation of the array, curve, and the vertices of the curve. Beneficial sometimes but possibly not in this case.
Some fine-tuning:

If your tack object is to far away form the curve move it closer : ). Or alternatively scale the curve a bit bigger in Edit Mode.

You might have to simply move the vertices of the curve if tacks are to deep, not deep enough, or misaligned.

What if some (non spherical) tacks are facing the wrong way? Select your curve, go into Edit Mode, select the vertex or vertices near these tacks and press Ctrl + T to change the tilt of the vertices, and consequently rotating the nearby tacks.

If there are more vertices in your curve then you like to handle and you want to simplify things you can easily reduce their number. Select the curve in Edit Mode, press F3 (the default search hotkey), type &quot;Set Spline Type&quot; and choose Bezier. (Or click on Curve in the header to do the same thing.) Then hit F3 again and type &quot;Decimate Curve&quot; and enter a value between 0 and 1.


A sloppy execution might look something like this:

EDIT:
If your tack objects are spheres for instance and their orientation does not matter at all you can do something similar but a little easier.
As mentioned above, with Instancing you can show a child object for every face of the mesh of its parent object. But also (if you choose the Verts instancing option instead) for every vertex of the mesh of the parent.
Mesh method

In Edit Mode select your edge loop (Alt select an edge or vertex) and duplicate it: press Shift + D, hit Esc and separate it By Selection by pressing P.

Go into Object Mode, select the loop and press Alt + C to Convert it, choose Curve from Mesh/Text.

Press Alt + C again to Convert it back, choose Mesh from Curve/Meta/Surf/Text.


Why this back and forth with conversion? It will cause a somewhat even distribution of vertices along the length of the loop. (there are other ways, but i think will do in this case.)

After that select the loop (which is now a mesh object, not a curve) and go to Properties &gt; Object Properties &gt; Instancing and click on Verts. Now make the Tack object a child of the loop object: select the tack and the loop, in that order, and press Ctrl + P and choose Object(Keep Transform). The tack should appear for every Vertex in the loop mesh.

Fine-tuning:

What if the tacks are to close together? Select al vertices of the loop in Edit mode. Do Select &gt; Checker Deselect, press X or Del and choose Dissolve Vertices.

What if the tacks are to far apart? Select al vertices of the loop in Edit mode. Press F3 (default search hotkey), type &quot;Subdivide&quot; and add a value for Number of Cuts in the bottom left properties panel (or hit F9).