Search code examples
javascriptvrml

Object does not multiply correctly over the Z axis


I'm having trouble in recreating the same object over the Z axis, it's giving the wrong space between them and I'm not seeing where is the problem.
I want no space between the objects. Here is the code of the object Tabua.wrl

#VRML V2.0 utf8

Transform
{
    translation 0 0 0
    children
    [
        Shape
        {
            appearance Appearance
            {
                texture ImageTexture
                {
                    url "Imagens/madeira1.jpg"
                }
            }

            geometry Box
            {
                size 2 0.05 0.5
            }
        }
    ]
}

And here is the code to create the repetition of the object.
quant = how many times the object will repeat
compri = space jump

#VRML V2.0 utf8
Transform
{
    rotation 0 1 0 3.14
    translation 0 0 0
    children
    [
        DEF Ponte Group
        {

        }
    ]
}

DEF pont Script
{
    field SFNode pt USE Ponte
    field SFNode me USE pont

    field SFInt32 CTRL 0
    field SFInt32 quant 5

    field MFFloat compri 0.5

    field MFString wrlTab "Tabua.wrl"

    eventIn MFNode set_node

    field SFBool inic TRUE

    url "javascript:
    function initialize()
    {
        Browser.createVrmlFromURL(wrlTab, me, 'set_node');
    }

    function set_node (node, t)
    {
        node[0].translation[2]= -compri*CTRL;
        pt.addChildren = node;
        CTRL+=1;
        if(inic)
        {
            if(CTRL < quant)
            {
                Browser.createVrmlFromURL(wrlTab, me, 'set_node');
            }
            else
            {
                inic = false;
            }
        }
    }
    "
}  

And the image of what is doing.
enter image description here


Solution

  • I would suggest using a PROTO instead of Browser.createVrmlFromURL because you're re-downloading the external .wrl file five times whereas this would download it only once.


    Tabua.wrl:

    #VRML V2.0 utf8
    
    PROTO Tabua[
        exposedField    SFVec3f     translation     0 0 0
    ]{
        Transform {
            translation IS translation
            children Shape {
                appearance Appearance {
                    texture ImageTexture{
                        url "Imagens/madeira1.jpg"
                    }
                }
                geometry Box {
                    size 2 0.05 0.5
                }
            }
        }
    }
    

    Main scene:

    #VRML V2.0 utf8
    
    Viewpoint {
        position     1.888 1.912 4.417
        orientation  -0.652 0.735 0.185 0.679
        fieldOfView  0.716
    }
    
    DEF Ponte Group {}
    
    Script {
        field       SFInt32     quant               5
    
        field       SFString    protoDefinition     "
            EXTERNPROTO Tabua [
                exposedField    SFVec3f     translation
            ] \"Tabua.wrl\"
        "
    
        field       SFNode      Ponte               USE Ponte
    
        directOutput TRUE
        url "javascript:
    
        function initialize(){
            var vrml = protoDefinition;
            for (var i = 0; i < quant; i++){
                var z = i * -0.5;
                vrml += 'Tabua{translation 0 0 ' + z + '}';
            }
            Ponte.addChildren = Browser.createVrmlFromString(vrml);
        }
    
        "
    }