Notifications
Clear all

[Closed] ERROR .. where is the problem

Hello guys,

I have a problem in my MaxScript code and i want you to help me revising it.
The function is working well when i execute it separately but when i involve it within a rollout, i get this error message.

   >> MAXScript Rollout Handler Exception: -- Argument count error: classOf wanted 1, got 2 <<

here is the code


  rollout r1 "Candilis Cellular Automata" width:730 height:319
  (
  	
  	GroupBox grp1 "RESIDENTIAL BUILDINGS GAME OF LIFE " pos:[10,10] width:230 height:300
  	
  		GroupBox grp10 "Site restrictions" pos:[25,30] width:200 height:77
  			spinner spn7 "X- Dimension" pos:[85,50] width:123 height:16
  			spinner spn9 "Y- Dimension" pos:[85,79] width:123 height:16 range:[0,100,0]
  			
  		GroupBox grp33 "Building restrictions " pos:[25,112] width:200 height:79
  					
  			spinner spn10 "No of Stories " pos:[83,134] width:125 height:16 range:[0,100,0]
  			spinner spn33 "Court Diameter" pos:[81,160] width:127 height:16 range:[0,100,0]
  						
  										
  					
  		GroupBox grp45 "Generate Alternatives " pos:[25,195] width:200 height:106
  			radiobuttons rdo11 "No of Prototypes" pos:[44,218] width:166 height:30 labels:#("1", "2*2", "4*4", "6*6") columns:4
  			button btn1 "Generate" pos:[61,256] width:127 height:37			
  	
  			
  	GroupBox grp3 "COMBINATIONS" pos:[250,10] width:230 height:300
  	
  	dropdownList ddl3 "Interpolation Direction" pos:[264,43] width:205 height:40 items:#("Vertical", "Horizontal")
  	GroupBox grp11 "Vertical " pos:[265,94] width:200 height:94
  	radiobuttons rdo7 "Organisation" pos:[289,107] width:166 height:30 labels:#("Staggered", "Random") columns:2
  	spinner spn18 "No. of Stories" pos:[330,149] width:123 height:16 enabled:true range:[0,4,0] type:#integer
  			
  	GroupBox grp12 "Horizontal" pos:[265,195] width:200 height:102
  		
  	radiobuttons rdo6 "Organisation" pos:[301,215] width:128 height:46 labels:#("Ribbon", "Puzzle", "Patio", "Grouped") default:1 columns:2
  	spinner spn19 "No. of Stories" pos:[330,270] width:123 height:16 enabled:true range:[0,4,0] type:#integer
  		
  		
  		
  	GroupBox grp2 "SITE RESTRICTIONS" pos:[490,10] width:230 height:177
  	
  	spinner spn6 "X- Dimension" pos:[581,49] width:123 height:16 enabled:true range:[0,4,0] type:#integer
  	spinner spn34 "Y- Dimension" pos:[581,79] width:123 height:16 enabled:true range:[0,4,0] type:#integer
  	pickbutton btn20 "Generate" pos:[543,123] width:130 height:40
  			
  		
  	GroupBox grp63 "ABOUT" pos:[490,195] width:230 height:115
  	
  	label lbl2 "This rollout resembles George Candilis' rules for residential buildings using Cellular Automata technique" pos:[498,212] width:217 height:43
  	label lbl1 "By:" pos:[596,255] width:30 height:14 enabled:true
  	label lbl4 " MAHA EL GEWELY  " pos:[557,271] width:104 height:17 enabled:true
  	label lbl3 "maha_elgewely@alex.edu.eg" pos:[539,287] width:146 height:17 enabled:true
 
 
 
 
  	-- variables:   Xmax   Ymax   NoGen   CourtDia   Alternatives
  	
  	------------------------------------------ function starts here  ---------------------------------------------------------
  		
  		fn FormGeneration  A  B  C  D  E  =
  		(
  		
  			for h= 1 to E
   do(
 
  				-- creating first generation grid
  				for  x= 0 to A do  for y= 0 to B do (
  					MyPlane= Box length:1 width:1 Height:1 lengthsegs:1 widthsegs:1
  					MyPlane.name= "Cell_" + x as string + "_X_" + y as string + "_X_0.0"
  					MyPlane.pos = [x,y,0]
  					MyPlane.wirecolor= [190,200,170]
  					
  					hide( for o in geometry where distance o.center [10,10,0] > (D+3) and distance o.center [10,10,5]< B collect o)
  					hide( for o in geometry where distance o.center [10,10,0] < D collect o)
  				)
  					-- for o in geometry where try(o.ishidden== false) catch (false) do
  					for o in geometry where try(o.ishidden== false) catch (false) do(
  					
  						state= random 0 1
  						if (state == 0) then hide o 
  						)
  				
  					for gen=0.0 to C by 1.0 do 
  					(
  						-- first pass: neighbors information
  						
  						StateArray = #()			-- array to save each cell neighboring status
  						 lifeORdead= #()				-- array to save each cell status
  						Idx=1					-- initialize a conter for StateArray Index
  						for x=1 to (A-1) do for y=1 to (B-1) do 
  							(
  								-- defining each cell to collect it's neighbor visibility 
  								 NameOfCell= "Cell_" + x as string + "_X_" + y as string +  "_X_" + gen as string
 
  								visible= 0		-- number of visible cell's neighbors
  					
  									for i= -1 to 1 do for j= -1 to 1 do
  									(
  										if (i==0 and j==0) then (
  										
  											LifeorDeadCell= execute (" $"+ NameOfCell + ".ishidden" )
  											if (LifeorDeadCell == false) then ( lifeORdead[Idx]= 1)
  											else (lifeORdead[Idx]= 0)
  										)
  											
  										
  else(
  											-- defining cell NeighborName 
  											NeighborName=  "Cell_" + (x+i) as string + "_X_" + (y+j) as string + "_X_"+ gen as string 
  											checkclass= execute("classof $" + NeighborName + "== Box")
  											if try (checkclass) catch (false) do
  											(
 
  												Visibility= execute (" $"+ NeighborName + ".ishidden" )	-- check cell neighbor visibility
  												
  												if (visibility == false) then (visible= visible+1)			-- update number of visible neighbors 
  												else (visible=visible)
  											)
  										)
 
  									)
  					
  								 StateArray[Idx]= visible		-- placement of visible cells no in the cell index of the StateArray
  								Idx=Idx+1						-- move to the next  cell
  							)
  						
  								
  					
  							-- second pass: applying rules
  								
  								Idx=1	-- initialize variable to loop betwenn cells 
  							for x=1 to (A-1) do for y=1 to (B-1) do 
  								(
  									TotoPlane= box length:1 width:1 Height:1 lengthsegs:1 widthsegs:1
  									TotoPlane.name= "Cell_" + x as string + "_X_" + y as string + "_X_"+ (gen+1) as string
  									TotoPlane.pos = [x,y,((gen+1)+(0.2*(gen+1)))]
  									TotoPlane.wirecolor= [190,200,170]
  									
  									--Conway's Game of Life:
  									--1. Any live cell with fewer than two live neighbors dies, as if by loneliness.
  									--2. Any live cell with more than three live neighbors dies, as if by overcrowding.
  									--3. Any live cell with two or three live neighbors lives, unchanged, to the next generation.
  									--4. Any dead cell with exactly three live neighbors comes to life.
  									
  									-- if live cell
  								
  										
 
  Visibility01=  " $"+ TotoPlane.name + ".ishidden"+ " = true"
  										Visibility02= " $"+ TotoPlane.name + ".ishidden"+ " = false"
  									if (lifeORdead[Idx]==1) then (
  										
 
  										case of 
  											(
  												(StateArray[Idx]<2): execute Visibility01
  												(StateArray[Idx]>3): execute Visibility01	  
  												(StateArray[Idx]==2): execute Visibility02
 
  												(StateArray[Idx]==3): execute Visibility02
  											)
  										)
  									
  									else (
  										case of
  											(
 
  												(StateArray[Idx]==3): execute Visibility02
 
  												(StateArray[Idx]!=3): execute Visibility01				 
  											)
  										
  									)
  									Idx=Idx+1	-- move to the next cell
 
  								)
  							redrawViews()
  							
  						)
  			
  			
  					-- for o in objects where try (o.ishidden == true) catch (false) do delete o
  					
  					group(for o in objects where distance o.center [10,10,6] < A collect o)
  					move (for o in objects where distance o.center [10,10,6] < A collect o)  [50,(10*h),0]
  					freeze(for o in objects where distance o.center [10,10,6] >A collect o) 
  			)
  			
  		)
   ------------------------------------------- function ends here  ------------------------------------------------------------- 
  	
  	
  		
  		
  	on btn1 pressed do
  	(
  		print	spn7.value		   
  		print	spn9.value
  		print	spn10.value
  		print	spn33.value
  		print	rdo11.state
  		
  		yarab= FormGeneration  spn7.value   spn9.value   spn10.value  spn33.value   rdo11.state
  	)
  	
  )createdialog r1
  	
  			
  
7 Replies

Off the top of my head… always use parentheses around string additions…

NeighborName = ( “Cell_” + (x+i) as string + “X” + (y+j) as string + “X”+ gen as string )

NeighborName=  "Cell_" + (x+i) as string + "_X_" + (y+j) as string + "_X_"+ gen as string
checkclass= execute("classof $" + NeighborName + "== Box")

Change that to:

NeighborName=  "Cell_" + (x+i) as string + "_X_" + (y+j) as string + "_X_"+ gen as string
tempStr = ("classof $" + NeighborName + "== Box")
print tempStr
execute tempStr

Check what tempStr is, I am sure there is a space in the “NeighborName” variable somewhere. So you are doing “classOf $startOfObjName endOfObjName == Box” instead of “classOf $startOfObjNameEndOfObjName == Box”. That errant space makes it look like you are supplying ‘classOf’ with two arguments (the object with an incorrect/abbreviated name, and a undefined variable) instead of one (the object).

Also, look at “getNodeByName” instead of using execute.

Hi,

The naming you use is bad beacause is uses points.
use single quotes around the name string: $‘my.weird name’

 
checkclass= execute("classof $'" + NeighborName + "'== Box")
Visibility= execute ("$'"+ NeighborName + "'.ishidden")
Visibility01 = "$'"+ TotoPlane.name + "'.ishidden"+ " = true"
Visibility02 = "$'"+ TotoPlane.name + "'.ishidden"+ " = false"

1 Reply
(@robgalanakis)
Joined: 10 months ago

Posts: 0

Names will also break with ‘-’ I think (at least the syntax highlighting breaks with a hyphen).

It is always wise to surround names with single quotes when using an unknown name. Should have caught that.

we use “-” in names all the time… In our naming conventions, we just it to delineate all sorts of stuff…
ex. CAR-BMW_320i-BLACK

“-” ‘s are fine…

Totally.missed.the.points.too…

i am thankful for you for your advice and help. because i study maxscript as a self study subject and i have no one to support me .
thank u all … the function is working now!

i have no one to support me .

Now you do