Delete an Array's Parameter Item

Home Forums Problems and solutions in GDL Graphical UI and parameters list Delete an Array's Parameter Item

This topic contains 1 reply, has 1 voice, and was last updated by  Nader Belal 1 month, 2 weeks ago.

  • Author
    Posts
  • #4488

    Nader Belal
    Participant

    Hi everyone,

    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
  • #4491

    Nader Belal
    Participant

    To everyone,

    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

You must be logged in to reply to this topic.