Choose your top Archicad wishes!

Read more
GDL
About building parametric objects with GDL.
SOLVED!

Swap A and B parameters

A_ Smith
Expert

Tbh I feel silly to ask such basic question, but I can't figure out how to swap values for A, B.

If additional parametes are created it's easy to change their values based on constant A, B. Though how to do it when with help of 2 parameters only? preferably main A, B.

 

https://drive.google.com/file/d/1TuKbeIqsUdWjve0QYYlYH62h2HNA5-T7/view?usp=drivesdk

AC 22, 24 | Win 10
1 ACCEPTED SOLUTION

Accepted Solutions
Solution

If I change the script to following it works for me:

temp_A = A
temp_B = B

IF GLOB_MODPAR_NAME = "bSwap" then
	IF bswap = 1 THEN
		A = temp_B
		B = temp_A
		PARAMETERS A = A
		PARAMETERS B = B
		PARAMETERS bSwap = 0
	ENDIF
endIF
Jochen Suehlo . AC12-27 . MAC OSX 14.4 . WIN11
GDL object creation: b-prisma.de

View solution in original post

13 REPLIES 13
DGSketcher
Legend

@A_ Smith You need to clarify a bit more about where you are changing the values e.g. param-o or in a GDL script? In gdl you will need to create swap values e.g. a1 & b1 if you don’t want to loose the originals. You could also do a similar thing with Find & Replace.

Apple iMac Intel i9 / macOS Sonoma / AC27UKI (most recent builds.. if they work)

GDL.

In parameter script I planned to swap A, B - at least for now (when "bSwap" is true), without saving original values. Kinda temp=A, A=B, B=temp

 

Originally I wanted to swap values each! time "bSwap" is changed... Just in order to find out why that doesn't work, decided to make it simpler.

AC 22, 24 | Win 10
Lingwisyer
Guru

I would:

 

IF GLOB_MODPAR_NAME = bSwap then
temp = A
A = B
B = temp
PARAMETERS A = A
PARAMETERS B = B
PARAMETERS bSwap = 0
endIF

 

 

Ling.

AC22-23 AUS 7000Help Those Help You - Add a Signature
Self-taught, bend it till it breaksCreating a Thread
Win11 | i9 10850K | 64GB | RX6600 Win10 | R5 2600 | 16GB | GTX1660

Right, but that doesn't work...

AC 22, 24 | Win 10

Try Ling's Parameter Script extract without the 'Parameters bSwap = 0' you will then know if the values are swapped.

Apple iMac Intel i9 / macOS Sonoma / AC27UKI (most recent builds.. if they work)

Well, I know it without deleting that row - it doesn't work as expected. I see that values don't change. Just to be sure, I removed it - all remais the same.

 

Unfortunatelly trying to help without actually checking it, doesn't do the job. Because, it's so simle lines of code (strange to say it though) that can't be wrong. Nevertheless they do not obey.

AC 22, 24 | Win 10
DGSketcher
Legend
One for Grand Master @Peter Baksa I think. There appears to be some value protections in place for A, B & ZZYZX which don't apply to other parameters. 
 
In the following, the values of A1 & B1 swap but the values of A, B & ZZYZX remain static...

 

!PARAMETER SCRIPT
!Create values for bSwap (boolean) and A1 & B1 (real) in the parameters 

	A1 = A
	B1 = B

	PARAMETERS A1 = A1, B1 = B1

	IF GLOB_MODPAR_NAME = "bSwap" THEN 
	
		IF bSwap = 1 THEN
			A = B1
			B = A1
			ZZYZX = A1
		ELSE
			A = A1
			B = B1
			ZZYZX = B1
		ENDIF
		
		PARAMETERS A = A, B = B, ZZYZX = ZZYZX
	
	ENDIF

 

Apple iMac Intel i9 / macOS Sonoma / AC27UKI (most recent builds.. if they work)
Lingwisyer
Guru

Odd... since I have replaced the A, B and ZZYZX values in objects before...

AC22-23 AUS 7000Help Those Help You - Add a Signature
Self-taught, bend it till it breaksCreating a Thread
Win11 | i9 10850K | 64GB | RX6600 Win10 | R5 2600 | 16GB | GTX1660
Solution

If I change the script to following it works for me:

temp_A = A
temp_B = B

IF GLOB_MODPAR_NAME = "bSwap" then
	IF bswap = 1 THEN
		A = temp_B
		B = temp_A
		PARAMETERS A = A
		PARAMETERS B = B
		PARAMETERS bSwap = 0
	ENDIF
endIF
Jochen Suehlo . AC12-27 . MAC OSX 14.4 . WIN11
GDL object creation: b-prisma.de