January 28, 2019 at 20:48 #4488Nader BelalParticipant
I´m trying to create a panel that can have an arbitrary number of openings, where the user can control them all, including a delete button for its deletion.
All data are in 1 dimensional arrays and are displayed well in the GUI, but when I try to program the delete button, the array dones’t update. Can you help to solve it.
if GLOB_UI_BUTTON_ID >= 1000 then !<-- activation if any delete button was pressed n = APPLICATION_QUERY ("PARAMETER_SCRIPT", "FIRSTOCCASION_IN_PROGRESS", _isFirstRun) if _isFirstRun then _newArrayLen = vardim1(ap_openingLintel) - 1 !<-- dummy condition to force array deletion openingdelItem = (GLOB_UI_BUTTON_ID - 1000) !<-- Index of the desired opening to delete _count = 1 dim _ap_openingLintel,_ap_openingLintelHieght, !<-- create dummy containers _ap_openingsX, _ap_openingsY, _ap_openingSizeX, _ap_openingSizeY if vardim1(ap_openingLintel) # _newArrayLen then for _i = 1 to vardim1(ap_openingLintel) if _i # openingdelItem then _ap_openingLintel[_count] = ap_openingLintel[_i] _ap_openingLintelHieght[_count] = ap_openingLintelHieght[_i] _ap_openingsX[_count] = ap_openingsX[_i] _ap_openingsY[_count] = ap_openingsY[_i] _ap_openingSizeX[_count] = ap_openingSizeX[_i] _ap_openingSizeY[_count] = ap_openingSizeY[_i] _count = _count + 1 endif next _i parameters ap_openingLintel = _ap_openingLintel, ap_openingLintelHieght = _ap_openingLintelHieght, ap_openingsX = _ap_openingsX, ap_openingsY = _ap_openingsY, ap_openingSizeX = _ap_openingSizeX, ap_openingSizeY = _ap_openingSizeY endif endif endif
January 29, 2019 at 18:48 #4491Nader BelalParticipant
First I want to thank you all for all the help, especially to my friends Carlos Lopez Figueroa from Mexico for putting me on the right track, and Shawn Hopkins.
Second, the right way (in my case) to do update/delete array parameters is using this simple code that was posted in this thread ArchiCAD-Talk: LIMITING RANGE OF PARAMETER ARRAYS (special thanks to Braza from Portugal, see attachment).
Here is the script (adapted to Graphisoft Style recommendations):
dim setval for i = 1 to n if i > vardim1(val) then setval[i] = 0 else setval[i]=val[i] endif next i val = setval parameters val = val
Third the most important part, Why the hell my past code did not update my arrays !!!
Well it happens that this line script in the Parameter Script tab did give me all the trouble:
n = APPLICATION_QUERY ("PARAMETER_SCRIPT", "FIRSTOCCASION_IN_PROGRESS", _isFirstRun)
It appears to be that this past line was preventing the arrays from being updated, and to by pass any issue that may result from consecutive value deletion you have to put a time stamp, as have been explained in other threads in this forum.
I will put this finding as an issue for Graphisoft Team.
Thank you all
- The forum ‘Graphical UI and parameters list’ is closed to new topics and replies.