Repository: ManimCommunity/manim

Issue:
Allow `Cross` to be initialized without being based on an existing Mobject.
## Enhancement proposal
<!-- Add a clear and concise description of your enhancement proposal. In particular,
     if your enhancement introduces changes to the API, illustrate them with
     (fictional) code examples. -->

Currently Cross needs a mobject passed to it, I think it should be reworked to not necessarily require this. Also maybe easily specifying the length of the cross in the `__init__` too?


Current `Cross` code:
```py
class Cross(VGroup):
    def __init__(self, mobject, stroke_color=RED, stroke_width=6, **kwargs):
        VGroup.__init__(
            self,
            Line(UP + LEFT, DOWN + RIGHT),
            Line(UP + RIGHT, DOWN + LEFT),
        )
        self.replace(mobject, stretch=True)
        self.set_stroke(color=stroke_color, width=stroke_width)
```

## Additional comments
<!-- Add further context that you think might be relevant. -->
replacing `VGroup.__init__` with `super().__init__` too 



Discussion:
I could take this up, if its not an urgent fix.

PS: It would be my first contribution.
Sure, it's not urgent! I've assigned you to it👍

Resolving patch:
diff --git a/manim/mobject/shape_matchers.py b/manim/mobject/shape_matchers.py
--- a/manim/mobject/shape_matchers.py
+++ b/manim/mobject/shape_matchers.py
@@ -2,10 +2,12 @@
 
 __all__ = ["SurroundingRectangle", "BackgroundRectangle", "Cross", "Underline"]
 
+from typing import Optional
 
 from ..constants import *
 from ..mobject.geometry import Line, Rectangle
-from ..mobject.types.vectorized_mobject import VGroup, VMobject
+from ..mobject.mobject import Mobject
+from ..mobject.types.vectorized_mobject import VGroup
 from ..utils.color import BLACK, RED, YELLOW, Color
 
 
@@ -117,13 +119,44 @@ def get_fill_color(self):
 
 
 class Cross(VGroup):
-    def __init__(self, mobject, stroke_color=RED, stroke_width=6, **kwargs):
-        VGroup.__init__(
-            self,
-            Line(UP + LEFT, DOWN + RIGHT),
-            Line(UP + RIGHT, DOWN + LEFT),
+    """Creates a cross.
+
+    Parameters
+    ----------
+    mobject
+        The mobject linked to this instance. It fits the mobject when specified. Defaults to None.
+    stroke_color
+        Specifies the color of the cross lines. Defaults to RED.
+    stroke_width
+        Specifies the width of the cross lines. Defaults to 6.
+    scale_factor
+        Scales the cross to the provided units. Defaults to 1.
+
+    Examples
+    --------
+    .. manim:: ExampleCross
+        :save_last_frame:
+
+        class ExampleCross(Scene):
+            def construct(self):
+                cross = Cross()
+                self.add(cross)
+    """
+
+    def __init__(
+        self,
+        mobject: Optional["Mobject"] = None,
+        stroke_color: Color = RED,
+        stroke_width: float = 6,
+        scale_factor: float = 1,
+        **kwargs
+    ):
+        super().__init__(
+            Line(UP + LEFT, DOWN + RIGHT), Line(UP + RIGHT, DOWN + LEFT), **kwargs
         )
-        self.replace(mobject, stretch=True)
+        if mobject is not None:
+            self.replace(mobject, stretch=True)
+        self.scale(scale_factor)
         self.set_stroke(color=stroke_color, width=stroke_width)
 
 


Test patch: