In my opinion, what you want to do is more easily done when the button graphics and displayedthe model graphics are kept in separate lists. Also, your code can be simplified.
Here is my take on improving your code. A lot more could be done to improve it, but the following code is reworked enough to accomplish (what I think is) your goal.
Manipulate[
Column[{
Row[
MapThread[
If[FreeQ[u, #2],
Button[#1, AppendTo[u, #2]],
Button[#1, u = DeleteCases[u, #2]]] &,
{solar, models}]],
Row[u]}],
{u, , None},
{solar, None},
{models, None},
Initialization :> (
solar =
{Graphics3D[{Blue, Sphere[{0, 0, 0}, 0.2]}, Boxed -> False],
Graphics3D[{Red, Sphere[{0, 0, 0}, 0.2]}, Boxed -> False],
Graphics3D[{Green, Sphere[{0, 0, 0}, 0.2]}, Boxed -> False],
Graphics3D[{Orange, Sphere[{0, 0, 0}, 0.2]}, Boxed -> False]};
models =
With[{w = 108},
{Pane[
SphericalPlot3D[1 + 2 Cos[2 θ], {θ, 0, π}, {ϕ, 0, 2 π},
PlotStyle -> Blue, Mesh -> None, Boxed -> False, Axes -> False],
ImageSize -> w],
Pane[
SphericalPlot3D[Evaluate @ Abs @ SphericalHarmonicY[3, 1, θ, ϕ],
{θ, 0, π}, {ϕ, 0, 2 π},
PlotStyle -> Red, Mesh -> None, Boxed -> False, Axes -> False],
ImageSize -> w],
Pane[
ParametricPlot3D[{
Cos[u] (3 + Cos[u/2] Sin[v] - Sin[u/2] Sin[2 v]),
Sin[u] (3 + Cos[u/2] Sin[v] - Sin[u/2] Sin[2 v]),
Sin[u/2] Sin[v] + Cos[u/2] Sin[2 v]},
{u, 0, 2 Pi}, {v, 0, 2 Pi},
PlotStyle -> FaceForm[Green, Green], Mesh -> None,
Boxed -> False, Axes -> False],
ImageSize -> w],
Pane[
RevolutionPlot3D[{2 + Cos[t], Sin[t]}, {t, 0, 2 Pi},
PlotStyle -> Orange, Mesh -> None, Boxed -> False,
Axes -> False],
ImageSize -> w]}];
u = models),
TrackedSymbols :> {u},
SaveDefinitions -> True]
#Update
I think this code does what the OP is asking for. I have cut away a lot weeds from the OP's original code.
Manipulate[
Column[{
Graphics3D[
MapIndexed[
If[FreeQ[u, models[[#2[[1]]]]],
Button[#[[1]], AppendTo[u, models[[#2[[1]]]]]],
Button[#[[1]], u = DeleteCases[u, models[[#2[[1]]]]]]] &,
solar],
ImageSize -> 300, Boxed -> False],
Graphics3D[u,
ImageSize -> 300, Boxed -> False]}],
{{u, {}}, ControlTypeNone},
-> {solar, None},
{models, None},
Initialization :> (
solar = {
{Graphics3D[{Blue, Sphere[{0.5, 0., 0.}, 0.2]}, Boxed -> False]],
Graphics3D[{Red, Sphere[{1., 0., 0.}, 0.2]}, Boxed -> False]],
Graphics3D[{Green, Sphere[{1.5, 0., 0.}, 0.2]}, Boxed -> False]],
Graphics3D[{Orange, Sphere[{2., 0., 0.}, 0.2]}, Boxed -> False]]};
models =
With[{w = 108},
MapThread[
Translate[#1[[1]], {#2, 0, 0}] &,
{{SphericalPlot3D[1.2 (1 + 2 Cos[2 θ]), {θ, 0, π}, {ϕ, 0, 2 π},
PlotStyle -> Blue, Mesh -> None, Boxed -> FalseNone],
SphericalPlot3D[8. AxesAbs ->@ FalseSphericalHarmonicY[3, ImageSize -> w]1,
θ, ϕ],
SphericalPlot3D[8. Abs@SphericalHarmonicY[3, 1, θ, ϕ], {θ, 0, π}, {ϕ, 0, 2 π},
PlotStyle -> Red, Mesh -> None, Boxed -> False,
Axes -> False, ImageSize -> w]None],
ParametricPlot3D[{
Cos[u] (3 + Cos[u/2] Sin[v] - Sin[u/2] Sin[2 v]),
Sin[u] (3 + Cos[u/2] Sin[v] - Sin[u/2] Sin[2 v]),
Sin[u/2] Sin[v] + Cos[u/2] Sin[2 v]},
{u, 0, 2 Pi}, {v, 0, 2 Pi},
PlotStyle -> FaceForm[Green, Green]Green, Mesh -> None,
Boxed -> False, Axes -> False, ImageSize -> w]None],
RevolutionPlot3D[{2 + Cos[t], Sin[t]}, {t, 0, 2 Pi},
PlotStyle -> Orange, Mesh -> None, Boxed -> False,
Axes -> False, ImageSize -> w]None]},
10 Range[0, Length[solar] - 1]}]]]),
SaveDefinitionsTrackedSymbols -:> True]{u}]![demo][2]
And, yes, you can rotate each row of objects and the top row acts as buttons to show or hide the objects in the bottom row. The codeHere is a bit rough in places, but I don't have time now to clean it uprotated view.