Trolltech Home | QSA-interest Home | Recent Threads | All Threads | Author | Date
All threads index page 1

QSA-interest Archive, October 2005
setting variables in if-blocks -> undefined variable-type


Message 1 in thread

Hi
I tried to get the following script working but it stops with the error:
 "TypeError. Undefined member function 'AddActor' for object 'undefined' of 
type 'Undefined'"
That happens because the variable 'renderer' gets defined in the contents of 
the function but gets set in an if-block.
Something like this would work in C++. What can I do to make it work in 
QScript, too ?

	Greetings
		Jens	

function getRenderer()
	{
	    var renderer;
	    var renReg;

	    // search for a registered vtkRenderer
	    objArray =  
Application.currentView.getRegisteredObjectArray("QVSWrapper_vtkRenderer");
	    if( objArray.length > 0 )
	    {
		if( vtkRenderer.canConvert( objArray[0] ))
		{
		    var renderer = vtkRenderer.convert( objArray[0] );
		    renReg = renderer.QVSObjectId();
		}
	    }
	    // if no renderer got found create a new one and register it
	    if( renderer == undefined )
	    {
	    	    var renderer = new vtkRenderer();
	    	    renReg = 
Application.View2D_3.registerObject( renderer.as_QVSObject() );
		    debug("new Renderer");
	    }

	    renderer.SetBackground(0.1, 0.2, 0.3);
	}


Message 2 in thread

Hi Jens,

It looks like you are re-declaring "renderer" inside the if block.  By  
doing "var renderer" you are declaring a local variable inside the if  
block with the same name, thus shadowing the previous declaration.   
Instead of this:

> 		    var renderer = vtkRenderer.convert( objArray[0] );

Do this:

> 		    renderer = vtkRenderer.convert( objArray[0] );

Then it should assign the value to the previously-declared "renderer"  
variable.

Joel

On Oct 10, 2005, at 3:31 PM, Jens wrote:

> Hi
> I tried to get the following script working but it stops with the  
> error:
>  "TypeError. Undefined member function 'AddActor' for object  
> 'undefined' of
> type 'Undefined'"
> That happens because the variable 'renderer' gets defined in the  
> contents of
> the function but gets set in an if-block.
> Something like this would work in C++. What can I do to make it work in
> QScript, too ?
>
> 	Greetings
> 		Jens	
>
> function getRenderer()
> 	{
> 	    var renderer;
> 	    var renReg;
>
> 	    // search for a registered vtkRenderer
> 	    objArray =
> Application.currentView.getRegisteredObjectArray("QVSWrapper_vtkRendere 
> r");
> 	    if( objArray.length > 0 )
> 	    {
> 		if( vtkRenderer.canConvert( objArray[0] ))
> 		{
> 		    var renderer = vtkRenderer.convert( objArray[0] );
> 		    renReg = renderer.QVSObjectId();
> 		}
> 	    }
> 	    // if no renderer got found create a new one and register it
> 	    if( renderer == undefined )
> 	    {
> 	    	    var renderer = new vtkRenderer();
> 	    	    renReg =
> Application.View2D_3.registerObject( renderer.as_QVSObject() );
> 		    debug("new Renderer");
> 	    }
>
> 	    renderer.SetBackground(0.1, 0.2, 0.3);
> 	}
>
> To unsubscribe - send "unsubscribe" in the body to  
> qsa-interest-request@xxxxxxxxxxxxx


Message 3 in thread

Jens wrote:
> Hi
> I tried to get the following script working but it stops with the error:
>  "TypeError. Undefined member function 'AddActor' for object 'undefined' of 
> type 'Undefined'"
> That happens because the variable 'renderer' gets defined in the contents of 
> the function but gets set in an if-block.
> Something like this would work in C++. What can I do to make it work in 
> QScript, too ?
> 
> 	Greetings
> 		Jens	
> 
> function getRenderer()
> 	{
> 	    var renderer;
...
> 	    if( objArray.length > 0 )
> 	    {
> 		if( vtkRenderer.canConvert( objArray[0] ))
> 		{
> 		    var renderer = vtkRenderer.convert( objArray[0] );


Hi Jens,

By redeclaring renderer in the inner if you get shadowing of the 
renderer variable in the getRenderer() function. A C++ compiler would 
probably warn you given the right verbosity level ;-)

-
Gunnar


Message 4 in thread

Am Dienstag, 11. Oktober 2005 09:21 schrieb Gunnar Sletta:
> Jens wrote:
> > Hi
> > I tried to get the following script working but it stops with the error:
> >  "TypeError. Undefined member function 'AddActor' for object 'undefined'
> > of type 'Undefined'"
> > That happens because the variable 'renderer' gets defined in the contents
> > of the function but gets set in an if-block.
> > Something like this would work in C++. What can I do to make it work in
> > QScript, too ?
> >
> > 	Greetings
> > 		Jens
> >
> > function getRenderer()
> > 	{
> > 	    var renderer;
>
> ...
>
> > 	    if( objArray.length > 0 )
> > 	    {
> > 		if( vtkRenderer.canConvert( objArray[0] ))
> > 		{
> > 		    var renderer = vtkRenderer.convert( objArray[0] );
>
> Hi Jens,
>
> By redeclaring renderer in the inner if you get shadowing of the
> renderer variable in the getRenderer() function. A C++ compiler would
> probably warn you given the right verbosity level ;-)

Sorry ... of course that´s right. It works fine now.
	Greetings
		Jens
> -
> Gunnar
>
> To unsubscribe - send "unsubscribe" in the body to
> qsa-interest-request@xxxxxxxxxxxxx