3D Point Modifier
//PLANE PART the first plane is attracted by one point on his middle, the point attract all vertice around 60x2 pixel
//the second plane is attracted by one point on his middle too, the point attract all vertice around 30x2 pixel
//FFD Box part a smoothed cube ( look like a sphere ) is attracted by 8 points represented by a box
//in 3dsMax you can do that with the FFD2x2 modifier
/**
* Copyright Seraf_NSS ( http://wonderfl.net/user/Seraf_NSS )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/24bT
*/
package {
import org.papervision3d.materials.WireframeMaterial;
import caurina.transitions.Tweener;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.core.math.Number3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.view.BasicView;
import flash.events.Event;
[SWF(backgroundColor="#FFFFFF", frameRate="30")]
/*
have fun
Seraf aka jerome birembaut
twitter: Seraf_NSS
web: http://www.not-so-stupid.com
*/
public class Main extends BasicView {
private var group : DisplayObject3D;
private var box : Box;
private var boxS : BoxSmooth;
private var arrVert : Vector.<PointAttractor>;
private var init1 : Number3D;
private var init2 : Number3D;
private var init3 : Number3D;
private var plane : Plane;
private var planePoint : PointAttractor;
private var plane2 : Plane;
private var planePoint2 : PointAttractor;
public function Main() {
super(500,400, false, true);
// Wonderfl.capture_delay(10);
init();
}
private function init():void {
group=new DisplayObject3D();
scene.addChild(group);
//PLANE PART the first plane is attracted by one point on his middle, the point attract all vertice around 60x2 pixel
//the second plane is attracted by one point on his middle too, the point attract all vertice around 30x2 pixel
//
plane=new Plane(new WireframeMaterial(0,100,0.2),100,100,10,10);
plane.x=250;
plane.y=150;
plane.rotationY=180;
group.addChild(plane);
planePoint=new PointAttractor(new Vertex3D(),60);
var lp:int=plane.geometry.vertices.length;
while(lp--){
plane.geometry.vertices[lp].extra={gizmoCount:0,gizmoWeight:0};
planePoint.addVertex(plane.geometry.vertices[lp]);
}
plane2=new Plane(new WireframeMaterial(0,100,0.2),100,100,10,10);
plane2.x=250;
plane2.rotationY=180;
group.addChild(plane2);
planePoint2=new PointAttractor(new Vertex3D(),30);
lp=plane2.geometry.vertices.length;
while(lp--){
plane2.geometry.vertices[lp].extra={gizmoCount:0,gizmoWeight:0};
planePoint2.addVertex(plane2.geometry.vertices[lp]);
}
//FFD Box part a smoothed cube ( look like a sphere ) is attracted by 8 points represented by a box
//in 3dsMax you can do that with the FFD2x2 modifier
box=new Box();
group.addChild(box);
boxS=new BoxSmooth(new WireframeMaterial(0,100,0.2));
group.addChild(boxS);
arrVert=new Vector.<PointAttractor>();
var l:int = box.verts.length;
var l2:int = boxS.verts.length;
var l3:int;
var ff:PointAttractor;
var vert:Vertex3D;
l3=int(l2);
while(l3--) boxS.verts[l3].extra={gizmoCount:0,gizmoWeight:0};
while(l--){
vert=box.verts[l];
l3=int(l2);
ff=new PointAttractor(vert,Math.sqrt( vert.x*vert.x + vert.y*vert.y + vert.z*vert.z ));
arrVert.push(ff);
while(l3--)ff.addVertex(boxS.verts[l3]);
}
camera.x = 1000;
camera.y = 1000;
camera.z = 2000;
camera.focus = 100;
camera.zoom = 10;
camera.target = box;
//let's try it
init1=box.verts[1].toNumber3D();
init2=box.verts[2].toNumber3D();
init3=box.verts[3].toNumber3D();
activMotion();
startRendering();
onRenderTick();
}
public function activMotion():void{
Tweener.addTween(planePoint._gizmo,{x:0,y:0,z:0,time:1,delay:1, transition:"easeOutQuart"});
Tweener.addTween(planePoint._gizmo,{x:Math.random()*500-250,y:Math.random()*500-250,z:Math.random()*500-250,time:1, transition:"easeOutQuart"});
Tweener.addTween(box.verts[1],{x:init1.x,y:init1.y,z:init1.z,time:1,delay:1, transition:"easeOutQuart"});
Tweener.addTween(box.verts[1],{x:init1.x+Math.random()*500-250,y:init1.y+Math.random()*500-250,z:init1.z+Math.random()*500-250,time:1, transition:"easeOutQuart"});
Tweener.addTween(box.verts[2],{x:init2.x,y:init2.y,z:init2.z,time:1,delay:1, transition:"easeOutQuart"});
Tweener.addTween(box.verts[2],{x:init2.x+Math.random()*500-250,y:init2.y+Math.random()*500-250,z:init2.z+Math.random()*500-250,time:1, transition:"easeOutQuart"});
Tweener.addTween(box.verts[3],{x:init3.x,y:init3.y,z:init3.z,time:1,delay:1, transition:"easeOutQuart",onComplete:activMotion});
Tweener.addTween(box.verts[3],{x:init3.x+Math.random()*500-250,y:init3.y+Math.random()*500-250,z:init3.z+Math.random()*500-250,time:1, transition:"easeOutQuart"});
}
protected override function onRenderTick(event:Event=null):void{
var vert:Vertex3D;
var l:int=boxS.verts.length;
while(l--){
vert=boxS.verts[l];
if(vert.extra.gizmoCount>0){
vert.x=0;
vert.y=0;
vert.z=0;
}
}
l = arrVert.length;
var ff:PointAttractor;
while(l--){
ff=arrVert[l];
// ff._gizmo.x--;
ff.update();
}
l=plane.geometry.vertices.length;
while(l--){
vert=plane.geometry.vertices[l];
if(vert.extra.gizmoCount>0){
vert.x=0;
vert.y=0;
vert.z=0;
}
}
planePoint.update();
l=plane2.geometry.vertices.length;
while(l--){
vert=plane2.geometry.vertices[l];
if(vert.extra.gizmoCount>0){
vert.x=0;
vert.y=0;
vert.z=0;
}
}
planePoint2._gizmo.x= planePoint._gizmo.x;
planePoint2._gizmo.y= planePoint._gizmo.y;
planePoint2._gizmo.z= planePoint._gizmo.z;
planePoint2.update();
super.onRenderTick(event);
}
}
}
import org.papervision3d.core.geom.*;
import org.papervision3d.core.geom.renderables.Triangle3D;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.core.math.Number3D;
import org.papervision3d.core.math.NumberUV;
import org.papervision3d.core.proto.*;
class PointAttractor {
private var gizmo : Vertex3D;
private var verts : Vector.<Object>;
private var radius : Number;
public function PointAttractor(vert:Vertex3D,r:Number) {
gizmo = vert;
radius=r;
verts=new Vector.<Object>();
}
public function addVertex(vert:Vertex3D) : void {
var num3d:Number3D=Number3D.sub( gizmo.toNumber3D(),vert.toNumber3D() );
var d:Number=Math.sqrt( num3d.x*num3d.x + num3d.y*num3d.y + num3d.z*num3d.z );
if(d<radius){
var weight:Number=1-d/radius;
num3d.normalize();
num3d.multiplyEq(radius);
verts.push({v:vert,d:d,w:weight,init:Number3D.sub(gizmo.toNumber3D(),num3d),from:vert.toNumber3D()});
vert.extra.gizmoCount++;
vert.extra.gizmoWeight+=weight;
}
}
public function update() : void {
var l:int = verts.length;
var v:Object;
var num3d:Number3D;
while(l--){
v=verts[l];
num3d=Number3D.sub(gizmo.toNumber3D(),v.init);
num3d.multiplyEq(v.w);
v.v.x+=(v.init.x+num3d.x)*v.w/v.v.extra.gizmoWeight;
v.v.y+=(v.init.y+num3d.y)*v.w/v.v.extra.gizmoWeight;
v.v.z+=(v.init.z+num3d.z)*v.w/v.v.extra.gizmoWeight;
}
}
public function get _gizmo() : Vertex3D {
return gizmo;
}
}
class Box extends TriangleMesh3D
{
public var verts :Array;
public var faceAr:Array;
public var uvs :Array;
private function v(x:Number,y:Number,z:Number):void
{
verts.push(new Vertex3D(x,y,z));
}
private function uv(u:Number,v:Number):void
{
uvs.push(new NumberUV(u,v));
}
private function f(vn0:int, vn1:int, vn2:int, uvn0:int, uvn1:int,uvn2:int):void
{
faceAr.push( new Triangle3D( this, [verts[vn0],verts[vn1],verts[vn2] ], null, [uvs[uvn0],uvs[uvn1],uvs[uvn2]] ) );
}
public function Box( material:MaterialObject3D=null )
{
super( material, new Array(), new Array(), null );
verts = this.geometry.vertices;
faceAr= this.geometry.faces;
uvs =new Array();
v(-50.0,-50.0,49.6404);
v(50.0,-50.0,49.6404);
v(-50.0,50.0,49.6404);
v(50.0,50.0,49.6404);
v(-50.0,-50.0,-50.3596);
v(50.0,-50.0,-50.3596);
v(-50.0,50.0,-50.3596);
v(50.0,50.0,-50.3596);
uv(0.0,0.0);
uv(1.0,0.0);
uv(0.0,1.0);
uv(1.0,1.0);
uv(0.0,0.0);
uv(1.0,0.0);
uv(0.0,1.0);
uv(1.0,1.0);
uv(0.0,0.0);
uv(1.0,0.0);
uv(0.0,1.0);
uv(1.0,1.0);
f(0,2,3,9,11,10);
f(3,1,0,10,8,9);
f(4,5,7,8,9,11);
f(7,6,4,11,10,8);
f(0,1,5,4,5,7);
f(5,4,0,7,6,4);
f(1,3,7,0,1,3);
f(7,5,1,3,2,0);
f(3,2,6,4,5,7);
f(6,7,3,7,6,4);
f(2,0,4,0,1,3);
f(4,6,2,3,2,0);
this.geometry.ready = true;
}
}
//import org.papervision3d.core.*;
class BoxSmooth extends TriangleMesh3D
{
public var verts :Array;
public var faceAr:Array;
public var uvs :Array;
private function v(x:Number,y:Number,z:Number):void
{
verts.push(new Vertex3D(x,y,z));
}
private function uv(u:Number,v:Number):void
{
uvs.push(new NumberUV(u,v));
}
private function f(vn0:int, vn1:int, vn2:int, uvn0:int, uvn1:int,uvn2:int):void
{
faceAr.push( new Triangle3D( this, [verts[vn0],verts[vn1],verts[vn2] ], null, [uvs[uvn0],uvs[uvn1],uvs[uvn2]] ) );
}
public function BoxSmooth( material:MaterialObject3D=null )
{
super( material, new Array(), new Array(), null );
verts = this.geometry.vertices;
faceAr= this.geometry.faces;
uvs =new Array();
v(-25.463,-25.463,25.5674);
v(25.463,-25.463,25.5674);
v(-25.463,25.463,25.5674);
v(25.463,25.463,25.5674);
v(-25.463,-25.463,-25.3586);
v(25.463,-25.463,-25.3586);
v(-25.463,25.463,-25.3586);
v(25.463,25.463,-25.3586);
v(0.0,-2.65607e-007,44.028);
v(0.0,-4.10553e-006,-43.8192);
v(0.0,-43.9236,0.104416);
v(43.9236,-2.18557e-006,0.104412);
v(0.0,43.9236,0.104408);
v(-43.9236,-2.18557e-006,0.104412);
v(-32.1615,-7.79747e-007,32.2659);
v(0.0,32.1615,32.2659);
v(32.1615,-7.79747e-007,32.2659);
v(0.0,-32.1615,32.2659);
v(0.0,-32.1615,-32.057);
v(32.1615,-3.59139e-006,-32.057);
v(0.0,32.1615,-32.057);
v(-32.1615,-3.59139e-006,-32.057);
v(32.1615,-32.1615,0.104412);
v(-32.1615,-32.1615,0.104412);
v(32.1615,32.1615,0.104412);
v(-32.1615,32.1615,0.104412);
v(-16.3194,-16.3194,38.2989);
v(-16.3194,16.3194,38.2989);
v(16.3194,16.3194,38.2989);
v(16.3194,-16.3194,38.2989);
v(-16.3194,-16.3194,-38.09);
v(16.3194,-16.3194,-38.09);
v(16.3194,16.3194,-38.09);
v(-16.3194,16.3194,-38.09);
v(-16.3194,-38.1944,16.4239);
v(16.3194,-38.1944,16.4239);
v(16.3194,-38.1944,-16.215);
v(-16.3194,-38.1944,-16.215);
v(38.1944,-16.3194,16.4239);
v(38.1944,16.3194,16.4239);
v(38.1944,16.3194,-16.215);
v(38.1944,-16.3194,-16.215);
v(16.3194,38.1944,16.4239);
v(-16.3194,38.1944,16.4239);
v(-16.3194,38.1944,-16.215);
v(16.3194,38.1944,-16.215);
v(-38.1944,16.3194,16.4239);
v(-38.1944,-16.3194,16.4239);
v(-38.1944,-16.3194,-16.215);
v(-38.1944,16.3194,-16.215);
v(-29.9479,-15.1042,30.0523);
v(-17.5347,-3.94617e-007,41.0766);
v(0.0,-17.5347,41.0766);
v(-15.1042,-29.9479,30.0523);
v(-15.1042,29.9479,30.0523);
v(0.0,17.5347,41.0766);
v(-29.9479,15.1042,30.0523);
v(29.9479,15.1042,30.0523);
v(17.5347,-3.94617e-007,41.0766);
v(15.1042,29.9479,30.0523);
v(15.1042,-29.9479,30.0523);
v(29.9479,-15.1042,30.0523);
v(-15.1042,-29.9479,-29.8435);
v(0.0,-17.5347,-40.8678);
v(-17.5347,-3.97652e-006,-40.8678);
v(-29.9479,-15.1042,-29.8435);
v(29.9479,-15.1042,-29.8435);
v(17.5347,-3.97652e-006,-40.8678);
v(15.1042,-29.9479,-29.8435);
v(15.1042,29.9479,-29.8435);
v(0.0,17.5347,-40.8678);
v(29.9479,15.1042,-29.8435);
v(-29.9479,15.1042,-29.8435);
v(-15.1042,29.9479,-29.8435);
v(0.0,-40.9722,17.6391);
v(-17.5347,-40.9722,0.104412);
v(-29.9479,-29.9479,15.2086);
v(29.9479,-29.9479,15.2086);
v(17.5347,-40.9722,0.104412);
v(0.0,-40.9722,-17.4303);
v(29.9479,-29.9479,-14.9998);
v(-29.9479,-29.9479,-14.9998);
v(40.9722,-1.4191e-006,17.6391);
v(40.9722,-17.5347,0.104412);
v(29.9479,29.9479,15.2086);
v(40.9722,17.5347,0.104412);
v(40.9722,-2.95204e-006,-17.4303);
v(29.9479,29.9479,-14.9998);
v(0.0,40.9722,17.6391);
v(17.5347,40.9722,0.104412);
v(-29.9479,29.9479,15.2086);
v(-17.5347,40.9722,0.104412);
v(0.0,40.9722,-17.4303);
v(-29.9479,29.9479,-14.9998);
v(-40.9722,-1.4191e-006,17.6391);
v(-40.9722,17.5347,0.104412);
v(-40.9722,-17.5347,0.104412);
v(-40.9722,-2.95204e-006,-17.4303);
uv(0.0,0.0);
uv(1.0,0.0);
uv(0.0,1.0);
uv(1.0,1.0);
uv(0.0,0.0);
uv(1.0,0.0);
uv(0.0,1.0);
uv(1.0,1.0);
uv(0.0,0.0);
uv(1.0,0.0);
uv(0.0,1.0);
uv(1.0,1.0);
uv(0.0,0.0);
uv(1.0,0.0);
uv(0.0,1.0);
uv(1.0,1.0);
uv(0.0,0.0);
uv(1.0,0.0);
uv(0.0,1.0);
uv(1.0,1.0);
uv(0.0,0.0);
uv(1.0,0.0);
uv(0.0,1.0);
uv(1.0,1.0);
uv(0.5,0.5);
uv(0.5,0.5);
uv(0.5,0.5);
uv(0.5,0.5);
uv(0.5,0.5);
uv(0.5,0.5);
uv(1.0,0.5);
uv(0.5,0.0);
uv(0.5,1.0);
uv(0.5,0.0);
uv(0.0,0.5);
uv(0.5,0.0);
uv(0.5,0.0);
uv(0.5,0.0);
uv(0.5,0.0);
uv(0.5,1.0);
uv(1.0,0.5);
uv(0.5,1.0);
uv(0.5,1.0);
uv(0.5,1.0);
uv(0.0,0.5);
uv(0.5,1.0);
uv(1.0,0.5);
uv(0.0,0.5);
uv(0.0,0.5);
uv(1.0,0.5);
uv(1.0,0.5);
uv(0.0,0.5);
uv(1.0,0.5);
uv(0.0,0.5);
uv(0.75,0.25);
uv(0.75,0.75);
uv(0.25,0.75);
uv(0.25,0.25);
uv(0.25,0.25);
uv(0.75,0.25);
uv(0.75,0.75);
uv(0.25,0.75);
uv(0.25,0.25);
uv(0.75,0.25);
uv(0.75,0.75);
uv(0.25,0.75);
uv(0.25,0.25);
uv(0.75,0.25);
uv(0.75,0.75);
uv(0.25,0.75);
uv(0.25,0.25);
uv(0.75,0.25);
uv(0.75,0.75);
uv(0.25,0.75);
uv(0.25,0.25);
uv(0.75,0.25);
uv(0.75,0.75);
uv(0.25,0.75);
uv(1.0,0.25);
uv(0.75,0.0);
uv(0.75,0.5);
uv(0.5,0.25);
uv(0.75,0.0);
uv(0.25,0.0);
uv(0.75,1.0);
uv(0.75,0.0);
uv(0.5,0.75);
uv(1.0,0.75);
uv(0.25,0.0);
uv(0.0,0.75);
uv(0.75,0.0);
uv(0.25,0.5);
uv(0.25,1.0);
uv(0.25,0.0);
uv(0.25,0.0);
uv(0.75,0.0);
uv(0.0,0.25);
uv(0.25,0.0);
uv(0.25,0.0);
uv(0.25,1.0);
uv(0.5,0.25);
uv(0.25,0.5);
uv(0.0,0.25);
uv(0.75,1.0);
uv(1.0,0.25);
uv(0.25,1.0);
uv(0.75,0.5);
uv(0.75,0.0);
uv(0.75,1.0);
uv(0.75,1.0);
uv(0.25,1.0);
uv(0.5,0.75);
uv(1.0,0.75);
uv(0.75,1.0);
uv(0.0,0.75);
uv(0.25,1.0);
uv(0.25,1.0);
uv(0.75,1.0);
uv(0.5,0.25);
uv(0.25,0.5);
uv(0.0,0.25);
uv(1.0,0.25);
uv(1.0,0.25);
uv(0.0,0.25);
uv(0.75,0.5);
uv(0.5,0.75);
uv(1.0,0.75);
uv(0.0,0.75);
uv(0.0,0.75);
uv(1.0,0.75);
uv(0.5,0.25);
uv(0.25,0.5);
uv(1.0,0.25);
uv(0.0,0.25);
uv(0.75,0.5);
uv(0.5,0.75);
uv(1.0,0.75);
uv(0.0,0.75);
uv(0.5,0.25);
uv(0.25,0.5);
uv(1.0,0.25);
uv(0.0,0.25);
uv(0.75,0.5);
uv(0.5,0.75);
uv(1.0,0.75);
uv(0.0,0.75);
uv(0.5,0.25);
uv(0.25,0.5);
uv(0.75,0.5);
uv(0.5,0.75);
f(0,50,26,9,78,54);
f(26,53,0,54,82,9);
f(14,51,26,30,80,54);
f(26,50,14,54,78,30);
f(8,52,26,24,81,54);
f(26,51,8,54,80,24);
f(17,53,26,36,82,54);
f(26,52,17,54,81,36);
f(2,54,27,11,84,55);
f(27,56,2,55,87,11);
f(15,55,27,32,86,55);
f(27,54,15,55,84,32);
f(8,51,27,24,80,55);
f(27,55,8,55,86,24);
f(14,56,27,30,87,55);
f(27,51,14,55,80,30);
f(3,57,28,10,89,56);
f(28,59,3,56,92,10);
f(16,58,28,34,91,56);
f(28,57,16,56,89,34);
f(8,55,28,24,86,56);
f(28,58,8,56,91,24);
f(15,59,28,32,92,56);
f(28,55,15,56,86,32);
f(1,60,29,8,94,57);
f(29,61,1,57,96,8);
f(17,52,29,36,81,57);
f(29,60,17,57,94,36);
f(8,58,29,24,91,57);
f(29,52,8,57,81,24);
f(16,61,29,34,96,57);
f(29,58,16,57,91,34);
f(4,62,30,20,98,58);
f(30,65,4,58,102,20);
f(18,63,30,38,100,58);
f(30,62,18,58,98,38);
f(9,64,30,25,101,58);
f(30,63,9,58,100,25);
f(21,65,30,44,102,58);
f(30,64,21,58,101,44);
f(5,66,31,21,104,59);
f(31,68,5,59,107,21);
f(19,67,31,40,106,59);
f(31,66,19,59,104,40);
f(9,63,31,25,100,59);
f(31,67,9,59,106,25);
f(18,68,31,38,107,59);
f(31,63,18,59,100,38);
f(7,69,32,23,109,60);
f(32,71,7,60,112,23);
f(20,70,32,42,111,60);
f(32,69,20,60,109,42);
f(9,67,32,25,106,60);
f(32,70,9,60,111,25);
f(19,71,32,40,112,60);
f(32,67,19,60,106,40);
f(6,72,33,22,114,61);
f(33,73,6,61,116,22);
f(21,64,33,44,101,61);
f(33,72,21,61,114,44);
f(9,70,33,25,111,61);
f(33,64,9,61,101,25);
f(20,73,33,42,116,61);
f(33,70,20,61,111,42);
f(0,53,34,4,83,62);
f(34,76,0,62,120,4);
f(17,74,34,37,118,62);
f(34,53,17,62,83,37);
f(10,75,34,26,119,62);
f(34,74,10,62,118,26);
f(23,76,34,48,120,62);
f(34,75,23,62,119,48);
f(1,77,35,5,122,63);
f(35,60,1,63,95,5);
f(22,78,35,46,124,63);
f(35,77,22,63,122,46);
f(10,74,35,26,118,63);
f(35,78,10,63,124,26);
f(17,60,35,37,95,63);
f(35,74,17,63,118,37);
f(5,68,36,7,108,64);
f(36,80,5,64,126,7);
f(18,79,36,39,125,64);
f(36,68,18,64,108,39);
f(10,78,36,26,124,64);
f(36,79,10,64,125,26);
f(22,80,36,46,126,64);
f(36,78,22,64,124,46);
f(4,81,37,6,128,65);
f(37,62,4,65,99,6);
f(23,75,37,48,119,65);
f(37,81,23,65,128,48);
f(10,79,37,26,125,65);
f(37,75,10,65,119,26);
f(18,62,37,39,99,65);
f(37,79,18,65,125,39);
f(1,61,38,0,97,66);
f(38,77,1,66,123,0);
f(16,82,38,35,130,66);
f(38,61,16,66,97,35);
f(11,83,38,27,131,66);
f(38,82,11,66,130,27);
f(22,77,38,47,123,66);
f(38,83,22,66,131,47);
f(3,84,39,1,132,67);
f(39,57,3,67,90,1);
f(24,85,39,50,134,67);
f(39,84,24,67,132,50);
f(11,82,39,27,130,67);
f(39,85,11,67,134,27);
f(16,57,39,35,90,67);
f(39,82,16,67,130,35);
f(7,71,40,3,113,68);
f(40,87,7,68,136,3);
f(19,86,40,41,135,68);
f(40,71,19,68,113,41);
f(11,85,40,27,134,68);
f(40,86,11,68,135,27);
f(24,87,40,50,136,68);
f(40,85,24,68,134,50);
f(5,80,41,2,127,69);
f(41,66,5,69,105,2);
f(22,83,41,47,131,69);
f(41,80,22,69,127,47);
f(11,86,41,27,135,69);
f(41,83,11,69,131,27);
f(19,66,41,41,105,69);
f(41,86,19,69,135,41);
f(3,59,42,16,93,70);
f(42,84,3,70,133,16);
f(15,88,42,33,138,70);
f(42,59,15,70,93,33);
f(12,89,42,28,139,70);
f(42,88,12,70,138,28);
f(24,84,42,51,133,70);
f(42,89,24,70,139,51);
f(2,90,43,17,140,71);
f(43,54,2,71,85,17);
f(25,91,43,52,142,71);
f(43,90,25,71,140,52);
f(12,88,43,28,138,71);
f(43,91,12,71,142,28);
f(15,54,43,33,85,71);
f(43,88,15,71,138,33);
f(6,73,44,19,117,72);
f(44,93,6,72,144,19);
f(20,92,44,43,143,72);
f(44,73,20,72,117,43);
f(12,91,44,28,142,72);
f(44,92,12,72,143,28);
f(25,93,44,52,144,72);
f(44,91,25,72,142,52);
f(7,87,45,18,137,73);
f(45,69,7,73,110,18);
f(24,89,45,51,139,73);
f(45,87,24,73,137,51);
f(12,92,45,28,143,73);
f(45,89,12,73,139,28);
f(20,69,45,43,110,73);
f(45,92,20,73,143,43);
f(2,56,46,12,88,74);
f(46,90,2,74,141,12);
f(14,94,46,31,146,74);
f(46,56,14,74,88,31);
f(13,95,46,29,147,74);
f(46,94,13,74,146,29);
f(25,90,46,53,141,74);
f(46,95,25,74,147,53);
f(0,76,47,13,121,75);
f(47,50,0,75,79,13);
f(23,96,47,49,148,75);
f(47,76,23,75,121,49);
f(13,94,47,29,146,75);
f(47,96,13,75,148,29);
f(14,50,47,31,79,75);
f(47,94,14,75,146,31);
f(4,65,48,15,103,76);
f(48,81,4,76,129,15);
f(21,97,48,45,149,76);
f(48,65,21,76,103,45);
f(13,96,48,29,148,76);
f(48,97,13,76,149,29);
f(23,81,48,49,129,76);
f(48,96,23,76,148,49);
f(6,93,49,14,145,77);
f(49,72,6,77,115,14);
f(25,95,49,53,147,77);
f(49,93,25,77,145,53);
f(13,97,49,29,149,77);
f(49,95,13,77,147,29);
f(21,72,49,45,115,77);
f(49,97,21,77,149,45);
this.geometry.ready = true;
}
}