There are two simple ways you can do this with super basic GDL.
1. Place your 2d linework onto a separate layer in the 2D Symbol window. Have a parameter with different options (Refer the steps 1&2 in @jffgrffn link). Then a simple if statement for each option to call a FRAGMENT2 for the relevant 2D symbol layer. Something along these lines in your master code:
IF Plan_Symbol_Det = "Bikerack" THEN FRAGMENT2 1,0 !Shows only 2D Symbol Layer 1
IF Plan_Symbol_Det = "Tree" THEN FRAGMENT2 2,0 !Shows only 2D Symbol Layer 2
Get's a bit messy when you want to edit the linework of a symbol, but it's easy to do.
2. (As @SenecaDesignLLC suggested) Create an object for each 2D symbol (use the Save as Object.. function). Make each of these objects un-placeable. Have a parameter with the different options (Refer the steps 1&2 in @jffgrffn link). Then a simple if statement for each option to perform a CALL function to the name of each object. Something along these lines in your master code:
IF Plan_Symbol_Det = "Bikerack" THEN CALL "Bikerack_Symbol" PARAMETERS ALL
IF Plan_Symbol_Det = "Tree" THEN CALL "Tree_Symbol" PARAMETERS ALL
This option is more difficult to modify the linework of each symbol as Archicad will convert all your linework into hundreds of lines of GDL when you use (Save as Object.. function), but keeps symbol better organised.
Tip - when you draw your symbol linework, do it at 0,0 origin.
AC13 - AC23.7000 / AC26.4019 | Python, GDL, VBA, PHP, SQL, CSS
Certified Graphisoft BIM Manger (2022)
Win 10, i9-9900K, 32GB, Quadro P2200, 500GB NVMe