Home › Forums › Problems and solutions in GDL › Others › Variable Mismatch
Tagged: profile, parameter script
- This topic has 19 replies, 3 voices, and was last updated 5 years, 3 months ago by Lingwisyer GC.
-
AuthorPosts
-
-
June 20, 2019 at 05:19 #4787Lingwisyer GCParticipant
Hi all,
I appear to have a variable mismatch in the following section of code. Code has been clipped to executed sections. Text outputting my check variable cc returns 0.305 which is correct, therefore at this stage of the code, SquareV2 = 0.305. Yet if I set Pitch_off to 50, SquareV returns -35, which if we work backwards gives SquareV2 = 0.010 rather than the expected 0.305.
If SquareV > SquareV2 - Pitch_off * tan(35) then SquareV = SquareV2 - Pitch_off * tan(35) If Pitch_off > (SquareV2 - SquareV) / tan(35) then Pitch_off = (SquareV2 - SquareV) / tan(35) cc = SquareV2
Ling.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200 -
June 21, 2019 at 11:16 #4788Péter BaksaKeymaster
Hi, is this in a parameter script? Are these variables or parameters?
Péter Baksa
Library Platform, Software Engineer
GRAPHISOFT SE -
June 24, 2019 at 02:20 #4789Lingwisyer GCParticipant
This is from my Master Script. Used to set minimum and maximum limits depending on the values set for other parameters.
cc is a variable, the others are parameters.
Ling.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200 -
June 24, 2019 at 07:39 #4790Péter BaksaKeymaster
If you have VALUES or PARAMETERS based on these in the parameter script, it is possible that the param script is run more than once, and the code you wrote will be executed more than once with different parameter values. Your condition B is based on A, but in the next run A is based on the last run of B.
You might need to use GLOB_MODPAR_NAME in the parameter script, based on which parameter the user changed, only one of the limiting conditions has to be applied.
Péter Baksa
Library Platform, Software Engineer
GRAPHISOFT SE -
June 24, 2019 at 11:00 #4791Lingwisyer GCParticipant
Setting SquareV and Pitch_off to only update when they are modified has no affect. They only affect each other.
Disabling the update of these two allows the script to work, but results in it being possible for values to show that are not the ones being used, being outside the min / max.
If I swap parameter “SquareV2” with 0.305 the Master Script works as it is suppose to for that value.I think you might be right about the Parameter Script being run multiple times, or at least run before the 2D and 3D Scripts. Is there a way to force the Parameter Script to only run once after executing the 2D and 3D scripts?
“SquareV2” does not resolve in the Parameter Script due to being calculated using a requested value, yet if I say “PARAMETERS SquareV2 = 0.305” the incorrect values are still used. This seems to imply the the Master Script is run, then the Parameter Script is looped before the 2D and 3D scripts OR it is just getting confused by the input value from the Parameter Script, and the value calculated in the Master Script and returning 0.
Returning 0 is more desirable then returning incorrect values.
Ling.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200 -
June 25, 2019 at 02:25 #4792Barry KellyParticipant
I am a little confused by your script.
‘SquareV2’ should never change as nowhere in your formula are you setting the value for it.To check for the ‘firstrun’ of the parameter script, you can try using this to catch it…
First Occasion in Progress
n = APPLICATION_QUERY (“parameter_script”, “firstoccasion_in_progress”, isFirstRun)
This command returns whether the current run is the first run or a consequence of a previous execution of the parameter script which changed
some parameters. This command has no additional parameters.
The distinction may be important when a part of the parameter script executes a triggered event – e.g. it handles the pushing of a function button.
isFirstRun: The returned value shows whether the current run is the first runBarry.
Versions 6.5 to 22
Dell XPS- i7-6700 @ 3.4Ghz, 16GB ram, GeForce GTX 960 (2GB), Windows 10
Dell Precision M6800 - i7 4700MQ @ 2.40GHz, 16GB RAM, AMD FirePro M6100 (2GB), Windows 7 64bit -
June 25, 2019 at 02:37 #4793Lingwisyer GCParticipant
I am a little confused by your script.
That is just a clipped section of my script.
ProHeight = abs(_yMax - _yMin) SquareV2 = ProHeight / ( cos(phi) )
Due to requests not being resolved in the Parameter Script, this section will return an incorrect value when it is run for this script.
n = APPLICATION_QUERY (“parameter_script”, “firstoccasion_in_progress”, isFirstRun)
So I would include that query in my Master Script and get it to not execute if the Parameter Script has been run more than once?
If isFirstRun > 1 then goto MasterEnd
Ling.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200 -
June 25, 2019 at 02:52 #4794Lingwisyer GCParticipant
Phi in the original script was substituted with 35.
Well… that was unexpected. So I added the “isFirstRun” query to the start of my Master Script followed by a “GOTO MasterEnd” and it appears to all be working. My limits are even showing in the Parameter Script, even though SquareV2 is not being resolved.
Ling.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200-
June 25, 2019 at 03:05 #4795Lingwisyer GCParticipant
Whelp. Forum will not allow me to edit that post. It did not actually fix anything. Had forgotten to change some substituted values back to the parameter Squarev2.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200
-
-
June 25, 2019 at 03:14 #4796Lingwisyer GCParticipant
The Parameter Script needs only to run after the other scripts have run or when it is first initiallised.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200 -
June 25, 2019 at 06:58 #4797Barry KellyParticipant
I would say …
IF isFirstRun THEN execute code.... ENDIF
At least this is what has been mentioned in other posts about it.
I think it may be a little confusing and ‘isfirstrun’ only gets a value when it is the first run.
I am not sure if it gets a higher value on multiple parameter script runs.I still don’t understand your code.
ProHeight = abs(_yMax - _yMin) SquareV2 = ProHeight / ( cos(phi) )
SquareV2 still has nothing to do with the first bit of code you posted.
Barry.
Versions 6.5 to 22
Dell XPS- i7-6700 @ 3.4Ghz, 16GB ram, GeForce GTX 960 (2GB), Windows 10
Dell Precision M6800 - i7 4700MQ @ 2.40GHz, 16GB RAM, AMD FirePro M6100 (2GB), Windows 7 64bit -
June 25, 2019 at 07:28 #4798Lingwisyer GCParticipant
This object has the option to use complex profiles. The issue only occurs when a complex profile is used. The original two equations include SquareV2 and if skipped, the 2D and 3D resolve correctly.
Ling.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200 -
June 25, 2019 at 08:47 #4799Péter BaksaKeymaster
Don’t think about the master script on its own, in fact it is prepended to the actual script that is run. So it doesn’t help with requests that can’t be used in a parameter script.
You can’t control the execution order of the scripts, generally parameter script is run before the 2D/3D.
Something like this:master script -> param script: sets parameters
all variables cleared
master script again with the new parameters -> param script: sets other parameters
all variables cleared
master script again with the new parameters -> 2D script
all variables cleared
master script again with the same new parameters -> 3D scriptPéter Baksa
Library Platform, Software Engineer
GRAPHISOFT SE -
July 2, 2019 at 04:12 #4813Lingwisyer GCParticipant
So, I included the following in my Interface Script;
n2 = REQUEST ("Profile_default_boundingbox", myProfileIdx, _xMin, _yMin, _xMax, _yMax) ProWidth = abs(_xMax - _xMin) ProHeight = abs(_yMax - _yMin) SquareV2 = ProHeight / ( cos(phi) )
but they appear to have no effect. ProWidth returns 50, ProHeight returns 100 and SquareV2 returns 0 no matter the size of the profile set…
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200 -
July 2, 2019 at 08:29 #4814Péter BaksaKeymaster
Is that a parametric profile, or are you selecting different profile for myProfileIdx?
Parametric profiles don’t work with GDL, they always return their default geometry.Péter Baksa
Library Platform, Software Engineer
GRAPHISOFT SE -
July 2, 2019 at 10:01 #4815Lingwisyer GCParticipant
Should probably reword “profile set” to “value of myProfileIdx”.
Some of them probably are, but it does not even return the default values.
Ling.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200 -
July 2, 2019 at 10:52 #4816Péter BaksaKeymaster
Then this should work. How do you check the return values?
Péter Baksa
Library Platform, Software Engineer
GRAPHISOFT SE -
July 3, 2019 at 05:47 #4820Lingwisyer GCParticipant
In the 2D Script, I have a TEXT2 that outputs the values.
In the Interface Script I have an UI_INFIELD that outputs the same values.Neither of the scripts contain anything that modifies any of the parameters so they should both be reading the same values from the Master Script, yet only the 2D Script is returning the correct values.
Ling.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200 -
July 3, 2019 at 07:37 #4821Péter BaksaKeymaster
The 2d script doesn’t know about the variables in the UI script. You have to write the same request in the 2D script too, or move it to the master script (just don’t use the variables in the parameter script, as the request will be unsuccessful from parameter script).
UI_INFIELD can’t show variables. Is ProWidth and ProHeight a parameter? No matter what you assign to it in the scripts, UI_INFIELD will show the stored parameter values. You would need a PARAMETERS command to change them, but you can’t do it, as this request doesn’t work in parameter script.
You can show variables and current value of parameters with UI_OUTFIELD.Péter Baksa
Library Platform, Software Engineer
GRAPHISOFT SE -
July 9, 2019 at 05:02 #4824Lingwisyer GCParticipant
The 2d script doesn’t know about the variables in the UI script.
Everything else is in the Master Script. It is just a ‘text2 a’ and a ‘ui_outfield a’ found in their respective scripts.
You can show variables and current value of parameters with UI_OUTFIELD.
That works. I never thought of using an infield for displaying a parameter.
Ling.
AC18-23 AUS 4006
Self-taught, bend it till it breaks.
Win7 | E5620 x 2 | 24GB | K2200
-
-
AuthorPosts
- The forum ‘Others’ is closed to new topics and replies.