3 weeks ago
Hi, this is related to a previous post I've made: Link
Sorry if this is a double post, but the previous post was technically solved.
I have a script where the A and B dimensions are based on two VALUES{2} lists with length parameters.
I would like the value of VALUES{2} for the B-dimensions to be dependent on VALUES{2} of the A-dimension through an IF statement. Is this possible? I keep getting error messages regarding parameter types with variations of the following parameter script:
VALUES{2} "size" 2.0, "min",
5.0, "max"
VALUES{2} "width" size*2, "minwidth",
size*5, "maxwidth"
LOCK "A", "B"
IF size= "max" THEN
width = "maxwidth"
ELSE
width = "minwidth"
ENDIF
A=size
B=width
PARAMETERS A=A, B=B
3 weeks ago - last edited 3 weeks ago
Hello!
I am not very proficient in English, so I will use ChatGPT to help translate the message below. If anything is unclear, please feel free to ask me for clarification.
Regarding your code:
For values{2}, "min" and "max" are only display texts, not actual parameter values. Therefore, setting size = "max", width = "maxwidth", or width = "minwidth" is incorrect in terms of parameter types.
Suggested correction:
VALUES{2} "size" 2.0, "min",
5.0, "max"
VALUES{2} "width" size*2, "minwidth",
size*5, "maxwidth"
LOCK "A", "B"
EPS = 0.00001
IF abs(size-2) < EPS THEN
parameters width = 4
ELSE
parameters width = 25
ENDIF
A=size
B=width
PARAMETERS A=A, B=B
3 weeks ago
As NMK195 said: The "stringified" representation is just there for the user, that's the whole poinf of using it.
However in your particular case it might make sense to actually check for "min" and "max", since the numbers might change.
There is hope: you can use this command parvalue_description ("size")
to retrieve the string representation.
I myself would still not use it since string comparisons are very costly and it is more elegant to just use a local definition like this (I use all uppercase for constants to better distinguish):
!//--in Master script:
EPS = 0.00001
SIZE_MIN = 2.0
SIZE_MAX = 5.5
!//--in Param script:
values{2} "size",
SIZE_MIN, "min",
SIZE_MAX, "max"
!//--in 2D/3D then:
!// be aware of floating point inaccuracy !
if abs(size-SIZE_MIN) < EPS then
!.... do whatever
endif
Happy coding!
Tuesday - last edited Tuesday
Hi,
I used this in my last script:
if n>0 then
values "A",A_half*2
values "B",range [1,]
else
values "B",range [1,]
parameters A=B
endif
Before this IF the A and B sizes are not defined.
Wednesday - last edited Wednesday
Hi,
Your 'values' command has an extra comma
the correct format should be as follows:
if n>0 then
values "A" A_half*2
values "B" range [1,]
else
values "B" range [1,]
parameters A=B
endif
Wednesday - last edited Wednesday
Hi,
VALUES "parameter_name" [,]value_definition1 [, value_definition2, ...]
you can put comma in "values", its optional.
So it is not an error, it is a matter of preference as far as I know 🤷
Thursday
Hi.
You're right, I've never used a comma after 'values' before, so I thought it was incorrect. I tried it again and saw that there's nothing wrong with the code above — the error might be in another line that you didn’t mention earlier. If possible, please upload the file here so everyone can check it more accurately.