Currently working on 2 different types of space shooter where the enemies travel along paths.
Currently there is no facility to create predefined shapes such as you can for Collision2D for example. This means that trying to create a smooth circular path is very difficult.
Add some predefined shapes for creating curved paths. Or enhance existing tooling to make creating curves easier.

Replicate this functionality to provide circle, capsule shapes etc. This is less of an issue for non-curved shapes/surfaces.
I guess it could be done with a script but it would be time consuming and complicated to calculate the positions of the points required for a circle.
It would bring Path2D into alignment with other node types that offer predetermined shapes.
I guess it could be done with a script but it would be time consuming and complicated to calculate the positions of the points required for a circle.
Vector2.rotated() should make this quite easy :slightly_smiling_face:
tool
extends Path2D
const SIZE = 100
const NUM_POINTS = 32
func _ready() -> void:
curve = Curve2D.new()
for i in NUM_POINTS:
curve.add_point(Vector2(0, -SIZE).rotated((i / float(NUM_POINTS)) * TAU))
# End the circle.
curve.add_point(Vector2(0, -SIZE))
Results in:

Open circle arcs can also be drawn this way by decreasing the angle increment between each iteration (and removing the line that ends the circle).
Thanks! Let me give that a try. :)
I think what would be useful is creating a general-purpose polygon generator, including (and not limited) to those Shape2D resources which were rather meant to be used as collision shapes. Those polygon nodes could then be used as children of anything to define the path, drawing, light occluders, navigation etc.
See Flattening/converting collision shapes into polygon-based shapes topic at godot-extended-libraries/godot-ideas#15 for related GIP proposals.
Most helpful comment
Vector2.rotated()should make this quite easy :slightly_smiling_face:Results in:
Open circle arcs can also be drawn this way by decreasing the angle increment between each iteration (and removing the line that ends the circle).