algorithme parameter

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

algorithme parameter

ashuan
Hello alls,

I have a lot of same objects witch a parameter.
This parameter change the presentation of this object.

I want to configure different kind of algorithme who configure my grid of
object with different values of this parameter.

For example :

I have 9 objets like this :
     A    B    C
1
2
3

The first algorithme populate like this :
     A    B    C
1    1    1    1
2    1    1    1
3    1    1    1
The second like this :
     A    B    C
1    1    1    1
2    2    2    2
3    4    4    4
The third like this :
     A    B    C
1    1    2    4
2    1    2    4
3    1    2    4
etc...

I'm use customizer with the algorithme choice and in my code i have
something like that :
    if (opengrid == "V") {
        for(idxLargeur = [1 : x])
        {
            hLn = 10;
            for(idxLongueur = [1 : y])
            {
                random_vect[(idxLargeur*x)
                            + idxLongueur]
                           = hLn ;
            }
        }
    } else {
        min_aleat = opengrid == "S" ? 1 :
                    opengrid == "M" ? 10 : 7;
        max_aleat = opengrid == "S" ? 40 :
                    opengrid == "M" ? 10 : 15;
        random_vect=rands(min_aleat, max_aleat,
                    (x*y));
    }

When i try this, i'm blocked at this line :
                random_vect[(idxLargeur*x)
                            + idxLongueur]
                           = hLn ;

How could i do that ?

Thanks






--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: algorithme parameter

doug.moen
OpenSCAD has the syntax of a C-like language, but the semantics are very different. The `=` operator is not the assignment operator found in C-like languages. `=` defines a variable, it doesn't assign to it (ie, it doesn't update the current value). You can only define a variable once. If you mess this up, you often don't get any error messages.

Try something like this:

random_vect = opengrid == "V"
    ? [for (i=[1:x*y]) 10]
    : let (min_aleat = opengrid == "S" ? 1 :
                       opengrid == "M" ? 10 : 7,
           max_aleat = opengrid == "S" ? 40 :
                       opengrid == "M" ? 10 : 15)
      rands(min_aleat, max_aleat, x*y);


On 25 October 2017 at 11:40, ashuan <[hidden email]> wrote:
Hello alls,

I have a lot of same objects witch a parameter.
This parameter change the presentation of this object.

I want to configure different kind of algorithme who configure my grid of
object with different values of this parameter.

For example :

I have 9 objets like this :
     A    B    C
1
2
3

The first algorithme populate like this :
     A    B    C
1    1    1    1
2    1    1    1
3    1    1    1
The second like this :
     A    B    C
1    1    1    1
2    2    2    2
3    4    4    4
The third like this :
     A    B    C
1    1    2    4
2    1    2    4
3    1    2    4
etc...

I'm use customizer with the algorithme choice and in my code i have
something like that :
    if (opengrid == "V") {
        for(idxLargeur = [1 : x])
        {
            hLn = 10;
            for(idxLongueur = [1 : y])
            {
                random_vect[(idxLargeur*x)
                            + idxLongueur]
                           = hLn ;
            }
        }
    } else {
        min_aleat = opengrid == "S" ? 1 :
                    opengrid == "M" ? 10 : 7;
        max_aleat = opengrid == "S" ? 40 :
                    opengrid == "M" ? 10 : 15;
        random_vect=rands(min_aleat, max_aleat,
                    (x*y));
    }

When i try this, i'm blocked at this line :
                random_vect[(idxLargeur*x)
                            + idxLongueur]
                           = hLn ;

How could i do that ?

Thanks






--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: algorithme parameter

ashuan
Thanks for your answer.

Could i try something like this :

if (algo == "V")
{
    algovector1
    vector1 = ...
}
if (algo == "C")
{
    algovector2
    vector2 = ...
}
if (algo == "A")
{
    algovector3
    vector3 = ...
}
finalVector = algo == "V" ? vector1 :
                    algo == "C" ? vector2 :
                    algo == "A" ? vector3 : [];



--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: algorithme parameter

ashuan
I think my solution are not ok because, i need to make a loop for calculated
each vector values.
In that case, each value could not populate my vector distinctly because the
first affectation block the vector value.





--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: algorithme parameter

doug.moen
The following syntax won't work, because the definitions of `vector1`, `vector2` and `vector3` are local to the enclosing {...} compound statement, and are not visible at the top level:

if (algo == "V")
{
    algovector1
    vector1 = ...
}
if (algo == "C")
{
    algovector2
    vector2 = ...
}
if (algo == "A")
{
    algovector3
    vector3 = ...
}
finalVector = algo == "V" ? vector1 :
                    algo == "C" ? vector2 :
                    algo == "A" ? vector3 : [];

So your code needs to be structured more like this:

vector1 = ...;
vector2 = ...;
vector3 = ...;
finalVector = algo == "V" ? vector1 :
                    algo == "C" ? vector2 :
                    algo == "A" ? vector3 : [];

Or you can move the values of vector1, vector2 and vector3 inside of the ? : conditional in the definition of finalVector.

If you need to use a loop to construct one of the vectors, then you should try to use List Comprehension syntax, which allows you to put a 'for' loop inside of the [...] that constructs a vector.


Virus-free. www.avast.com

On 26 October 2017 at 05:31, ashuan <[hidden email]> wrote:
I think my solution are not ok because, i need to make a loop for calculated
each vector values.
In that case, each value could not populate my vector distinctly because the
first affectation block the vector value.





--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org


_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Reply | Threaded
Open this post in threaded view
|

Re: algorithme parameter

ashuan
Thanks for your help.

I'll try your second solution  like that :

    random_vect =
        opengrid == "S" ?
            rands(1, 40, nbTot)
        :
        opengrid == "M" ?
            rands(10, 10, nbTot)
        :
        opengrid == "L" ?
            rands(7, 15, nbTot)
        :
        opengrid == "V" ?
            [ for (idxLargeur = [1 : nbLargeur])
              for (idxLongueur = [1 : nbLongueur])
                  if (idxLargeur == 2 && idxLongueur == 3) 30 else 0 //
example with one modification        
            ]
        :
            []
        ;

It seem to work correctly.




--
Sent from: http://forum.openscad.org/

_______________________________________________
OpenSCAD mailing list
[hidden email]
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org