سؤال

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

هل كانت مفيدة؟

المحلول

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);
    }

    "
}

نصائح أخرى

Seems it is not "reading" the variable "compri", so I switched with the values and worked perfectly.

#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.7

    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]= -0.5*CTRL;
        pt.addChildren = node;
        CTRL += 1;
        if(inic)
        {
            if(CTRL < quant)
            {
                Browser.createVrmlFromURL(wrlTab, me, 'set_node');
            }
            else
            {
                inic = false;
            }
        }
    }
    "
}

The result I wanted in the first place. enter image description here

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top