import processing.opengl.*; import processing.opengl.*; import anar.*; Obj myObject; Param angle = new Param(0.3f,-PI/4,PI/4,"Angle"); Param length = new Param(5f,0.1f,20,"Length"); /////////////////////////////////// /////////////////////////////////// /////////////////////////////////// void setup(){ //size(screen.width,screen.height,OPENGL); size(1000,500,OPENGL); Anar.init(this); Anar.drawAxis(true); myObject = generatorDeploy(); Face.globalRender = new RenderFaceDoubleSide(new AColor(255,180,180),new AColor(220)); Anar.sliders(length); //Added to the parameters Anar.sliders(angle); //Added to the parameters } void draw(){ background(254); myObject.draw(); } /////////////////////////////////// /////////////////////////////////// /////////////////////////////////// int numOfIterations = 100; Obj generatorDeploy(){ /////////////////////////////////// /////////////////////////////////// //INIT CONTAINERS Obj outputFmz = new Obj(); /////////////////////////////////// /////////////////////////////////// //PREPARE TRANSFORMS //We limit the set of transforms to three different // It will produce a limited set of different patterns //The elementary operation Translate modulor = new TranslateZ(length); //Create 3 subsequent Transform from this one // I use TransformLinear to combine them as a group Transform side0 = new Transform(); side0.add(modulor); Transform side1 = new Transform(); side1.add(modulor); side1.add(modulor); Transform side2 = new Transform(); side2.add(modulor); side2.add(modulor); side2.add(modulor); //Then I have three different transforms from the first one // They have different lengths // Remark, I ends up with only one parameter //Combine them in a table (it will be usefull when randomized) // Here I need to remember that 0 is short, 1 normal and 2 is long Transform[] sides = new Transform[3]; sides[0] = side0; sides[1] = side1; sides[2] = side2; //It's good for sides // Now let's create a rotation (let's keep it simple with only one rotation) // On the chantier, it correspond to uniforms clips between panels //I need to create a RotateZ as it will be used inside Allingn // Allign will allign an axis to Z coordinate then apply a transform and Come back to initial state RotateZ myRotation = new RotateZ(angle); Transform rotation0 = new Transform(); Transform rotation1 = new Transform(); rotation1.add(myRotation); Transform rotation2 = new Transform(); rotation2.add(myRotation); rotation2.add(myRotation); Transform[] rotations = new Transform[3]; rotations[0] = rotation0; rotations[1] = rotation1; rotations[2] = rotation2; /////////////////////////////////// /////////////////////////////////// //ASSIGN TRANSFORMS //I3); //Here I limit the maximum sitance between paths (both ways) //Update new delta state delta += lengthA-lengthB; //Create Rotation from an axis (eachPoint is different // allign need an axis of rotation (defined here by the two old resulting points (previuos) // axis = previousA,previousB Transform rotmp = rotations[(int)((float)Math.random()*3)]; Transform axisRotate = new Transform(previousA,previousB,rotmp); //Create a Translation alligned with the previous // Remember that we don't know how is oriented the last face Transform orientedTranslationA = new Transform(previousAA,previousA,sides[lengthA]); Transform orientedTranslationB = new Transform(previousBB,previousB,sides[lengthB]); //Apply to rotation to the translation Transform comboA = new Transform(); comboA.add(orientedTranslationA); comboA.add(axisRotate); //From the beginning Transform comboB = new Transform(); comboB.add(orientedTranslationB); comboB.add(axisRotate); //From the beginning //Here's where evrything is set together pt with transform newPtA.apply(comboA); newPtB.apply(comboB); //Alternative (if we don't want to apply the rotation // Use this to see only the translation effect on a plane //newPtA.set(sides[lengthA]); //newPtB.set(sides[lengthB]); //Put all that in that containers ptsA.add(newPtA); ptsB.add(newPtB); //Swap Previuos previousAA = previousA; previousBB = previousB; previousA = newPtA; previousB = newPtB; } /////////////////////////////////// /////////////////////////////////// //RETURN EVRYTHING //cREATE FACES FROM TWO LINES WITH SAME NUMBERS OF POINTS outputFmz = new SweepTwoPaths(ptsA,ptsB); Anar.camTarget(outputFmz); return outputFmz; } /////////////////////////////////// /////////////////////////////////// /////////////////////////////////// void keyPressed(){ switch(key){ case ' ': myObject = generatorDeploy(); break; } }