Section 1
//Camera3D (graphics3d.Camera3D)
package graphics3d {
import flash.geom.*;
public class Camera3D {
protected var _x:Number;
protected var _y:Number;
protected var _world:World3D;
protected var _maxAngle:Number;
protected var _rX:Number;
protected var _rY:Number;
protected var _rZ:Number;
protected var _height:Number;
protected var _width:Number;
protected var _distance:Number;
protected var _horizon:uint;
protected var _z:Number;
public function Camera3D(_arg1:Number, _arg2:Number, _arg3:Number){
var _local4:Point3D;
var _local5:Point3D;
super();
if (isNaN(_arg1)){
_arg1 = 1;
};
if (isNaN(_arg2)){
_arg2 = 1;
};
if (isNaN(_arg3)){
_arg3 = 1;
};
_width = _arg1;
_height = _arg2;
_distance = _arg3;
_world = null;
_horizon = 50000;
_local4 = new Point3D(0, _arg3, 0);
_local5 = new Point3D((_arg1 * 0.5), _arg3, (_arg2 * 0.5));
_maxAngle = Utils.angleBetween(_local4, _local5);
_rX = (_rY = (_rZ = (_x = (_y = (_z = 0)))));
}
public function set z(_arg1:Number){
if (isNaN(_arg1)){
_arg1 = 0;
};
_z = _arg1;
}
public function get horizon():uint{
return (_horizon);
}
public function set width(_arg1:Number){
if (((isNaN(_arg1)) || ((_arg1 <= 0)))){
return;
};
_width = _arg1;
}
public function get height():Number{
return (_height);
}
public function get position():Point3D{
return (new Point3D(_x, _y, _z));
}
public function get rX():Number{
return (_rX);
}
public function get rZ():Number{
return (_rZ);
}
public function lookAt(_arg1:Point3D){
var _local2:Number;
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
_local2 = (_arg1.x - x);
_local3 = (_arg1.y - y);
_local4 = (_arg1.z - z);
_local5 = Math.sqrt(((_local2 * _local2) + (_local3 * _local3)));
_local6 = (Math.atan2(_local3, _local2) - (Math.PI * 0.5));
_local7 = Math.atan2(_local4, _local5);
rZ = _local6;
rX = _local7;
}
public function set horizon(_arg1:uint){
if (((isNaN(_arg1)) || ((_arg1 == 0)))){
return;
};
_horizon = _arg1;
}
public function get rY():Number{
return (_rY);
}
public function draw(_arg1, _arg2:Boolean=false, _arg3:Boolean=false){
var _local4:Point3D;
var _local5:Array;
var _local6:Array;
var _local7:Array;
var _local8:int;
var _local9:int;
var _local10:Point3D;
var _local11:Array;
var _local12:int;
var _local13:Point3D;
var _local14:Object;
var _local15:Number;
var _local16:Number;
var _local17:Object;
var _local18:Point3D;
var _local19:Number;
var _local20:Number;
var _local21:Number;
var _local22:Number;
var _local23:Number;
var _local24:Number;
var _local25:Boolean;
var _local26:Number;
if (_world == null){
return;
};
_local4 = new Point3D(0, 100, 0);
_local4 = Utils.rotatePoint(_local4, new Point3D(), _rX, _rY, _rZ);
_local4.offset(position);
_local5 = new Array();
_local6 = new Array();
_local7 = _world.getVisibleShapes(this);
_local8 = 0;
while (_local8 < _local7.length) {
_local9 = 0;
while (_local9 < _local7[_local8].faces.length) {
if (!_local7[_local8].visible){
} else {
_local10 = Utils.getNormal(_local7[_local8].faces[_local9]);
_local11 = new Array();
_local12 = 0;
while (_local12 < 3) {
_local11[_local12] = _local7[_local8].getPointAt(_local7[_local8].faces[_local9][_local12]);
_local12++;
};
_local13 = Utils.getAverage(_local11);
_local10.offset(_local13);
if ((((Utils.angleBetween(_local10, position, _local13) < (Math.PI * 0.5))) && (Boolean((((Utils.angleBetween(_local4, _local13, position) <= _maxAngle)) || (Boolean(((_arg3) && (Boolean((Utils.angleBetween(_local4, _local13, position) <= (Math.PI * 0.5)))))))))))){
_local14 = _local7[_local8].faces[_local9];
_local15 = 0;
_local16 = 0;
_local17 = new Object();
_local12 = 0;
while (_local12 < 3) {
_local21 = (_local11[_local12].x - _x);
_local22 = (_local11[_local12].y - _y);
_local23 = (_local11[_local12].z - _z);
_local24 = Math.sqrt((((_local21 * _local21) + (_local22 * _local22)) + (_local23 * _local23)));
_local15 = Math.max(_local15, _local24);
_local16 = (_local16 + _local24);
_local17[_local12] = Utils.unRotatePoint(_local11[_local12], position, -(_rX), -(_rY), -(_rZ));
_local17[_local12].offset(new Point3D(-(x), -(y), -(z)));
_local12++;
};
if (_local15 > _horizon){
} else {
_local6[_local6.length] = _local17;
_local6[(_local6.length - 1)].dist = _local15;
_local18 = Utils.getNormal(_local14);
_local19 = Utils.angleBetween(_local18, _world.light);
_local20 = (Number((1 - Math.cos(_local19))) * 0.5);
_local6[(_local6.length - 1)].color = Utils.setColorIntensity(_local14.color, _local20);
};
};
};
_local9++;
};
_local8++;
};
_local6 = Utils.sortArray(_local6, "dist");
if (_arg2){
_arg1.lock();
_arg1.fillRect(new Rectangle(0, 0, _arg1.width, _arg1.height), 0xFFFFFF);
} else {
_arg1.graphics.clear();
};
_local8 = (_local6.length - 1);
while (_local8 >= 0) {
_local25 = true;
_local9 = 0;
while (_local9 < 3) {
if (!_arg3){
_local26 = (_distance / _local6[_local8][_local9].y);
if (_local6[_local8][_local9].y <= 0){
_local25 = false;
break;
};
_local6[_local8][_local9] = new Point3D(Math.round(((_local6[_local8][_local9].x * _local26) + (_width * 0.5))), Math.round(((_local6[_local8][_local9].z * -(_local26)) + (_height * 0.5))), Math.round((_local6[_local8][_local9].y * _local26)));
} else {
_local6[_local8][_local9].x = (_local6[_local8][_local9].x + (width * 0.5));
_local6[_local8][_local9].y = (-(_local6[_local8][_local9].z) + (height * 0.5));
};
_local9++;
};
if (!_local25){
} else {
if (_arg2){
Utils.drawFace(_arg1, _local6[_local8][0], _local6[_local8][1], _local6[_local8][2], _local6[_local8].color);
} else {
Utils.drawVectorFace(_arg1, _local6[_local8][0], _local6[_local8][1], _local6[_local8][2], _local6[_local8].color);
};
};
_local8--;
};
if (_arg2){
_arg1.unlock();
};
}
public function set rX(_arg1:Number){
if (isNaN(_arg1)){
_arg1 = 0;
};
_arg1 = Math.max(_arg1, (-(Math.PI) * 0.5));
_arg1 = Math.min(_arg1, (Math.PI * 0.5));
_rX = _arg1;
}
public function set rZ(_arg1:Number){
if (isNaN(_arg1)){
_arg1 = 0;
};
_rZ = _arg1;
}
public function set position(_arg1:Point3D){
x = _arg1.x;
y = _arg1.y;
z = _arg1.z;
}
public function get width():Number{
return (_width);
}
public function setWorld(_arg1:World3D){
_world = _arg1;
}
public function set height(_arg1:Number){
if (((isNaN(_arg1)) || ((_arg1 <= 0)))){
return;
};
_height = _arg1;
}
public function set rY(_arg1:Number){
if (isNaN(_arg1)){
_arg1 = 0;
};
_rY = _arg1;
}
public function set distance(_arg1:Number){
if (((isNaN(_arg1)) || ((_arg1 <= 0)))){
return;
};
_distance = _arg1;
}
public function toString():String{
return ("[Camera3D]");
}
public function set x(_arg1:Number){
if (isNaN(_arg1)){
_arg1 = 0;
};
_x = _arg1;
}
public function set y(_arg1:Number){
if (isNaN(_arg1)){
_arg1 = 0;
};
_y = _arg1;
}
public function get distance():Number{
return (_distance);
}
public function get x():Number{
return (_x);
}
public function get y():Number{
return (_y);
}
public function get z():Number{
return (_z);
}
public function get rotation():Point3D{
return (new Point3D(_rX, _rY, _rZ));
}
}
}//package graphics3d
Section 2
//Point3D (graphics3d.Point3D)
package graphics3d {
public class Point3D {
protected var _y:Number;
protected var _x:Number;
protected var _id:int;
protected var _z:Number;
public function Point3D(_arg1:Number=0, _arg2:Number=0, _arg3:Number=0){
if (isNaN(_arg1)){
_arg1 = 0;
};
if (isNaN(_arg3)){
_arg2 = 0;
};
if (isNaN(_arg3)){
_arg3 = 0;
};
_x = _arg1;
_y = _arg2;
_z = _arg3;
_id = -1;
}
public function get y():Number{
return (_y);
}
public function get id():int{
return (_id);
}
public function clone():Point3D{
return (new Point3D(_x, _y, _z));
}
public function set y(_arg1:Number){
if (((isNaN(_arg1)) || ((Math.abs(_arg1) < 1E-11)))){
_arg1 = 0;
};
_y = _arg1;
}
public function offset(_arg1:Point3D){
x = (x + _arg1.x);
y = (y + _arg1.y);
z = (z + _arg1.z);
}
public function set z(_arg1:Number){
if (((isNaN(_arg1)) || ((Math.abs(_arg1) < 1E-11)))){
_arg1 = 0;
};
_z = _arg1;
}
public function normalize(){
var _local1:Number;
_local1 = Math.sqrt((((_x * _x) + (_y * _y)) + (_z * _z)));
x = (x / _local1);
y = (y / _local1);
z = (z / _local1);
}
public function toString():String{
return ((((((("[Point3D x=" + x) + ", y=") + y) + ", z=") + z) + " ]"));
}
public function set x(_arg1:Number){
if (((isNaN(_arg1)) || ((Math.abs(_arg1) < 1E-11)))){
_arg1 = 0;
};
_x = _arg1;
}
public function get x():Number{
return (_x);
}
public function get z():Number{
return (_z);
}
public function set id(_arg1:int){
if (((isNaN(_arg1)) || ((_arg1 < 0)))){
_arg1 = -1;
};
_id = _arg1;
}
}
}//package graphics3d
Section 3
//Shape3D (graphics3d.Shape3D)
package graphics3d {
public class Shape3D {
protected var _x:Number;
protected var _points:Array;
protected var _y:Number;
protected var _world:World3D;
protected var _z:Number;
protected var _faces:Array;
protected var _id:uint;
protected var _visible:Boolean;
protected var _rX:Number;
protected var _rY:Number;
protected var _rZ:Number;
protected var _frames:Array;
protected var _bounds:Object;
protected var _sX:Number;
protected var _sY:Number;
protected var _sZ:Number;
protected static var shapeID:uint = 0;
protected static var faceID:uint = 0;
public function Shape3D(){
_id = shapeID;
shapeID++;
_points = new Array();
_faces = new Array();
_frames = new Array();
_x = (_y = (_z = 0));
_rX = (_rY = (_rZ = 0));
_sX = (_sY = (_sZ = 1));
_visible = true;
_bounds = new Object();
_bounds.minX = 0;
_bounds.minY = 0;
_bounds.minZ = 0;
_bounds.maxX = 0;
_bounds.maxY = 0;
_bounds.maxZ = 0;
_world = null;
}
public function removeFace(_arg1:int){
var _local2:int;
_local2 = 0;
while (_local2 < _faces.length) {
if (_faces[_local2].id == _arg1){
_faces.splice(_local2, 1);
break;
};
_local2++;
};
}
public function get numPoints():uint{
return (_points.length);
}
public function destroy(){
_points = new Array();
_faces = new Array();
_frames = new Array();
_x = (_y = (_z = 0));
_rX = (_rY = (_rZ = 0));
_sX = (_sY = (_sZ = 1));
_visible = true;
_bounds = new Object();
_bounds.minX = 0;
_bounds.minY = 0;
_bounds.minZ = 0;
_bounds.maxX = 0;
_bounds.maxY = 0;
_bounds.maxZ = 0;
_world = null;
}
public function set scale(_arg1:Point3D){
_sX = _arg1.x;
_sY = _arg1.y;
_sZ = _arg1.z;
updateBounds();
}
public function set sZ(_arg1:Number){
if (!isNaN(_arg1)){
_sZ = _arg1;
updateBounds();
};
}
public function pushPoint(_arg1:Point3D){
var _local2:int;
_local2 = 0;
while ((((_local2 < _points.length)) && (!((_arg1.id == -1))))) {
if (_points[_local2].id == _arg1.id){
throw ((("Error in Shape3D.pushPoint(): Point " + _arg1.toString()) + " already exists in this shape"));
};
_local2++;
};
_arg1.id = _points.length;
_points.push(_arg1);
updateBounds();
}
public function pushFace(_arg1:uint, _arg2:uint, _arg3:uint, _arg4:uint=0xFFFFFF, _arg5:int=1){
var _local6:Object;
var _local7:Point3D;
var _local8:Point3D;
if ((((((_arg1 == _arg2)) || ((_arg1 == _arg3)))) || ((_arg2 == _arg3)))){
throw ((((((("Error in Shape3D.pushFace(): The face must contain three different points.[" + _arg1) + ",") + _arg2) + ",") + _arg3) + "]"));
};
if ((((((_arg1 >= _points.length)) || ((_arg2 >= _points.length)))) || ((_arg3 >= _points.length)))){
throw ("Error in Shape3D.pushFace(): Point value out of range.");
};
_local6 = new Object();
_local6.color = (_arg4 | 4278190080);
_local6.shape = this;
_local6[0] = _arg1;
_local6[1] = _arg2;
_local6[2] = _arg3;
_local6.id = faceID;
faceID++;
if (_arg5 < 0){
_arg5 = -1;
} else {
_arg5 = 1;
};
_local6.normal = _arg5;
_local7 = Utils.getNormal(_local6);
_local8 = Utils.getAverage([points[_arg1], points[_arg2], points[_arg3]]);
_local7.offset(_local6.shape.position);
if (Boolean((Utils.angleBetween(_local7, _local8, _local6.shape.position) > (Math.PI * 0.5))) == Boolean((_arg5 == 1))){
_local6.normal = -(_local6.normal);
};
_faces.push(_local6);
}
public function set sX(_arg1:Number){
if (!isNaN(_arg1)){
_sX = _arg1;
updateBounds();
};
}
public function get id():uint{
return (_id);
}
public function setColor(_arg1:uint){
var _local2:int;
_arg1 = (_arg1 | 4278190080);
_local2 = 0;
while (_local2 < _faces.length) {
_faces[_local2].color = _arg1;
_local2++;
};
}
public function interpolate(_arg1:uint, _arg2:Number=0.5, _arg3:Boolean=false){
var _local4:int;
if (_frames[_arg1]){
_local4 = 0;
while (_local4 < _points.length) {
_points[_local4].x = ((_frames[_arg1].points[_local4].x * _arg2) + (_points[_local4].x * Number((1 - _arg2))));
_points[_local4].y = ((_frames[_arg1].points[_local4].y * _arg2) + (_points[_local4].y * Number((1 - _arg2))));
_points[_local4].z = ((_frames[_arg1].points[_local4].z * _arg2) + (_points[_local4].z * Number((1 - _arg2))));
_local4++;
};
if (!_arg3){
x = ((_frames[_arg1].position.x * _arg2) + (position.x * Number((1 - _arg2))));
y = ((_frames[_arg1].position.y * _arg2) + (position.y * Number((1 - _arg2))));
z = ((_frames[_arg1].position.z * _arg2) + (position.z * Number((1 - _arg2))));
rX = ((_frames[_arg1].rotation.x * _arg2) + (rotation.x * Number((1 - _arg2))));
rY = ((_frames[_arg1].rotation.y * _arg2) + (rotation.y * Number((1 - _arg2))));
rZ = ((_frames[_arg1].rotation.z * _arg2) + (rotation.z * Number((1 - _arg2))));
sX = ((_frames[_arg1].scale.x * _arg2) + (scale.x * Number((1 - _arg2))));
sY = ((_frames[_arg1].scale.y * _arg2) + (scale.y * Number((1 - _arg2))));
sZ = ((_frames[_arg1].scale.z * _arg2) + (scale.z * Number((1 - _arg2))));
};
updateBounds();
};
}
public function set sY(_arg1:Number){
if (!isNaN(_arg1)){
_sY = _arg1;
updateBounds();
};
}
public function get rX():Number{
return (_rX);
}
public function get rY():Number{
return (_rY);
}
public function get position():Point3D{
return (new Point3D(_x, _y, _z));
}
public function get visible():Boolean{
return (_visible);
}
public function load(_arg1:String){
var _local2:Array;
var _local3:int;
var _local4:Array;
var _local5:Point3D;
var _local6:Object;
var _local7:Point3D;
destroy();
_local2 = _arg1.replace("\r", "").split("\n");
_local3 = 0;
while (_local3 < _local2.length) {
_local4 = _local2[_local3].split(",");
switch (_local4[0]){
case "POS":
x = Number(_local4[1]);
y = Number(_local4[2]);
z = Number(_local4[3]);
break;
case "ROT":
rX = Number(_local4[1]);
rY = Number(_local4[2]);
rZ = Number(_local4[3]);
break;
case "SCA":
sX = Number(_local4[1]);
sY = Number(_local4[2]);
sZ = Number(_local4[3]);
break;
case "P":
_local5 = new Point3D();
_local5.id = Number(_local4[1]);
_local5.x = Number(_local4[2]);
_local5.y = Number(_local4[3]);
_local5.z = Number(_local4[4]);
_points[_local5.id] = _local5;
break;
case "F":
pushFace(Number(_local4[1]), Number(_local4[2]), Number(_local4[3]), uint(_local4[4]), int(_local4[5]));
_faces[(_faces.length - 1)].normal = int(_local4[5]);
break;
case "FP":
if (!_frames[Number(_local4[1])]){
_frames[Number(_local4[1])] = new Object();
_frames[Number(_local4[1])].points = new Array();
};
_local6 = _frames[Number(_local4[1])];
_local7 = new Point3D();
_local6.points[Number(_local4[2])] = _local7;
_local7.id = Number(_local4[2]);
_local7.x = Number(_local4[3]);
_local7.y = Number(_local4[4]);
_local7.z = Number(_local4[5]);
break;
case "FPOS":
_local6 = _frames[Number(_local4[1])];
_local6.position = new Point3D();
_local6.position.x = Number(_local4[2]);
_local6.position.y = Number(_local4[3]);
_local6.position.z = Number(_local4[4]);
break;
case "FROT":
_local6 = _frames[Number(_local4[1])];
_local6.rotation = new Point3D();
_local6.rotation.x = Number(_local4[2]);
_local6.rotation.y = Number(_local4[3]);
_local6.rotation.z = Number(_local4[4]);
break;
case "FSCA":
_local6 = _frames[Number(_local4[1])];
_local6.scale = new Point3D();
_local6.scale.x = Number(_local4[2]);
_local6.scale.y = Number(_local4[3]);
_local6.scale.z = Number(_local4[4]);
break;
};
_local3++;
};
}
public function get height():Number{
return ((_bounds.maxZ - _bounds.minZ));
}
public function get rZ():Number{
return (_rZ);
}
public function getBounds():Object{
var _local1:Object;
var _local2:String;
_local1 = new Object();
for (_local2 in _bounds) {
_local1[_local2] = _bounds[_local2];
};
return (_local1);
}
public function getPointAt(_arg1:uint){
var _local2:Point3D;
if (_arg1 >= _points.length){
throw ("Error in Shape3D.getPointAt(): Point value out of range.");
};
_local2 = _points[_arg1].clone();
_local2.x = (_local2.x * _sX);
_local2.y = (_local2.y * _sY);
_local2.z = (_local2.z * _sZ);
_local2 = Utils.rotatePoint(_local2, new Point3D(), _rX, _rY, _rZ);
_local2.offset(position);
return (_local2);
}
public function get frames():Array{
return (_frames.concat());
}
public function get faces():Array{
return (_faces.concat());
}
public function insertFrame(_arg1:uint){
var _local2:Array;
var _local3:int;
_local2 = new Array();
_frames[_arg1] = new Object();
_local3 = 0;
while (_local3 < points.length) {
_local2[_local3] = points[_local3].clone();
_local3++;
};
_frames[_arg1].points = _local2;
_frames[_arg1].position = position;
_frames[_arg1].rotation = rotation;
_frames[_arg1].scale = scale;
}
public function removeFacesContaining(_arg1:int){
var _local2:int;
_local2 = 0;
while (_local2 < _faces.length) {
if ((((((_faces[_local2][0] == _arg1)) || ((_faces[_local2][1] == _arg1)))) || ((_faces[_local2][2] == _arg1)))){
delete _faces[_local2];
_faces.splice(_local2, 1);
_local2--;
};
_local2++;
};
}
public function get depth():Number{
return ((_bounds.maxY - _bounds.minY));
}
public function removeFrame(_arg1:uint){
if (_frames[_arg1]){
delete _frames[_arg1];
_frames[_arg1] = null;
};
}
public function get sY():Number{
return (_sY);
}
public function set rY(_arg1:Number){
if (!isNaN(_arg1)){
_rY = _arg1;
updateBounds();
};
}
public function destroyFrames(){
_frames = new Array();
}
public function set rZ(_arg1:Number){
if (!isNaN(_arg1)){
_rZ = _arg1;
updateBounds();
};
}
public function get scale():Point3D{
return (new Point3D(_sX, _sY, _sZ));
}
public function set position(_arg1:Point3D){
x = _arg1.x;
y = _arg1.y;
z = _arg1.z;
updateBounds();
}
public function set rX(_arg1:Number){
if (!isNaN(_arg1)){
_rX = _arg1;
updateBounds();
};
}
public function get width():Number{
return ((_bounds.maxX - _bounds.minX));
}
public function get sZ():Number{
return (_sZ);
}
public function get numFaces():uint{
return (_faces.length);
}
function attachToWorld(_arg1:World3D){
_world = _arg1;
}
public function get sX():Number{
return (_sX);
}
protected function updateBounds(){
var _local1:int;
var _local2:Point3D;
_bounds.minX = 0;
_bounds.minY = 0;
_bounds.minZ = 0;
_bounds.maxX = 0;
_bounds.maxY = 0;
_bounds.maxZ = 0;
_local1 = 0;
while (_local1 < numPoints) {
_local2 = getPointAt(_local1);
_bounds.minX = Math.min(_local2.x, _bounds.minX);
_bounds.minY = Math.min(_local2.y, _bounds.minY);
_bounds.minZ = Math.min(_local2.z, _bounds.minZ);
_bounds.maxX = Math.min(_local2.x, _bounds.maxX);
_bounds.maxY = Math.min(_local2.y, _bounds.maxY);
_bounds.maxZ = Math.min(_local2.z, _bounds.maxZ);
_local1++;
};
if (_world != null){
_world.updateShape(id);
};
}
public function gotoFrame(_arg1:uint, _arg2:Boolean=false){
var _local3:int;
if (_frames[_arg1]){
_local3 = 0;
while (_local3 < _points.length) {
_points[_local3].x = _frames[_arg1].points[_local3].x;
_points[_local3].y = _frames[_arg1].points[_local3].y;
_points[_local3].z = _frames[_arg1].points[_local3].z;
_local3++;
};
if (!_arg2){
position = _frames[_arg1].position;
rotation = _frames[_arg1].rotation;
scale = _frames[_arg1].scale;
};
updateBounds();
};
}
public function get points():Array{
return (_points.concat());
}
public function set visible(_arg1:Boolean){
_visible = _arg1;
}
public function toString():String{
return ((((((("[Shape3D ID=" + id) + " Points=") + numPoints) + ", Faces=") + numFaces) + " ]"));
}
public function set x(_arg1:Number){
if (!isNaN(_arg1)){
_x = _arg1;
updateBounds();
};
}
public function set y(_arg1:Number){
if (!isNaN(_arg1)){
_y = _arg1;
updateBounds();
};
}
public function removePoint(_arg1:uint){
var _local2:int;
var _local3:int;
if (!_points[_arg1]){
return;
};
removeFacesContaining(_arg1);
_local2 = _arg1;
while (_local2 < _points.length) {
_points[_local2].id--;
_local3 = 0;
while (_local3 < _faces.length) {
if (_faces[_local3][0] == _local2){
_faces[_local3][0] = (_local2 - 1);
};
if (_faces[_local3][1] == _local2){
_faces[_local3][1] = (_local2 - 1);
};
if (_faces[_local3][2] == _local2){
_faces[_local3][2] = (_local2 - 1);
};
_local3++;
};
_local2++;
};
_points.splice(_arg1, 1);
destroyFrames();
updateBounds();
}
public function getFaceAt(_arg1:uint){
if (_arg1 >= _faces.length){
throw ("Error in Shape3D.getFaceAt(): Face value out of range.");
};
return (_faces[_arg1]);
}
public function get x():Number{
return (_x);
}
public function get y():Number{
return (_y);
}
public function get z():Number{
return (_z);
}
public function set z(_arg1:Number){
if (!isNaN(_arg1)){
_z = _arg1;
updateBounds();
};
}
public function set rotation(_arg1:Point3D){
rX = _arg1.x;
rY = _arg1.y;
rZ = _arg1.z;
updateBounds();
}
public function save():String{
var _local1:String;
var _local2:int;
var _local3:Object;
var _local4:int;
var _local5:Point3D;
_local1 = "";
_local1 = (_local1 + (((((("POS," + x) + ",") + y) + ",") + z) + "\n"));
_local1 = (_local1 + (((((("ROT," + rX) + ",") + rY) + ",") + rZ) + "\n"));
_local1 = (_local1 + (((((("SCA," + sX) + ",") + sY) + ",") + sZ) + "\n"));
_local2 = 0;
while (_local2 < _points.length) {
_local1 = (_local1 + (((((((("P," + _points[_local2].id) + ",") + _points[_local2].x) + ",") + _points[_local2].y) + ",") + _points[_local2].z) + "\n"));
_local2++;
};
_local2 = 0;
while (_local2 < _faces.length) {
_local3 = _faces[_local2];
_local1 = (_local1 + (((((((((("F," + _local3[0]) + ",") + _local3[1]) + ",") + _local3[2]) + ",") + String(uint(_local3.color))) + ",") + _local3.normal) + "\n"));
_local2++;
};
_local2 = 0;
while (_local2 < _frames.length) {
if (!_frames[_local2]){
} else {
_local4 = 0;
while (_local4 < _frames[_local2].points.length) {
_local5 = _frames[_local2].points[_local4];
_local1 = (_local1 + (((((((((("FP," + _local2) + ",") + _local4) + ",") + _local5.x) + ",") + _local5.y) + ",") + _local5.z) + "\n"));
_local4++;
};
_local1 = (_local1 + (((((((("FPOS," + _local2) + ",") + _frames[_local2].position.x) + ",") + _frames[_local2].position.y) + ",") + _frames[_local2].position.z) + "\n"));
_local1 = (_local1 + (((((((("FROT," + _local2) + ",") + _frames[_local2].rotation.x) + ",") + _frames[_local2].rotation.y) + ",") + _frames[_local2].rotation.z) + "\n"));
_local1 = (_local1 + (((((((("FSCA," + _local2) + ",") + _frames[_local2].scale.x) + ",") + _frames[_local2].scale.y) + ",") + _frames[_local2].scale.z) + "\n"));
};
_local2++;
};
return (_local1);
}
public function get rotation():Point3D{
return (new Point3D(_rX, _rY, _rZ));
}
}
}//package graphics3d
Section 4
//Utils (graphics3d.Utils)
package graphics3d {
import flash.display.*;
public class Utils {
public static function drawFace(_arg1:BitmapData, _arg2:Object, _arg3:Object, _arg4:Object, _arg5:uint){
var _local6:BitmapData;
var _local7:uint;
var _local8:uint;
var _local9:int;
var _local10:int;
var _local11:int;
var _local12:int;
var _local13:int;
var _local14:int;
var _local15:uint;
_arg1.lock();
_local6 = new BitmapData(_arg1.width, _arg1.height, true, 0xFFFFFF);
drawLine(_local6, _arg5, _arg2.x, _arg2.y, _arg3.x, _arg3.y);
drawLine(_local6, _arg5, _arg2.x, _arg2.y, _arg4.x, _arg4.y);
drawLine(_local6, _arg5, _arg3.x, _arg3.y, _arg4.x, _arg4.y);
_local7 = (((_arg2.x + _arg3.x) + _arg4.x) / 3);
_local8 = (((_arg2.y + _arg3.y) + _arg4.y) / 3);
_local9 = Math.min(_arg2.x, _arg3.x, _arg4.x);
_local10 = Math.min(_arg2.y, _arg3.y, _arg4.y);
_local11 = Math.max(_arg2.x, _arg3.x, _arg4.x);
_local12 = Math.max(_arg2.y, _arg3.y, _arg4.y);
_local6.floodFill(_local7, _local8, _arg5);
_local13 = Math.max(_local9, 0);
while (_local13 <= Math.min(_local11, _arg1.width)) {
_local14 = Math.max(_local10, 0);
while (_local14 < Math.min(_local12, _arg1.height)) {
_local15 = _local6.getPixel32(_local13, _local14);
if ((_local15 & 4278190080)){
_arg1.setPixel32(_local13, _local14, _local15);
};
_local14++;
};
_local13++;
};
_arg1.unlock();
}
public static function unRotatePoint(_arg1:Point3D, _arg2:Point3D, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0):Point3D{
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Point3D;
var _local10:Point3D;
var _local11:Point3D;
_local6 = (_arg1.x - _arg2.x);
_local7 = (_arg1.y - _arg2.y);
_local9 = _arg1.clone();
_local9.x = ((_arg2.x + (_local6 * Math.cos(_arg5))) + (_local7 * -(Math.sin(_arg5))));
_local9.y = ((_arg2.y + (_local6 * Math.sin(_arg5))) + (_local7 * Math.cos(_arg5)));
_local7 = (_local9.y - _arg2.y);
_local8 = (_local9.z - _arg2.z);
_local10 = _local9.clone();
_local10.y = ((_arg2.y + (_local7 * Math.cos(_arg3))) + (_local8 * -(Math.sin(_arg3))));
_local10.z = ((_arg2.z + (_local7 * Math.sin(_arg3))) + (_local8 * Math.cos(_arg3)));
_local6 = (_local10.x - _arg2.x);
_local8 = (_local10.z - _arg2.z);
_local11 = _local10.clone();
_local11.x = ((_arg2.x + (_local6 * Math.cos(_arg4))) + (_local8 * -(Math.sin(_arg4))));
_local11.z = ((_arg2.z + (_local6 * Math.sin(_arg4))) + (_local8 * Math.cos(_arg4)));
return (_local11);
}
public static function drawVectorFace(_arg1, _arg2:Object, _arg3:Object, _arg4:Object, _arg5:uint){
_arg1.graphics.beginFill((_arg5 & 0xFFFFFF));
_arg1.graphics.moveTo(_arg2.x, _arg2.y);
_arg1.graphics.lineTo(_arg3.x, _arg3.y);
_arg1.graphics.lineTo(_arg4.x, _arg4.y);
_arg1.graphics.endFill();
}
public static function getAverage(_arg1:Array):Point3D{
var _local2:Point3D;
var _local3:int;
_local2 = new Point3D();
_local3 = 0;
while (_local3 < _arg1.length) {
_local2.x = (_local2.x + _arg1[_local3].x);
_local2.y = (_local2.y + _arg1[_local3].y);
_local2.z = (_local2.z + _arg1[_local3].z);
_local3++;
};
_local2.x = (_local2.x / _arg1.length);
_local2.y = (_local2.y / _arg1.length);
_local2.z = (_local2.z / _arg1.length);
return (_local2);
}
public static function makeSphere(_arg1:uint=100, _arg2:uint=4, _arg3:uint=8):Shape3D{
var _local4:Shape3D;
var _local5:Point3D;
var _local6:Point3D;
var _local7:Number;
var _local8:Number;
var _local9:int;
var _local10:int;
var _local11:uint;
if (_arg2 < 2){
_arg2 = 2;
};
if (_arg3 < 3){
_arg3 = 3;
};
_local4 = new Shape3D();
_local5 = new Point3D(0, _arg1, 0);
_local4.pushPoint(new Point3D(0, 0, _arg1));
_local4.pushPoint(new Point3D(0, 0, -(_arg1)));
_local9 = 1;
while (_local9 < _arg2) {
_local7 = (((Math.PI * _local9) / _arg2) - (Math.PI * 0.5));
_local10 = 0;
while (_local10 < _arg3) {
_local8 = (((Math.PI * 2) * _local10) / _arg3);
_local6 = Utils.rotatePoint(_local5, new Point3D(), _local7, 0, _local8);
_local4.pushPoint(_local6);
_local10++;
};
_local9++;
};
_local9 = 0;
while (_local9 < _arg3) {
_local11 = (_local9 + 1);
if (_local11 == _arg3){
_local11 = 0;
};
_local4.pushFace((_local9 + 2), (_local11 + 2), 1);
_local4.pushFace(((2 + ((_arg2 - 2) * _arg3)) + _local9), ((2 + ((_arg2 - 2) * _arg3)) + _local11), 0);
_local9++;
};
_local9 = 1;
while (_local9 < (_arg2 - 1)) {
_local10 = 0;
while (_local10 < _arg3) {
_local11 = (_local10 + 1);
if (_local11 == _arg3){
_local11 = 0;
};
_local4.pushFace(((2 + (uint((_local9 - 1)) * _arg3)) + _local10), ((2 + (uint((_local9 - 1)) * _arg3)) + _local11), ((2 + (_local9 * _arg3)) + _local10));
_local4.pushFace(((2 + (uint((_local9 - 1)) * _arg3)) + _local11), ((2 + (_local9 * _arg3)) + _local10), ((2 + (_local9 * _arg3)) + _local11));
_local10++;
};
_local9++;
};
return (_local4);
}
public static function makeCube(_arg1:uint=100):Shape3D{
var _local2:Shape3D;
var _local3:Point3D;
_local2 = new Shape3D();
_local3 = new Point3D(_arg1, _arg1, _arg1);
_local2.pushPoint(_local3);
_local3 = new Point3D(-(_arg1), _arg1, _arg1);
_local2.pushPoint(_local3);
_local3 = new Point3D(-(_arg1), -(_arg1), _arg1);
_local2.pushPoint(_local3);
_local3 = new Point3D(_arg1, -(_arg1), _arg1);
_local2.pushPoint(_local3);
_local3 = new Point3D(_arg1, _arg1, -(_arg1));
_local2.pushPoint(_local3);
_local3 = new Point3D(-(_arg1), _arg1, -(_arg1));
_local2.pushPoint(_local3);
_local3 = new Point3D(-(_arg1), -(_arg1), -(_arg1));
_local2.pushPoint(_local3);
_local3 = new Point3D(_arg1, -(_arg1), -(_arg1));
_local2.pushPoint(_local3);
_local2.pushFace(0, 1, 2);
_local2.pushFace(0, 3, 2);
_local2.pushFace(4, 5, 6);
_local2.pushFace(4, 7, 6);
_local2.pushFace(0, 1, 5);
_local2.pushFace(0, 4, 5);
_local2.pushFace(1, 2, 6);
_local2.pushFace(1, 5, 6);
_local2.pushFace(2, 3, 7);
_local2.pushFace(2, 6, 7);
_local2.pushFace(3, 0, 4);
_local2.pushFace(3, 7, 4);
return (_local2);
}
private static function drawPoint(_arg1:BitmapData, _arg2:uint, _arg3:Number, _arg4:Number){
_arg1.setPixel32(_arg3, _arg4, _arg2);
}
public static function makeTetrahedron(_arg1:uint=100):Shape3D{
var _local2:Shape3D;
var _local3:Point3D;
_local2 = new Shape3D();
_local3 = new Point3D(0, 0, _arg1);
_local2.pushPoint(_local3);
_local3 = rotatePoint(_local3, new Point3D(), 0, ((Math.PI * 2) / 3), 0);
_local2.pushPoint(_local3);
_local3 = rotatePoint(_local3, new Point3D(), 0, 0, ((Math.PI * 2) / 3));
_local2.pushPoint(_local3);
_local3 = rotatePoint(_local3, new Point3D(), 0, 0, ((Math.PI * 2) / 3));
_local2.pushPoint(_local3);
_local2.pushFace(0, 1, 2, 0xFFFFFF);
_local2.pushFace(0, 1, 3, 0xFFFFFF);
_local2.pushFace(0, 3, 2, 0xFFFFFF);
_local2.pushFace(3, 1, 2, 0xFFFFFF);
return (_local2);
}
public static function setColorIntensity(_arg1:uint, _arg2:Number):uint{
var _local3:Number;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:uint;
_arg2 = (Number((_arg2 + 2)) / 3);
_local3 = (uint((_arg1 & 4278190080)) >>> 24);
_local4 = (uint((_arg1 & 0xFF0000)) >>> 16);
_local5 = (uint((_arg1 & 0xFF00)) >>> 8);
_local6 = uint((_arg1 & 0xFF));
_local4 = (_local4 * _arg2);
_local5 = (_local5 * _arg2);
_local6 = (_local6 * _arg2);
_local7 = (((uint((_local3 << 24)) + uint((Math.floor(_local4) << 16))) + uint((Math.floor(_local5) << 8))) + Math.floor(_local6));
return (_local7);
}
public static function makePrism(_arg1:uint=3, _arg2:uint=100, _arg3:uint=50):Shape3D{
var _local4:Shape3D;
var _local5:Point3D;
var _local6:int;
var _local7:uint;
var _local8:uint;
if (_arg1 < 3){
_arg1 = 3;
};
_local4 = new Shape3D();
_local5 = new Point3D(0, 0, (-(_arg2) * 0.5));
_local4.pushPoint(_local5);
_local5 = new Point3D(0, 0, (_arg2 * 0.5));
_local4.pushPoint(_local5);
_local6 = 0;
while (_local6 < _arg1) {
_local5 = new Point3D(0, _arg3, (-(_arg2) * 0.5));
_local5 = Utils.rotatePoint(_local5, new Point3D(), 0, 0, (((Math.PI * 2) * _local6) / _arg1));
_local4.pushPoint(_local5);
_local5 = _local5.clone();
_local5.z = (_arg2 * 0.5);
_local4.pushPoint(_local5);
_local6++;
};
_local6 = 2;
while (_local6 < _local4.numPoints) {
_local7 = (_local6 + 2);
_local8 = (_local6 + 3);
if (_local7 >= _local4.numPoints){
_local7 = (2 + uint((_local6 % 2)));
_local8 = (_local7 + 1);
} else {
if (_local8 >= _local4.numPoints){
_local8 = (3 + uint((_local6 % 2)));
};
};
_local4.pushFace(uint((_local6 % 2)), _local6, _local7);
if (!uint((_local6 % 2))){
_local4.pushFace(_local6, (_local6 + 1), _local7);
_local4.pushFace((_local6 + 1), _local7, _local8);
};
_local6++;
};
return (_local4);
}
public static function angleBetween(_arg1:Point3D, _arg2:Point3D, _arg3:Point3D=null):Number{
var _local4:Point3D;
var _local5:Point3D;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
if (_arg3 == null){
_arg3 = new Point3D(0, 0, 0);
};
_local4 = new Point3D((_arg1.x - _arg3.x), (_arg1.y - _arg3.y), (_arg1.z - _arg3.z));
_local5 = new Point3D((_arg2.x - _arg3.x), (_arg2.y - _arg3.y), (_arg2.z - _arg3.z));
_local6 = Math.sqrt((((_local4.x * _local4.x) + (_local4.y * _local4.y)) + (_local4.z * _local4.z)));
_local7 = Math.sqrt((((_local5.x * _local5.x) + (_local5.y * _local5.y)) + (_local5.z * _local5.z)));
_local8 = (((_local4.x * _local5.x) + (_local4.y * _local5.y)) + (_local4.z * _local5.z));
_local9 = (_local8 / Number((_local6 * _local7)));
_local9 = (Boolean((_local9 < -1))) ? -1 : _local9;
_local9 = (Boolean((_local9 > 1))) ? 1 : _local9;
return (Math.acos(_local9));
}
public static function getLineFromPoints(_arg1:Point3D, _arg2:Point3D):Object{
var _local3:Object;
_local3 = new Object();
_local3.C = 2;
if (Math.abs((_arg2.x - _arg1.x)) > 1){
_local3.B = 1;
_local3.A = (Number(((_local3.B * Number((_arg1.y - _arg2.y))) + (_local3.C * Number((_arg1.z - _arg2.z))))) / Number((_arg2.x - _arg1.x)));
} else {
if (Math.abs((_arg2.y - _arg1.y)) > 1){
_local3.A = 1;
_local3.B = (Number(((_local3.A * Number((_arg1.x - _arg2.x))) + (_local3.C * Number((_arg1.z - _arg2.z))))) / Number((_arg2.y - _arg1.y)));
} else {
_local3.A = 1;
_local3.B = 2;
_local3.C = (Number(((_local3.A * Number((_arg1.x - _arg2.x))) + (_local3.B * Number((_arg1.y - _arg2.y))))) / Number((_arg2.z - _arg1.z)));
};
};
_local3.D = -(Number((((_local3.A * _arg1.x) + (_local3.B * _arg1.y)) + (_local3.C * _arg1.y))));
return (_local3);
}
public static function drawLine(_arg1:BitmapData, _arg2:uint, _arg3:Number, _arg4:Number, _arg5:Number, _arg6:Number){
var _local7:Number;
var _local8:int;
var _local9:Number;
var _local10:Number;
_local7 = Math.sqrt((((_arg5 - _arg3) * (_arg5 - _arg3)) + ((_arg6 - _arg4) * (_arg6 - _arg4))));
_local8 = 0;
while (_local8 <= _local7) {
_local9 = (_arg3 + ((_arg5 - _arg3) * (_local8 / _local7)));
_local10 = (_arg4 + ((_arg6 - _arg4) * (_local8 / _local7)));
drawPoint(_arg1, _arg2, _local9, _local10);
_local8++;
};
}
public static function sortArray(_arg1:Array, _arg2:String=null){
var _local3:Array;
var _local4:int;
var _local5:int;
var _local6:*;
_local3 = _arg1.concat();
if (_local3.length < 2){
return (_local3);
};
if (_arg2 == null){
_local4 = 1;
while (_local4 < _local3.length) {
_local5 = (_local4 - 1);
while ((((_local5 > 0)) && ((_local3[(_local5 + 1)] < _local3[_local5])))) {
_local6 = _local3[(_local5 + 1)];
_local3[(_local5 + 1)] = _local3[_local5];
_local3[_local5] = _local6;
_local5--;
};
_local4++;
};
} else {
_local4 = 1;
while (_local4 < _local3.length) {
_local5 = (_local4 - 1);
while ((((_local5 >= 0)) && ((_local3[(_local5 + 1)][_arg2] < _local3[_local5][_arg2])))) {
_local6 = _local3[(_local5 + 1)];
_local3[(_local5 + 1)] = _local3[_local5];
_local3[_local5] = _local6;
_local5--;
};
_local4++;
};
};
return (_local3);
}
public static function rotatePoint(_arg1:Point3D, _arg2:Point3D, _arg3:Number=0, _arg4:Number=0, _arg5:Number=0):Point3D{
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Point3D;
var _local10:Point3D;
var _local11:Point3D;
_local6 = (_arg1.x - _arg2.x);
_local8 = (_arg1.z - _arg2.z);
_local9 = _arg1.clone();
_local9.x = ((_arg2.x + (_local6 * Math.cos(_arg4))) + (_local8 * -(Math.sin(_arg4))));
_local9.z = ((_arg2.z + (_local6 * Math.sin(_arg4))) + (_local8 * Math.cos(_arg4)));
_local7 = (_local9.y - _arg2.y);
_local8 = (_local9.z - _arg2.z);
_local10 = _local9.clone();
_local10.y = ((_arg2.y + (_local7 * Math.cos(_arg3))) + (_local8 * -(Math.sin(_arg3))));
_local10.z = ((_arg2.z + (_local7 * Math.sin(_arg3))) + (_local8 * Math.cos(_arg3)));
_local6 = (_local10.x - _arg2.x);
_local7 = (_local10.y - _arg2.y);
_local11 = _local10.clone();
_local11.x = ((_arg2.x + (_local6 * Math.cos(_arg5))) + (_local7 * -(Math.sin(_arg5))));
_local11.y = ((_arg2.y + (_local6 * Math.sin(_arg5))) + (_local7 * Math.cos(_arg5)));
return (_local11);
}
public static function getNormal(_arg1:Object):Point3D{
var _local2:Array;
var _local3:int;
var _local4:Number;
var _local5:Number;
var _local6:Number;
var _local7:Number;
var _local8:Number;
var _local9:Number;
var _local10:*;
var _local11:*;
var _local12:*;
var _local13:Point3D;
_local2 = new Array();
_local3 = 0;
while (_local3 < 3) {
_local2[_local3] = _arg1.shape.getPointAt(_arg1[_local3]);
_local3++;
};
_local4 = (((_local2[0].y * _local2[1].z) + (_local2[1].y * _local2[2].z)) + (_local2[2].y * _local2[0].z));
_local5 = (((_local2[0].z * _local2[1].y) + (_local2[1].z * _local2[2].y)) + (_local2[2].z * _local2[0].y));
_local6 = (((_local2[0].x * _local2[2].z) + (_local2[1].x * _local2[0].z)) + (_local2[2].x * _local2[1].z));
_local7 = (((_local2[0].z * _local2[2].x) + (_local2[1].z * _local2[0].x)) + (_local2[2].z * _local2[1].x));
_local8 = (((_local2[0].x * _local2[1].y) + (_local2[1].x * _local2[2].y)) + (_local2[2].x * _local2[0].y));
_local9 = (((_local2[0].y * _local2[1].x) + (_local2[1].y * _local2[2].x)) + (_local2[2].y * _local2[0].x));
_local10 = (_local4 - _local5);
_local11 = (_local6 - _local7);
_local12 = (_local8 - _local9);
_local10 = (isNaN(_local10)) ? 0 : _local10;
_local11 = (isNaN(_local11)) ? 0 : _local11;
_local12 = (isNaN(_local12)) ? 0 : _local12;
if (((((!(_local10)) && (!(_local11)))) && (!(_local12)))){
_local11 = 1;
};
_local13 = new Point3D((_local10 * _arg1.normal), (_local11 * _arg1.normal), (_local12 * _arg1.normal));
_local13.normalize();
return (_local13);
}
}
}//package graphics3d
Section 5
//World3D (graphics3d.World3D)
package graphics3d {
public class World3D {
protected var _grid:Array;
protected var _tiles:Array;
protected var _shapes:Array;
public var TILESIZE:uint;
protected var _light:Point3D;
public function World3D(){
_tiles = new Array();
_shapes = new Array();
_grid = new Array();
_light = new Point3D();
_light.z = -1;
TILESIZE = 2000;
}
public function addShape(_arg1:Shape3D){
var _local2:int;
_local2 = 0;
while (_local2 < _shapes.length) {
if (_arg1.id == _shapes[_local2].id){
return;
};
_local2++;
};
_arg1.attachToWorld(this);
_tiles[_arg1.id] = new Array();
_tiles[_arg1.id].shape = _arg1;
_shapes.push(_arg1);
updateShape(_arg1.id);
}
public function get light():Point3D{
return (_light.clone());
}
public function get shapes(){
return (_shapes.concat());
}
public function getVisibleShapes(_arg1:Camera3D):Array{
var _local2:Array;
var _local3:int;
var _local4:int;
var _local5:int;
var _local6:int;
var _local7:int;
var _local8:int;
var _local9:int;
var _local10:String;
var _local11:Boolean;
var _local12:int;
_local2 = new Array();
_local3 = Math.floor(((_arg1.horizon * 2) / TILESIZE));
_local4 = Math.floor((Number((_arg1.x - _arg1.horizon)) / TILESIZE));
_local5 = Math.floor((Number((_arg1.y - _arg1.horizon)) / TILESIZE));
_local6 = Math.floor((Number((_arg1.z - _arg1.horizon)) / TILESIZE));
_local7 = _local4;
while (_local7 < (_local4 + _local3)) {
if (!_grid[_local7]){
} else {
_local8 = _local5;
while (_local8 < (_local5 + _local3)) {
if (!_grid[_local7][_local8]){
} else {
_local9 = _local6;
while (_local9 < (_local6 + _local3)) {
if (!_grid[_local7][_local8][_local9]){
} else {
for (_local10 in _grid[_local7][_local8][_local9]) {
_local11 = true;
_local12 = 0;
while (_local12 < _local2.length) {
if (_grid[_local7][_local8][_local9][_local10].id == _local2[_local12].id){
_local11 = false;
break;
};
_local12++;
};
if (_local11){
_local2.push(_grid[_local7][_local8][_local9][_local10]);
};
};
};
_local9++;
};
};
_local8++;
};
};
_local7++;
};
return (_local2);
}
public function updateShape(_arg1:uint){
var _local2:Shape3D;
var _local3:*;
var _local4:Object;
var _local5:String;
var _local6:int;
var _local7:int;
var _local8:int;
_local2 = _tiles[_arg1].shape;
_local3 = 0;
while (_local3 < _tiles[_arg1].length) {
delete _tiles[_arg1][_local3][_arg1];
_local3++;
};
delete _tiles[_arg1];
_tiles[_arg1] = new Array();
_tiles[_arg1].shape = _local2;
_local4 = _local2.getBounds();
for (_local5 in _local4) {
_local4[_local5] = Math.floor((_local4[_local5] / TILESIZE));
};
_local6 = _local4.minX;
while (_local6 <= _local4.maxX) {
if (!_grid[_local6]){
_grid[_local6] = new Array();
};
_local7 = _local4.minY;
while (_local7 <= _local4.maxY) {
if (!_grid[_local6][_local7]){
_grid[_local6][_local7] = new Array();
};
_local8 = _local4.minZ;
while (_local8 <= _local4.maxZ) {
if (!_grid[_local6][_local7][_local8]){
_grid[_local6][_local7][_local8] = new Object();
};
_grid[_local6][_local7][_local8][_arg1] = _tiles[_arg1].shape;
_tiles[_arg1].push(_grid[_local6][_local7][_local8]);
_local8++;
};
_local7++;
};
_local6++;
};
}
public function set light(_arg1:Point3D){
_light = _arg1.clone();
_light.normalize();
}
public function removeShape(_arg1:uint){
var _local2:int;
var _local3:int;
_local2 = 0;
while (_local2 < _tiles[_arg1].length) {
delete _tiles[_arg1][_local2][_arg1];
_local2++;
};
delete _tiles[_arg1];
_local3 = 0;
while (_local3 < _shapes.length) {
if (((_shapes[_local3]) && ((_shapes[_local3].id == _arg1)))){
_shapes.splice(_local3, 1);
break;
};
_local3++;
};
}
}
}//package graphics3d
Section 6
//_btn1_3 (sInf_fla._btn1_3)
package sInf_fla {
import flash.display.*;
import flash.text.*;
public dynamic class _btn1_3 extends MovieClip {
public var _txt:TextField;
}
}//package sInf_fla
Section 7
//_btn2_4 (sInf_fla._btn2_4)
package sInf_fla {
import flash.display.*;
public dynamic class _btn2_4 extends MovieClip {
public function _btn2_4(){
addFrameScript(0, frame1);
}
function frame1(){
stop();
}
}
}//package sInf_fla
Section 8
//_btn3_5 (sInf_fla._btn3_5)
package sInf_fla {
import flash.display.*;
import flash.text.*;
public dynamic class _btn3_5 extends MovieClip {
public var _txt:TextField;
}
}//package sInf_fla
Section 9
//MainTimeline (sInf_fla.MainTimeline)
package sInf_fla {
import graphics3d.*;
import flash.display.*;
import flash.text.*;
import flash.geom.*;
import adobe.utils.*;
import flash.accessibility.*;
import flash.errors.*;
import flash.events.*;
import flash.external.*;
import flash.filters.*;
import flash.media.*;
import flash.net.*;
import flash.printing.*;
import flash.system.*;
import flash.ui.*;
import flash.utils.*;
import flash.xml.*;
public dynamic class MainTimeline extends MovieClip {
public var size:Number;
public var hRotation:Number;
public var camDist:int;
public var arm1State:int;
public var belly_str:String;
public var tail:Shape3D;
public var arm1_str:String;
public var headState:int;
public var camSpin:Point3D;
public var arm1Pos:Number;
public var growthSpeed:Number;
public var arm2State:int;
public var camCenter:Point3D;
public var _panel:MovieClip;
public var arm2Pos:Number;
public var camera:Camera3D;
public var breast_str:String;
public var reset:Boolean;
public var clip:MovieClip;
public var armSpeed:Number;
public var arm1:Shape3D;
public var leg2_str:String;
public var arm2:Shape3D;
public var head_str:String;
public var wing2_str:String;
public var bSize:Number;
public var wing2:Shape3D;
public var mX:Number;
public var world:World3D;
public var wing1:Shape3D;
public var initGrowthSpeed:Number;
public var mY:Number;
public var tail_str:String;
public var arm2_str:String;
public var breasts:Shape3D;
public var growth:int;
public var leg1_str:String;
public var belly:Shape3D;
public var head:Shape3D;
public var leg1:Shape3D;
public var leg2:Shape3D;
public var wing1_str:String;
public function MainTimeline(){
addFrameScript(0, frame1);
}
public function expandRelease(_arg1){
if (reset){
head.gotoFrame(headState);
arm1.gotoFrame(1);
arm2.gotoFrame(1);
belly.gotoFrame(1);
breasts.gotoFrame(1);
growth = 0;
size = 0;
bSize = 0;
arm1State = 1;
arm1Pos = 0;
arm2State = 1;
arm2Pos = 0;
headState = 1;
head.rX = 0;
reset = false;
camera.draw(clip);
};
}
public function eFrame(_arg1){
var _local2:Number;
var _local3:Number;
if (growth == 1){
_local2 = size;
_local3 = bSize;
if ((((_panel._belly.currentFrame - 1)) && (((1 - size) > 0.0001)))){
size = (size + growthSpeed);
size = Math.min(size, 1);
if ((1 - size) < 0.0001){
size = 1;
};
};
if ((((_panel._breasts.currentFrame - 1)) && (((1 - bSize) > 0.0001)))){
bSize = (bSize + growthSpeed);
bSize = Math.min(bSize, 1);
if ((1 - bSize) < 0.0001){
bSize = 1;
};
};
if ((((bSize == 1)) && ((size == 1)))){
growth = 0;
};
if (((!((_local2 == size))) || (!((_local3 == bSize))))){
setSize();
};
} else {
if (growth == -1){
if ((_panel._belly.currentFrame - 1)){
size = (size - growthSpeed);
size = Math.max(size, 0);
};
if ((_panel._breasts.currentFrame - 1)){
bSize = (bSize - growthSpeed);
bSize = Math.max(bSize, 0);
};
if ((((bSize == 0)) && ((size == 0)))){
growth = 0;
};
setSize();
};
};
if (size > 0.8){
if (arm1State != 2){
arm1Pos = (arm1Pos + (Number((1 - arm1Pos)) * armSpeed));
goBetweenFrames(arm1, 1, 2, arm1Pos);
if ((1 - arm1Pos) < 0.05){
arm1State = 2;
arm1Pos = 0;
arm1.gotoFrame(2);
};
};
} else {
if (arm1State != 1){
arm1Pos = (arm1Pos + (Number((1 - arm1Pos)) * armSpeed));
goBetweenFrames(arm1, 2, 1, arm1Pos);
if ((1 - arm1Pos) < 0.05){
arm1State = 1;
arm1Pos = 0;
arm1.gotoFrame(1);
};
};
};
if (bSize > 0.7){
if (arm2State != 2){
arm2Pos = (arm2Pos + (Number((1 - arm2Pos)) * armSpeed));
goBetweenFrames(arm2, 1, 2, arm2Pos);
if ((1 - arm2Pos) < 0.05){
arm2State = 2;
arm2Pos = 0;
arm2.gotoFrame(2);
};
};
} else {
if (arm2State != 1){
arm2Pos = (arm2Pos + (Number((1 - arm2Pos)) * armSpeed));
goBetweenFrames(arm2, 2, 1, arm2Pos);
if ((1 - arm2Pos) < 0.05){
arm2State = 1;
arm2Pos = 0;
arm2.gotoFrame(1);
};
};
};
if (Math.max(size, bSize) < 0.1){
hRotation = 0;
if (headState != 1){
headState = 1;
head.gotoFrame(headState);
camera.draw(clip);
};
} else {
if (Math.max(size, bSize) < 0.4){
hRotation = 0.3;
if (headState != 2){
headState = 2;
head.gotoFrame(headState);
camera.draw(clip);
};
} else {
if (Math.max(size, bSize) < 0.8){
hRotation = -0.3;
if (headState != 3){
headState = 3;
head.gotoFrame(headState);
camera.draw(clip);
};
} else {
hRotation = 0.3;
if (headState != 1){
headState = 1;
head.gotoFrame(headState);
camera.draw(clip);
};
};
};
};
if (head.rX != hRotation){
head.rX = (head.rX + (Number((hRotation - head.rX)) * 0.3));
if (Math.abs((head.rX - hRotation)) < 0.05){
head.rX = hRotation;
camera.draw(clip);
};
};
}
function frame1(){
head_str = <![CDATA[
POS,0,0,107
ROT,0,0,0
SCA,1,1,1
P,0,0,1.6348773841961806,96
P,1,0,0,-4
P,2,31.560490940970197,41.16105648090791,-36.9368170697489
P,3,1.989454780275266,52.15263766819113,-116.33132320651114
P,4,-18.654437987113557,-4.257753738974392,-0.19397662556433912
P,5,-8.302005926645318,-17.239292941149348,-0.19397662556433912
P,6,8.302005926645315,-17.239292941149348,-0.19397662556433912
P,7,18.654437987113557,-4.2577537389743965,-0.19397662556433912
P,8,19.635326049648747,12.696763910154877,-6.45405844905936
P,9,26.30040911747516,64.98011988925143,-50.06077447721168
P,10,-29.277218143484777,61.60418428571856,-52.3477411633602
P,11,-34.46890689359052,-7.867303067823688,10.64466094067263
P,12,-15.340106708830016,-31.854059806588364,10.64466094067263
P,13,15.340106708830008,-31.854059806588367,10.64466094067263
P,14,34.46890689359052,-7.867303067823697,10.64466094067263
P,15,63.87803637843511,38.88822870418726,-94.97252199328403
P,16,10.683150437396788,62.46750088038608,14.841378300060551
P,17,-64.9604405856974,46.23046222872289,-100.5719273166763
P,18,-45.0357971869374,-2.1510645048072257,21.111675412005415
P,19,-12.671417966769498,-71.29087175860278,24.579524905923407
P,20,13.215413079851942,-71.29087175860278,24.579524905923407
P,21,45.0357971869374,-2.151064504807238,21.111675412005415
P,22,51.27809771395265,22.30819454900345,-2.5344306287271188
P,23,0,54,45
P,24,-45.90693967482652,32.590036556992786,29.278094145542724
P,25,-48.74639560909118,-13.421701643840391,37.72726810708667
P,26,-15.265198060495088,-76.28490439779922,30.56213141107165
P,27,16.340810731998893,-76.28490439779922,30.56213141107165
P,28,48.74639560909118,-13.421701643840406,37.72726810708667
P,29,48.38525442079924,32.00558302104888,33.20631716779757
P,30,0,46.19397662556434,65.13417161825448
P,31,-46.648742896642595,19.35133793474701,57.86847133348347
P,32,-39.70380431277213,-19.70282951878009,68.4295755108798
P,33,-12.333432142144602,-79.95784210417017,51.81493152291049
P,34,13.307882344314928,-79.95784210417017,51.81493152291049
P,35,40.6052582707405,-20.127086232688992,67.94913657273122
P,36,46.506719128965074,19.351337934746997,57.86847133348347
P,37,0,35.35533905932738,81.35533905932738
P,38,-27.641917149913763,24.43146793882668,79.92267430288037
P,39,-33.51080321828188,7.338643449647993,82.78527133362975
P,40,-15.340106708830016,-41.05817458731387,59.98180679872627
P,41,16.362620755711067,-41.05817458731388,59.43684767066087
P,42,35.42333353391307,7.338643449647986,82.24031220556435
P,43,27.64191714991377,24.43146793882667,79.92267430288037
P,44,0,19.13417161825449,92.19397662556436
P,45,-14.95969776209761,11.929960870996496,92.19397662556436
P,46,-18.654437987113557,-4.257753738974392,92.19397662556436
P,47,-16.048484799884754,-25.89844859380946,81.35117165418833
P,48,17.456935504110103,-26.988366849940245,80.80621252612293
P,49,18.654437987113557,-4.2577537389743965,92.19397662556436
P,50,14.959697762097612,11.929960870996492,92.19397662556436
P,51,0.46948356807511615,-35.612589707407885,100.40305176582578
P,52,0.6259780907668215,-57.29271724838759,81.34394186397122
P,53,-21.730861220111763,-30.313558268789365,68.80215025939742
P,54,23.06883476605509,-30.31355826878937,68.74544834744967
P,55,31.21046599476474,-26.2531042405392,59.090762400705515
P,56,-30.18795194788371,-26.25310424053919,59.635721528770915
P,57,58.00968664205688,3.0058919712341927,127.1884254920392
P,58,-58.51516145230699,2.590950322661173,127.27513406119846
P,59,1.6090717299663455,-79.9489411263638,42.80883693787366
P,60,-0.3253338148500431,-73.73986960215872,56.40060665316786
P,61,0.5378063357519023,-84.0602050463417,53.266633699022705
F,2,3,1,4287137928,-1
F,44,45,0,4287137928,1
F,3,4,1,4287137928,-1
F,45,46,0,4287137928,1
F,4,5,1,4291611852,-1
F,46,47,0,4287137928,1
F,5,6,1,4291611852,-1
F,6,7,1,4291611852,-1
F,48,49,0,4287137928,1
F,7,8,1,4287137928,-1
F,49,50,0,4287137928,1
F,8,2,1,4287137928,-1
F,50,44,0,4287137928,1
F,2,3,9,4287137928,1
F,3,9,10,4287137928,-1
F,3,4,10,4287137928,1
F,4,10,11,4287137928,-1
F,4,5,11,4291611852,1
F,5,11,12,4291611852,-1
F,5,6,12,4291611852,1
F,6,12,13,4291611852,-1
F,6,7,13,4291611852,1
F,7,13,14,4291611852,-1
F,7,8,14,4291611852,1
F,8,14,15,4287137928,-1
F,8,2,15,4287137928,1
F,2,15,9,4287137928,-1
F,9,10,16,4287137928,1
F,10,16,17,4287137928,-1
F,10,11,17,4287137928,1
F,11,17,18,4287137928,-1
F,11,12,18,4291611852,1
F,12,18,19,4291611852,-1
F,12,13,19,4291611852,1
F,13,14,20,4291611852,1
F,14,20,21,4291611852,-1
F,14,15,21,4287137928,1
F,15,21,22,4287137928,-1
F,15,9,22,4287137928,1
F,9,22,16,4287137928,-1
F,16,17,23,4287137928,1
F,17,23,24,4287137928,-1
F,17,18,24,4287137928,1
F,18,24,25,4287137928,-1
F,18,19,25,4291611852,1
F,19,25,26,4291611852,-1
F,20,26,27,4291611852,-1
F,20,21,27,4291611852,1
F,21,27,28,4291611852,-1
F,21,22,28,4287137928,1
F,22,28,29,4287137928,-1
F,22,16,29,4287137928,1
F,16,29,23,4287137928,-1
F,23,24,30,4287137928,1
F,24,30,31,4287137928,-1
F,24,25,31,4287137928,1
F,25,31,32,4287137928,-1
F,28,29,35,4287137928,1
F,29,35,36,4287137928,-1
F,29,23,36,4287137928,1
F,23,36,30,4287137928,-1
F,30,31,37,4287137928,1
F,31,37,38,4287137928,-1
F,35,36,42,4287137928,1
F,36,30,43,4287137928,1
F,30,43,37,4287137928,-1
F,37,38,44,4287137928,1
F,38,44,45,4287137928,-1
F,40,41,47,4291611852,1
F,41,47,48,4291611852,-1
F,42,48,49,4287137928,-1
F,43,37,50,4287137928,1
F,37,50,44,4287137928,-1
F,39,47,46,4287137928,1
F,51,48,0,4287137928,1
F,51,47,0,4287137928,-1
F,52,47,48,4287137928,1
F,47,40,53,4291611852,-1
F,47,39,53,4287137928,1
F,48,41,54,4291611852,1
F,48,42,54,4287137928,-1
F,54,35,55,4294967295,-1
F,54,41,55,4282664004,1
F,34,41,55,4291611852,-1
F,53,32,56,4294967295,1
F,53,40,56,4282664004,-1
F,33,40,56,4291611852,1
F,48,52,51,4287137928,-1
F,52,51,47,4287137928,1
F,50,43,57,4291611852,-1
F,50,49,57,4291611852,1
F,42,49,57,4291611852,-1
F,45,38,58,4291611852,1
F,39,32,31,4287137928,-1
F,31,38,58,4291611852,-1
F,43,36,57,4291611852,-1
F,58,39,31,4291611852,-1
F,42,36,57,4291611852,1
F,46,45,58,4291611852,1
F,46,58,39,4291611852,1
F,39,53,32,4287137928,-1
F,54,35,42,4287137928,1
F,56,32,25,4291611852,1
F,56,25,26,4291611852,1
F,56,26,33,4291611852,1
F,55,35,28,4291611852,-1
F,55,28,27,4291611852,-1
F,55,27,34,4291611852,-1
F,26,27,59,4291611852,1
F,26,33,59,4291611852,-1
F,34,27,59,4291611852,-1
F,20,19,13,4291611852,1
F,20,19,26,4291611852,-1
F,33,40,60,4291611852,-1
F,41,34,60,4291611852,-1
F,41,40,60,4291611852,1
F,60,33,61,4291611852,1
F,60,34,61,4291611852,-1
F,59,33,61,4278190080,-1
F,59,34,61,4278190080,1
FP,1,0,0,1.6348773841961806,96
FP,1,1,0,0,-4
FP,1,2,31.560490940970197,41.16105648090791,-36.9368170697489
FP,1,3,1.989454780275266,52.15263766819113,-116.33132320651114
FP,1,4,-18.654437987113557,-4.257753738974392,-0.19397662556433912
FP,1,5,-8.302005926645318,-17.239292941149348,-0.19397662556433912
FP,1,6,8.302005926645315,-17.239292941149348,-0.19397662556433912
FP,1,7,18.654437987113557,-4.2577537389743965,-0.19397662556433912
FP,1,8,19.635326049648747,12.696763910154877,-6.45405844905936
FP,1,9,26.30040911747516,64.98011988925143,-50.06077447721168
FP,1,10,-29.277218143484777,61.60418428571856,-52.3477411633602
FP,1,11,-34.46890689359052,-7.867303067823688,10.64466094067263
FP,1,12,-15.340106708830016,-31.854059806588364,10.64466094067263
FP,1,13,15.340106708830008,-31.854059806588367,10.64466094067263
FP,1,14,34.46890689359052,-7.867303067823697,10.64466094067263
FP,1,15,63.87803637843511,38.88822870418726,-94.97252199328403
FP,1,16,10.683150437396788,62.46750088038608,14.841378300060551
FP,1,17,-64.9604405856974,46.23046222872289,-100.5719273166763
FP,1,18,-45.0357971869374,-2.1510645048072257,21.111675412005415
FP,1,19,-12.671417966769498,-71.29087175860278,24.579524905923407
FP,1,20,13.215413079851942,-71.29087175860278,24.579524905923407
FP,1,21,45.0357971869374,-2.151064504807238,21.111675412005415
FP,1,22,51.27809771395265,22.30819454900345,-2.5344306287271188
FP,1,23,0,54,45
FP,1,24,-45.90693967482652,32.590036556992786,29.278094145542724
FP,1,25,-48.74639560909118,-13.421701643840391,37.72726810708667
FP,1,26,-15.265198060495088,-76.28490439779922,30.56213141107165
FP,1,27,16.340810731998893,-76.28490439779922,30.56213141107165
FP,1,28,48.74639560909118,-13.421701643840406,37.72726810708667
FP,1,29,48.38525442079924,32.00558302104888,33.20631716779757
FP,1,30,0,46.19397662556434,65.13417161825448
FP,1,31,-46.648742896642595,19.35133793474701,57.86847133348347
FP,1,32,-39.70380431277213,-19.70282951878009,68.4295755108798
FP,1,33,-12.333432142144602,-79.95784210417017,51.81493152291049
FP,1,34,13.307882344314928,-79.95784210417017,51.81493152291049
FP,1,35,40.6052582707405,-20.127086232688992,67.94913657273122
FP,1,36,46.506719128965074,19.351337934746997,57.86847133348347
FP,1,37,0,35.35533905932738,81.35533905932738
FP,1,38,-27.641917149913763,24.43146793882668,79.92267430288037
FP,1,39,-33.51080321828188,7.338643449647993,82.78527133362975
FP,1,40,-15.340106708830016,-41.05817458731387,59.98180679872627
FP,1,41,16.362620755711067,-41.05817458731388,59.43684767066087
FP,1,42,35.42333353391307,7.338643449647986,82.24031220556435
FP,1,43,27.64191714991377,24.43146793882667,79.92267430288037
FP,1,44,0,19.13417161825449,92.19397662556436
FP,1,45,-14.95969776209761,11.929960870996496,92.19397662556436
FP,1,46,-18.654437987113557,-4.257753738974392,92.19397662556436
FP,1,47,-16.048484799884754,-25.89844859380946,81.35117165418833
FP,1,48,17.456935504110103,-26.988366849940245,80.80621252612293
FP,1,49,18.654437987113557,-4.2577537389743965,92.19397662556436
FP,1,50,14.959697762097612,11.929960870996492,92.19397662556436
FP,1,51,0.46948356807511615,-35.612589707407885,100.40305176582578
FP,1,52,0.6259780907668215,-57.29271724838759,81.34394186397122
FP,1,53,-21.730861220111763,-30.313558268789365,68.80215025939742
FP,1,54,23.06883476605509,-30.31355826878937,68.74544834744967
FP,1,55,31.21046599476474,-26.2531042405392,59.090762400705515
FP,1,56,-30.18795194788371,-26.25310424053919,59.635721528770915
FP,1,57,58.00968664205688,3.0058919712341927,127.1884254920392
FP,1,58,-58.51516145230699,2.590950322661173,127.27513406119846
FP,1,59,1.6090717299663455,-79.9489411263638,42.80883693787366
FP,1,60,-0.3253338148500431,-73.73986960215872,56.40060665316786
FP,1,61,0.5378063357519023,-84.0602050463417,53.266633699022705
FPOS,1,0,0,107
FROT,1,0,0,0
FSCA,1,1,1,1
FP,2,0,0,1.6348773841961806,96
FP,2,1,0,0,-4
FP,2,2,31.560490940970197,41.16105648090791,-36.9368170697489
FP,2,3,1.989454780275266,52.15263766819113,-116.33132320651114
FP,2,4,-18.654437987113557,-4.257753738974392,-0.19397662556433912
FP,2,5,-8.302005926645318,-17.239292941149348,-0.19397662556433912
FP,2,6,8.302005926645315,-17.239292941149348,-0.19397662556433912
FP,2,7,18.654437987113557,-4.2577537389743965,-0.19397662556433912
FP,2,8,19.635326049648747,12.696763910154877,-6.45405844905936
FP,2,9,26.30040911747516,64.98011988925143,-50.06077447721168
FP,2,10,-29.277218143484777,61.60418428571856,-52.3477411633602
FP,2,11,-34.46890689359052,-7.867303067823688,10.64466094067263
FP,2,12,-15.340106708830016,-31.854059806588364,10.64466094067263
FP,2,13,15.340106708830008,-31.854059806588367,10.64466094067263
FP,2,14,34.46890689359052,-7.867303067823697,10.64466094067263
FP,2,15,63.87803637843511,38.88822870418726,-94.97252199328403
FP,2,16,10.683150437396788,62.46750088038608,14.841378300060551
FP,2,17,-64.9604405856974,46.23046222872289,-100.5719273166763
FP,2,18,-45.0357971869374,-2.1510645048072257,21.111675412005415
FP,2,19,-12.671417966769498,-71.29087175860278,24.579524905923407
FP,2,20,13.215413079851942,-71.29087175860278,24.579524905923407
FP,2,21,45.0357971869374,-2.151064504807238,21.111675412005415
FP,2,22,51.27809771395265,22.30819454900345,-2.5344306287271188
FP,2,23,0,54,45
FP,2,24,-45.90693967482652,32.590036556992786,29.278094145542724
FP,2,25,-48.74639560909118,-13.421701643840391,37.72726810708667
FP,2,26,-15.265198060495088,-76.28490439779922,30.56213141107165
FP,2,27,16.340810731998893,-76.28490439779922,30.56213141107165
FP,2,28,48.74639560909118,-13.421701643840406,37.72726810708667
FP,2,29,48.38525442079924,32.00558302104888,33.20631716779757
FP,2,30,0,46.19397662556434,65.13417161825448
FP,2,31,-46.648742896642595,19.35133793474701,57.86847133348347
FP,2,32,-39.70380431277213,-19.70282951878009,68.4295755108798
FP,2,33,-12.333432142144602,-79.95784210417017,51.81493152291049
FP,2,34,13.307882344314928,-79.95784210417017,51.81493152291049
FP,2,35,40.6052582707405,-20.127086232688992,67.94913657273122
FP,2,36,46.506719128965074,19.351337934746997,57.86847133348347
FP,2,37,0,35.35533905932738,81.35533905932738
FP,2,38,-27.641917149913763,24.43146793882668,79.92267430288037
FP,2,39,-33.51080321828188,7.338643449647993,82.78527133362975
FP,2,40,-15.340106708830016,-41.05817458731387,59.98180679872627
FP,2,41,16.362620755711067,-41.05817458731388,59.43684767066087
FP,2,42,35.42333353391307,7.338643449647986,82.24031220556435
FP,2,43,27.64191714991377,24.43146793882667,79.92267430288037
FP,2,44,0,19.13417161825449,92.19397662556436
FP,2,45,-14.95969776209761,11.929960870996496,92.19397662556436
FP,2,46,-18.654437987113557,-4.257753738974392,92.19397662556436
FP,2,47,-16.048484799884754,-25.89844859380946,81.35117165418833
FP,2,48,17.456935504110103,-26.988366849940245,80.80621252612293
FP,2,49,18.654437987113557,-4.2577537389743965,92.19397662556436
FP,2,50,14.959697762097612,11.929960870996492,92.19397662556436
FP,2,51,0.46948356807511615,-35.612589707407885,100.40305176582578
FP,2,52,0.6259780907668215,-57.29271724838759,81.34394186397122
FP,2,53,-19.814234483168786,-30.313558268789365,75.51034383869788
FP,2,54,19.714737976404866,-30.31355826878937,75.93279861098587
FP,2,55,32.16877936323624,-26.2531042405392,50.94509876869783
FP,2,56,-29.708795263647964,-26.25310424053919,50.052587844056006
FP,2,57,58.00968664205688,3.0058919712341927,127.1884254920392
FP,2,58,-58.51516145230699,2.590950322661173,127.27513406119846
FP,2,59,1.6090717299663455,-79.9489411263638,42.80883693787366
FP,2,60,-0.3253338148500431,-73.73986960215872,56.40060665316786
FP,2,61,0.5378063357519023,-84.0602050463417,53.266633699022705
FPOS,2,0,0,107
FROT,2,0,0,0
FSCA,2,1,1,1
FP,3,0,0,1.6348773841961806,96
FP,3,1,0,0,-4
FP,3,2,31.560490940970197,41.16105648090791,-36.9368170697489
FP,3,3,1.989454780275266,52.15263766819113,-116.33132320651114
FP,3,4,-18.654437987113557,-4.257753738974392,-0.19397662556433912
FP,3,5,-8.302005926645318,-17.239292941149348,-0.19397662556433912
FP,3,6,8.302005926645315,-17.239292941149348,-0.19397662556433912
FP,3,7,18.654437987113557,-4.2577537389743965,-0.19397662556433912
FP,3,8,19.635326049648747,12.696763910154877,-6.45405844905936
FP,3,9,26.30040911747516,64.98011988925143,-50.06077447721168
FP,3,10,-29.277218143484777,61.60418428571856,-52.3477411633602
FP,3,11,-34.46890689359052,-7.867303067823688,10.64466094067263
FP,3,12,-15.340106708830016,-31.854059806588364,10.64466094067263
FP,3,13,15.340106708830008,-31.854059806588367,10.64466094067263
FP,3,14,34.46890689359052,-7.867303067823697,10.64466094067263
FP,3,15,63.87803637843511,38.88822870418726,-94.97252199328403
FP,3,16,10.683150437396788,62.46750088038608,14.841378300060551
FP,3,17,-64.9604405856974,46.23046222872289,-100.5719273166763
FP,3,18,-45.0357971869374,-2.1510645048072257,21.111675412005415
FP,3,19,-12.671417966769498,-71.29087175860278,24.579524905923407
FP,3,20,13.215413079851942,-71.29087175860278,24.579524905923407
FP,3,21,45.0357971869374,-2.151064504807238,21.111675412005415
FP,3,22,51.27809771395265,22.30819454900345,-2.5344306287271188
FP,3,23,0,54,45
FP,3,24,-45.90693967482652,32.590036556992786,29.278094145542724
FP,3,25,-48.74639560909118,-13.421701643840391,37.72726810708667
FP,3,26,-15.265198060495088,-76.28490439779922,30.56213141107165
FP,3,27,16.340810731998893,-76.28490439779922,30.56213141107165
FP,3,28,48.74639560909118,-13.421701643840406,37.72726810708667
FP,3,29,48.38525442079924,32.00558302104888,33.20631716779757
FP,3,30,0,46.19397662556434,65.13417161825448
FP,3,31,-46.648742896642595,19.35133793474701,57.86847133348347
FP,3,32,-39.70380431277213,-19.70282951878009,68.4295755108798
FP,3,33,-12.333432142144602,-79.95784210417017,51.81493152291049
FP,3,34,13.307882344314928,-79.95784210417017,51.81493152291049
FP,3,35,40.6052582707405,-20.127086232688992,67.94913657273122
FP,3,36,46.506719128965074,19.351337934746997,57.86847133348347
FP,3,37,0,35.35533905932738,81.35533905932738
FP,3,38,-27.641917149913763,24.43146793882668,79.92267430288037
FP,3,39,-33.51080321828188,7.338643449647993,82.78527133362975
FP,3,40,-15.340106708830016,-41.05817458731387,59.98180679872627
FP,3,41,16.362620755711067,-41.05817458731388,59.43684767066087
FP,3,42,35.42333353391307,7.338643449647986,82.24031220556435
FP,3,43,27.64191714991377,24.43146793882667,79.92267430288037
FP,3,44,0,19.13417161825449,92.19397662556436
FP,3,45,-14.95969776209761,11.929960870996496,92.19397662556436
FP,3,46,-18.654437987113557,-4.257753738974392,92.19397662556436
FP,3,47,-16.048484799884754,-25.89844859380946,81.35117165418833
FP,3,48,17.456935504110103,-26.988366849940245,80.80621252612293
FP,3,49,18.654437987113557,-4.2577537389743965,92.19397662556436
FP,3,50,14.959697762097612,11.929960870996492,92.19397662556436
FP,3,51,0.46948356807511615,-35.612589707407885,100.40305176582578
FP,3,52,0.6259780907668215,-57.29271724838759,81.34394186397122
FP,3,53,-27.480741430940718,-30.313558268789365,57.781546521975294
FP,3,54,28.818714976884042,-30.31355826878937,60.12062803120625
FP,3,55,29.29383925782176,-26.2531042405392,60.04907576917701
FP,3,56,-27.79216852670498,-26.25310424053919,57.719094791827935
FP,3,57,58.00968664205688,3.0058919712341927,127.1884254920392
FP,3,58,-58.51516145230699,2.590950322661173,127.27513406119846
FP,3,59,1.6090717299663455,-79.9489411263638,42.80883693787366
FP,3,60,-0.3253338148500431,-73.73986960215872,56.40060665316786
FP,3,61,0.5378063357519023,-84.0602050463417,53.266633699022705
FPOS,3,0,0,107
FROT,3,0,0,0
FSCA,3,1,1,1
]]>
;
belly_str = <![CDATA[
POS,0,0,-51
ROT,0,0,0
SCA,1,1,1
P,0,0.033315844437396214,2.4221008511187674,-65.33320898134113
P,1,-29.01763696559234,40.57463692809109,-25.23243117669552
P,2,-45.60269305090932,35.09511121060579,64.79236908241847
P,3,-47.64663758526837,-20.891080030877315,-24.26845612199045
P,4,-42.63067715216096,-32.9459467755923,46.96021071288083
P,5,-0.9312082730615332,-29.73623648166738,-20.95738986959938
P,6,-0.9978399619363088,-32.75573143755852,46.8952372521296
P,7,45.26504338434181,-21.683418428697056,-21.947359815191913
P,8,41.035752046822765,-32.88086028341237,46.9253259213754
P,9,29.758793031975543,40.08494486764684,-25.151767974394147
P,10,51.97979956148037,34.59422394102602,64.82980788111067
P,11,-28.352684224111755,-36.84246851641133,11.360794466572964
P,12,31.717391415474324,-27.839409643871583,11.30645888176667
P,13,-0.14305642856135492,-36.88546777500722,10.740219716780592
P,14,45.61480078239497,-27.282139356054714,8.847142965468542
P,15,-45.13865736871467,-27.12512497348274,9.62577374073047
P,16,-14.36812368560745,-33.402906212820724,-9.77381897055502
P,17,-14.675262093024031,-36.60506791067056,29.843227849369008
P,18,15.359775726769008,-36.439277996555155,29.53088212260854
P,19,15.119269008227208,-33.305248526974125,-8.443229319440368
P,20,0.2510194936887318,-36.169765385035234,30.03516411491865
P,21,-14.521692889315744,-36.70369929651146,10.936953377895396
P,22,15.513344930477295,-36.87986417364405,11.149542034337022
P,23,-1.0847774767698204,-33.56067029865631,-8.622856909626293
F,0,1,3,4291611852,-1
F,1,2,3,4291611852,-1
F,0,3,5,4291611852,-1
F,0,5,7,4291611852,-1
F,0,7,9,4291611852,-1
F,8,9,10,4291611852,1
F,0,9,1,4291611852,-1
F,9,10,1,4291611852,-1
F,10,1,2,4291611852,1
F,12,8,14,4291611852,-1
F,12,7,14,4291611852,1
F,9,8,14,4291611852,1
F,9,7,14,4291611852,-1
F,11,3,15,4291611852,-1
F,11,4,15,4291611852,1
F,2,3,15,4291611852,1
F,2,4,15,4291611852,-1
F,3,11,16,4291611852,-1
F,3,5,16,4291611852,1
F,4,11,17,4291611852,1
F,4,6,17,4291611852,-1
F,8,12,18,4291611852,-1
F,8,6,18,4291611852,1
F,7,12,19,4291611852,1
F,7,5,19,4291611852,-1
F,17,13,20,4291611852,1
F,17,6,20,4291611852,-1
F,18,13,20,4291611852,-1
F,18,6,20,4291611852,1
F,16,13,21,4291611852,1
F,16,11,21,4291611852,-1
F,17,13,21,4291611852,-1
F,17,11,21,4291611852,1
F,18,13,22,4291611852,1
F,18,12,22,4291611852,-1
F,19,13,22,4291611852,-1
F,19,12,22,4291611852,1
F,16,13,23,4291611852,-1
F,16,5,23,4291611852,1
F,19,13,23,4291611852,1
F,19,5,23,4291611852,-1
FP,1,0,0.033315844437396214,2.4221008511187674,-65.33320898134113
FP,1,1,-29.01763696559234,40.57463692809109,-25.23243117669552
FP,1,2,-45.60269305090932,35.09511121060579,64.79236908241847
FP,1,3,-47.64663758526837,-20.891080030877315,-24.26845612199045
FP,1,4,-42.63067715216096,-32.9459467755923,46.96021071288083
FP,1,5,-0.9312082730615332,-29.73623648166738,-20.95738986959938
FP,1,6,-0.9978399619363088,-32.75573143755852,46.8952372521296
FP,1,7,45.26504338434181,-21.683418428697056,-21.947359815191913
FP,1,8,41.035752046822765,-32.88086028341237,46.9253259213754
FP,1,9,29.758793031975543,40.08494486764684,-25.151767974394147
FP,1,10,51.97979956148037,34.59422394102602,64.82980788111067
FP,1,11,-28.352684224111755,-36.84246851641133,11.360794466572964
FP,1,12,31.717391415474324,-27.839409643871583,11.30645888176667
FP,1,13,-0.14305642856135492,-36.88546777500722,10.740219716780592
FP,1,14,45.61480078239497,-27.282139356054714,8.847142965468542
FP,1,15,-45.13865736871467,-27.12512497348274,9.62577374073047
FP,1,16,-14.36812368560745,-33.402906212820724,-9.77381897055502
FP,1,17,-14.675262093024031,-36.60506791067056,29.843227849369008
FP,1,18,15.359775726769008,-36.439277996555155,29.53088212260854
FP,1,19,15.119269008227208,-33.305248526974125,-8.443229319440368
FP,1,20,0.2510194936887318,-36.169765385035234,30.03516411491865
FP,1,21,-14.521692889315744,-36.70369929651146,10.936953377895396
FP,1,22,15.513344930477295,-36.87986417364405,11.149542034337022
FP,1,23,-1.0847774767698204,-33.56067029865631,-8.622856909626293
FPOS,1,0,0,-51
FROT,1,0,0,0
FSCA,1,1,1,1
FP,2,0,-0.9666841555626036,3.054611920062468,-64.28934915977325
FP,2,1,-29.01763696559234,40.57463692809109,-25.23243117669552
FP,2,2,-45.60269305090932,35.09511121060579,64.79236908241847
FP,2,3,-47.64663758526837,-20.891080030877315,-25.26845612199045
FP,2,4,-43.63067715216096,-29.706277354104685,48.19988013436843
FP,2,5,-0.9312082730615332,-10.29094868913117,-105.918806694393
FP,2,6,-0.9978399619363088,-29.449946313591564,48.134906673617195
FP,2,7,46.26504338434181,-21.683418428697056,-23.947359815191913
FP,2,8,42.035752046822765,-29.707306564404107,48.164995342863
FP,2,9,29.758793031975543,40.08494486764684,-25.151767974394147
FP,2,10,51.97979956148037,34.59422394102602,64.82980788111067
FP,2,11,-80.35268422411175,-68.84246851641133,-23.63920553342704
FP,2,12,85.71739141547432,-68.83940964387159,-23.693541118233327
FP,2,13,-0.14305642856135492,-209.8854677750072,-98.2597802832194
FP,2,14,52.61480078239497,-29.282139356054714,1.8471429654685425
FP,2,15,-57.13865736871467,-30.12512497348274,0.6257737407304695
FP,2,16,-77.36812368560746,-86.40290621282072,-101.77381897055504
FP,2,17,-54.67526209302403,-148.60506791067056,8.843227849369008
FP,2,18,50.35977572676901,-148.43927799655515,9.53088212260854
FP,2,19,81.1192690082272,-86.30524852697414,-98.44322931944038
FP,2,20,0.2510194936887318,-157.16976538503525,27.03516411491865
FP,2,21,-72.52169288931574,-151.70369929651145,-77.06304662210461
FP,2,22,74.5133449304773,-151.87986417364405,-75.85045796566297
FP,2,23,-0.08477747676982039,-89.5606702986563,-145.6228569096263
FPOS,2,0,0,-51
FROT,2,0,0,0
FSCA,2,1,1,1
]]>
;
arm1_str = <![CDATA[
POS,-69,0,46
ROT,-0.5235987755982988,0,0
SCA,1,1,1
P,0,12.953608682599192,-19.28247744201833,35.78615160125544
P,1,-10.173536732391424,-28.916959582541118,-147.55441032799854
P,2,27.475671666860862,18.076035795967336,31.31460205872147
P,3,-18.51886446195827,-29.972840702931066,-145.4873782528425
P,4,-15.544182533047808,3.511064949849515,10.47995490347507
P,5,-12.163594342315774,-35.923080575732925,-131.94653889227664
P,6,7.220649959438337,-17.489358282881636,7.552779840471609
P,7,-2.9715685974405295,-35.07043119924084,-132.8938825540695
P,8,22.412147840898037,-6.953464919187634,-9.170145991478082
P,9,-14.80582749960827,12.217379370279346,-66.03825886607572
P,10,-34.21203311158072,-5.982481227474452,-65.1545969546713
P,11,-8.596991168000798,-17.73421287493413,-63.725186832175986
P,12,-1.187194154268509,-1.5749047100155407,-60.38760302401829
P,13,-14.597756960031305,-53.227605628463635,-165.25751677704116
P,14,-8.996750289427924,-61.33819395434089,-146.87866458009177
P,15,8.334846434801777,-65.49354694433538,-184.52113156796437
P,16,9.74666909268578,-76.57508504249311,-165.9219631529859
P,17,-5.334220596173683,-48.52420596654084,-168.86111897009928
P,18,3.3611526315951994,-61.36561337640986,-148.8413334466259
P,19,10.902920067833792,-71.10851026366154,-148.74766117764494
F,0,2,4,4291611852,1
F,0,4,6,4291611852,1
F,0,6,8,4291611852,1
F,0,8,2,4291611852,1
F,6,12,8,4291611852,1
F,6,12,11,4291611852,-1
F,6,11,10,4291611852,-1
F,6,10,4,4291611852,-1
F,10,4,9,4291611852,1
F,4,9,2,4291611852,-1
F,9,2,12,4291611852,1
F,2,12,8,4291611852,-1
F,5,10,11,4287137928,-1
F,5,10,3,4287137928,1
F,10,3,1,4287137928,-1
F,10,1,9,4287137928,-1
F,1,9,7,4287137928,1
F,9,7,12,4287137928,-1
F,7,12,11,4287137928,1
F,7,11,5,4287137928,1
F,13,5,14,4287137928,-1
F,13,5,3,4287137928,1
F,15,13,14,4287137928,-1
F,15,14,16,4287137928,-1
F,17,13,3,4287137928,1
F,17,3,1,4287137928,1
F,18,17,1,4287137928,1
F,7,18,1,4287137928,1
F,17,13,15,4287137928,-1
F,17,15,18,4287137928,-1
F,15,18,16,4287137928,1
F,19,7,5,4287137928,1
F,19,5,14,4287137928,1
F,18,7,19,4287137928,1
F,19,18,14,4287137928,-1
F,18,14,16,4287137928,1
FP,1,0,18.92014481965722,-13.88896703015288,35.62840545787052
FP,1,1,-27.7397400457186,-44.71282983032088,-138.04176047221645
FP,1,2,21.848228190074348,25.964194688066573,30.17905606365014
FP,1,3,-33.98288518279609,-47.267549813479626,-132.60774298429504
FP,1,4,-15.615996674560453,-0.909177530073151,10.912959569272177
FP,1,5,-21.516750719836907,-53.84536575589874,-124.83104880198144
FP,1,6,12.181433428072811,-14.471239982273318,7.566757252301511
FP,1,7,-13.982789921333705,-51.50292487775216,-129.7167640706221
FP,1,8,23.21922299364152,-0.36462916256288064,-9.771455975187305
FP,1,9,-17.033679856498864,15.192953690748643,-76.37467034948997
FP,1,10,-32.09528318809135,-5.365939732698203,-68.6872386138183
FP,1,11,-4.5387951765868815,-11.179578675537112,-66.9213522931064
FP,1,12,-0.5496549359354521,6.366884668941322,-68.75879129108351
FP,1,13,-40.75265507497475,-67.41841219406551,-154.53827984411598
FP,1,14,-26.47871248372519,-76.83666504393744,-142.6015213665851
FP,1,15,-35.059664327444516,-78.20474707716042,-179.96482071673503
FP,1,16,-24.743188369976153,-89.11426026815313,-167.22616477053342
FP,1,17,-30.722260727960187,-63.114982439751465,-159.79924884916878
FP,1,18,-16.5924955182951,-74.75167359582538,-149.98299210645405
FP,1,19,-10.710428560029458,-81.28514347726896,-156.0417122121276
FPOS,1,-69,0,46
FROT,1,0,0,0
FSCA,1,1,1,1
FP,2,0,12.953608682599192,-19.28247744201833,35.78615160125544
FP,2,1,-10.173536732391424,-28.916959582541118,-147.55441032799854
FP,2,2,27.475671666860862,18.076035795967336,31.31460205872147
FP,2,3,-18.51886446195827,-29.972840702931066,-145.4873782528425
FP,2,4,-15.544182533047808,3.511064949849515,10.47995490347507
FP,2,5,-12.163594342315774,-35.923080575732925,-131.94653889227664
FP,2,6,7.220649959438337,-17.489358282881636,7.552779840471609
FP,2,7,-2.9715685974405295,-35.07043119924084,-132.8938825540695
FP,2,8,22.412147840898037,-6.953464919187634,-9.170145991478082
FP,2,9,-14.80582749960827,12.217379370279346,-66.03825886607572
FP,2,10,-34.21203311158072,-5.982481227474452,-65.1545969546713
FP,2,11,-8.596991168000798,-17.73421287493413,-63.725186832175986
FP,2,12,-1.187194154268509,-1.5749047100155407,-60.38760302401829
FP,2,13,-14.597756960031305,-53.227605628463635,-165.25751677704116
FP,2,14,-8.996750289427924,-61.33819395434089,-146.87866458009177
FP,2,15,8.334846434801777,-65.49354694433538,-184.52113156796437
FP,2,16,9.74666909268578,-76.57508504249311,-165.9219631529859
FP,2,17,-5.334220596173683,-48.52420596654084,-168.86111897009928
FP,2,18,3.3611526315951994,-61.36561337640986,-148.8413334466259
FP,2,19,10.902920067833792,-71.10851026366154,-148.74766117764494
FPOS,2,-69,0,46
FROT,2,-0.5235987755982988,0,0
FSCA,2,1,1,1
]]>
;
arm2_str = <![CDATA[
POS,77.35000000000002,0,49.849999999999994
ROT,0,0,0
SCA,-1,1,1
P,0,21.40241432320331,0.05520983642759947,32.67385363517315
P,1,7.090668493385824,-71.03474670579156,3.031049209791874
P,2,27.167377126244528,26.372742293407345,4.9461874879180145
P,3,3.838792732697925,-68.96837761359755,10.919356459139898
P,4,-15.615996674560453,-0.9091775300731512,7.209255865568474
P,5,3.084461533762494,-52.73059587601731,5.371147331331951
P,6,19.27363200963305,-22.435892333901695,6.35566902047995
P,7,6.167259662374075,-53.10669141426616,-3.3737206557541075
P,8,23.21922299364152,-12.2275465615084,-11.108762042529802
P,9,-61.89811571718108,-49.60866565622304,-50.67230669772578
P,10,-79.19009673671799,-28.261122849528792,-33.168209799602245
P,11,-60.95959080306338,-36.9454213627261,-12.675508003907748
P,12,-38.972575241652336,-39.14765620719097,-25.74479530532034
P,13,32.746965508256636,-73.35593831032483,17.937652593979752
P,14,30.694304915987512,-50.851334578326956,15.528682861754818
P,15,59.77996393548744,-78.08779750108033,7.4430530062626215
P,16,57.642790734379716,-56.228892857941624,13.295875154863673
P,17,35.14837996725441,-74.47099240809206,7.218878432650872
P,18,36.10820813201508,-51.27120882490398,4.255531434831411
P,19,45.450134548439294,-41.80856459529213,6.982065501028577
F,0,2,4,4291611852,-1
F,0,4,6,4291611852,-1
F,0,6,8,4291611852,-1
F,0,8,2,4291611852,-1
F,6,12,8,4291611852,-1
F,6,12,11,4291611852,1
F,6,11,10,4291611852,1
F,6,10,4,4291611852,1
F,10,4,9,4291611852,-1
F,4,9,2,4291611852,1
F,9,2,12,4291611852,-1
F,2,12,8,4291611852,1
F,5,10,11,4287137928,1
F,5,10,3,4287137928,-1
F,10,3,1,4287137928,1
F,10,1,9,4287137928,1
F,1,9,7,4287137928,-1
F,9,7,12,4287137928,1
F,7,12,11,4287137928,-1
F,7,11,5,4287137928,-1
F,13,5,14,4287137928,1
F,13,5,3,4287137928,-1
F,15,13,14,4287137928,1
F,15,14,16,4287137928,1
F,17,13,3,4287137928,-1
F,17,3,1,4287137928,-1
F,18,17,1,4287137928,-1
F,7,18,1,4287137928,-1
F,17,13,15,4287137928,1
F,17,15,18,4287137928,1
F,15,18,16,4287137928,-1
F,19,7,5,4287137928,-1
F,19,5,14,4287137928,-1
F,18,7,19,4287137928,-1
F,19,18,14,4287137928,1
F,18,14,16,4287137928,-1
FP,1,0,21.40241432320331,-14.004544117878202,31.79511901302904
FP,1,1,-27.7397400457186,-44.71282983032088,-138.04176047221645
FP,1,2,27.167377126244528,25.494007671263233,26.03581841937672
FP,1,3,-33.98288518279609,-47.267549813479626,-132.60774298429504
FP,1,4,-15.615996674560453,-0.9091775300731512,7.209255865568474
FP,1,5,-21.516750719836907,-53.84536575589874,-124.83104880198144
FP,1,6,19.27363200963305,-14.527280734604684,3.7194651540476142
FP,1,7,-13.982789921333705,-51.50292487775216,-129.7167640706221
FP,1,8,23.21922299364152,-0.364629162562881,-13.74496590896214
FP,1,9,-17.033679856498864,15.192953690748643,-76.37467034948997
FP,1,10,-32.09528318809135,-5.365939732698203,-68.6872386138183
FP,1,11,-4.5387951765868815,-11.179578675537112,-66.9213522931064
FP,1,12,-0.5496549359354521,6.366884668941322,-68.75879129108351
FP,1,13,-40.75265507497475,-67.41841219406551,-154.53827984411598
FP,1,14,-26.47871248372519,-76.83666504393744,-142.6015213665851
FP,1,15,-35.059664327444516,-78.20474707716042,-179.96482071673503
FP,1,16,-24.743188369976153,-89.11426026815313,-167.22616477053342
FP,1,17,-30.722260727960187,-63.114982439751465,-159.79924884916878
FP,1,18,-16.5924955182951,-74.75167359582538,-149.98299210645405
FP,1,19,-10.710428560029458,-81.28514347726896,-156.0417122121276
FPOS,1,77.35000000000002,0,49.849999999999994
FROT,1,0,0,0
FSCA,1,-1,1,1
FP,2,0,21.40241432320331,0.05520983642759947,32.67385363517315
FP,2,1,7.090668493385824,-71.03474670579156,3.031049209791874
FP,2,2,27.167377126244528,26.372742293407345,4.9461874879180145
FP,2,3,3.838792732697925,-68.96837761359755,10.919356459139898
FP,2,4,-15.615996674560453,-0.9091775300731512,7.209255865568474
FP,2,5,3.084461533762494,-52.73059587601731,5.371147331331951
FP,2,6,19.27363200963305,-22.435892333901695,6.35566902047995
FP,2,7,6.167259662374075,-53.10669141426616,-3.3737206557541075
FP,2,8,23.21922299364152,-12.2275465615084,-11.108762042529802
FP,2,9,-61.89811571718108,-49.60866565622304,-50.67230669772578
FP,2,10,-79.19009673671799,-28.261122849528792,-33.168209799602245
FP,2,11,-60.95959080306338,-36.9454213627261,-12.675508003907748
FP,2,12,-38.972575241652336,-39.14765620719097,-25.74479530532034
FP,2,13,32.746965508256636,-73.35593831032483,17.937652593979752
FP,2,14,30.694304915987512,-50.851334578326956,15.528682861754818
FP,2,15,59.77996393548744,-78.08779750108033,7.4430530062626215
FP,2,16,57.642790734379716,-56.228892857941624,13.295875154863673
FP,2,17,35.14837996725441,-74.47099240809206,7.218878432650872
FP,2,18,36.10820813201508,-51.27120882490398,4.255531434831411
FP,2,19,45.450134548439294,-41.80856459529213,6.982065501028577
FPOS,2,77.35000000000002,0,49.849999999999994
FROT,2,0,0,0
FSCA,2,-1,1,1
]]>
;
breast_str = <![CDATA[
POS,0.8000000000000114,0,43.55000000000001
ROT,0,0,0
SCA,1,1,1
P,0,0.06294419822780484,-2.0095110938871175,-39.999949344555375
P,1,-0.0709877207581629,-4.481861465678116,67.55240216521906
P,2,-46.09351761664816,35.01268150736205,-30.73562069035821
P,3,-46.5761336398035,33.90007070039697,31.492882827601207
P,4,-77.41850306303112,-15.329005905502015,-44.94038762812994
P,5,-52.82173089040133,-14.434401200414838,38.28546411646959
P,6,-0.8406065626748551,-56.004406470353686,-39.98235018021275
P,7,-0.966494959130442,-45.87708935170396,26.064553117193014
P,8,75.86330580960265,-15.588593640495354,-43.459382556369654
P,9,57.637417413147105,-15.569571452721116,40.12531145437857
P,10,51.160920916602166,34.52478424970803,-30.96686037919276
P,11,47.46190183060723,32.87549245810037,32.10980769483983
P,12,-0.4700632107666445,-27.005795723821993,46.90249421274346
P,13,28.55452961762591,-8.018286748205613,46.951701002471815
P,14,21.64334439040068,24.170849961045676,47.03007114967794
P,15,-20.770306865700263,24.638693577458632,46.74837049566341
P,16,-28.01414506488988,-8.504750197535444,46.06331615719242
P,17,-0.48582041775147106,-19.406598647624534,66.09642038946926
P,18,24.683155263180147,-5.762010286804112,66.13178081464474
P,19,15.40506576223365,19.901904144880973,66.1880982810263
P,20,-15.977843750269004,18.659918535798106,65.98566575183368
P,21,-24.31636620686916,-6.555673906523515,65.4933797723914
P,22,-52.612402955021594,-38.94762569111176,11.553686034124386
P,23,50.356740310350986,-38.93592899134385,11.957256437727196
P,24,-88.05448946306066,-161.10394801059925,-24.817809734963326
P,25,82.73579454803347,-160.6544566817325,-24.61521348956694
P,26,-16.373072996930578,-49.31242161068662,12.464164416086142
P,27,15.35915644362064,-49.30657326080267,12.945748162935114
P,28,-30.66207637807078,-120.44470005471563,-95.62974032041713
P,29,31.582500869560025,-120.78251404905387,-95.63059900485327
P,30,-43.29256416314976,-33.66272199060585,-50.34998360355507
P,31,39.79863325988537,-32.43203974396362,-50.46657225849115
P,32,-91.36857578462391,-93.38629574888951,12.989707958142255
P,33,-31.61218663496293,-118.3617073741552,14.943860417089297
P,34,-5.44812525255125,-110.27081713955009,-21.181237816593594
P,35,-2.824005177167905,-115.53575161826373,-58.784581131012786
P,36,-119.84955273571153,-91.24340524742595,-22.939796359882436
P,37,-108.72398738558208,-101.35180449314583,-90.41967352235595
P,38,89.7719453291322,-92.15313209954655,12.949390518335427
P,39,28.37660821329412,-117.26047869753324,15.230935420594065
P,40,5.073465568083279,-109.72503166580596,-21.237936398307493
P,41,1.8911530931881584,-116.10791526656405,-59.24855125436302
P,42,123.8735539823993,-91.8412362264986,-23.40721700045499
P,43,109.67600097533386,-100.21566204196674,-89.09483961903189
F,2,3,4,4291611852,-1
F,3,4,5,4291611852,1
F,8,9,10,4291611852,-1
F,9,10,11,4291611852,1
F,10,11,2,4291611852,-1
F,11,2,3,4291611852,1
F,5,7,12,4291611852,1
F,9,7,12,4291611852,-1
F,12,9,13,4291611852,1
F,11,9,13,4291611852,-1
F,13,11,14,4291611852,1
F,3,11,14,4291611852,-1
F,14,3,15,4291611852,1
F,5,3,15,4291611852,-1
F,16,15,5,4291611852,1
F,16,5,12,4291611852,1
F,20,15,16,4291611852,1
F,20,16,21,4291611852,1
F,16,21,12,4291611852,-1
F,21,12,17,4291611852,1
F,12,17,13,4291611852,-1
F,17,13,18,4291611852,1
F,13,18,14,4291611852,-1
F,18,14,19,4291611852,1
F,14,19,15,4291611852,-1
F,19,15,20,4291611852,1
F,1,19,18,4291611852,-1
F,1,19,20,4291611852,1
F,1,20,21,4291611852,1
F,1,21,17,4291611852,1
F,1,17,18,4291611852,1
F,7,5,22,4291611852,1
F,4,5,22,4291611852,-1
F,9,7,23,4291611852,1
F,9,8,23,4291611852,-1
F,7,6,26,4291611852,-1
F,7,22,26,4291611852,1
F,7,6,27,4291611852,1
F,7,23,27,4291611852,-1
F,4,22,32,4291611852,-1
F,26,22,32,4291611852,1
F,32,26,33,4291611852,-1
F,32,24,33,4291611852,1
F,6,26,33,4291611852,1
F,33,6,34,4291611852,-1
F,33,24,34,4291611852,1
F,34,6,35,4291611852,-1
F,32,4,36,4291611852,1
F,32,24,36,4291611852,-1
F,36,4,37,4291611852,1
F,27,23,38,4291611852,-1
F,8,23,38,4291611852,1
F,6,27,39,4291611852,-1
F,38,25,39,4291611852,-1
F,38,27,39,4291611852,1
F,39,6,40,4291611852,1
F,39,25,40,4291611852,-1
F,40,6,41,4291611852,1
F,38,8,42,4291611852,-1
F,38,25,42,4291611852,1
F,42,8,43,4291611852,-1
F,31,8,10,4291611852,-1
F,30,4,2,4291611852,1
F,30,31,6,4291611852,1
F,24,37,36,4291611852,-1
F,24,37,28,4291611852,1
F,24,28,35,4291611852,1
F,24,35,34,4291611852,1
F,25,40,41,4291611852,1
F,25,41,29,4291611852,1
F,25,29,43,4291611852,1
F,25,43,42,4291611852,1
F,28,4,37,4291611852,-1
F,28,4,30,4291611852,1
F,28,30,6,4291611852,1
F,28,6,35,4291611852,1
F,6,41,29,4291611852,-1
F,29,6,31,4291611852,1
F,29,31,8,4291611852,1
F,29,8,43,4291611852,1
FP,1,0,0.06294419822780484,-2.0095110938871175,-39.999949344555375
FP,1,1,-0.0709877207581629,-4.481861465678116,67.55240216521906
FP,1,2,-46.09351761664816,35.01268150736205,-30.73562069035821
FP,1,3,-46.5761336398035,33.90007070039697,31.492882827601207
FP,1,4,-77.41850306303112,-14.329005905502015,-44.94038762812994
FP,1,5,-52.82173089040133,-14.434401200414838,38.28546411646959
FP,1,6,-0.8406065626748551,-56.004406470353686,-39.98235018021275
FP,1,7,-0.966494959130442,-45.87708935170396,26.064553117193014
FP,1,8,75.86330580960265,-15.588593640495354,-40.459382556369654
FP,1,9,57.637417413147105,-15.569571452721116,40.12531145437857
FP,1,10,51.160920916602166,34.52478424970803,-30.96686037919276
FP,1,11,47.46190183060723,32.87549245810037,32.10980769483983
FP,1,12,-0.4700632107666445,-27.005795723821993,46.90249421274346
FP,1,13,28.55452961762591,-8.018286748205613,46.951701002471815
FP,1,14,21.64334439040068,24.170849961045676,47.03007114967794
FP,1,15,-20.770306865700263,24.638693577458632,46.74837049566341
FP,1,16,-28.01414506488988,-8.504750197535444,46.06331615719242
FP,1,17,-0.48582041775147106,-19.406598647624534,66.09642038946926
FP,1,18,24.683155263180147,-5.762010286804112,66.13178081464474
FP,1,19,15.40506576223365,19.901904144880973,66.1880982810263
FP,1,20,-15.977843750269004,18.659918535798106,65.98566575183368
FP,1,21,-24.31636620686916,-6.555673906523515,65.4933797723914
FP,1,22,-52.612402955021594,-41.94762569111176,2.553686034124385
FP,1,23,50.356740310350986,-41.93592899134385,2.957256437727196
FP,1,24,-54.05448946306066,-94.44009998117733,-30.85561618970557
FP,1,25,50.73579454803347,-94.0577996202799,-30.54427372965104
FP,1,26,-27.373072996930578,-55.31242161068662,3.4641644160861427
FP,1,27,25.35915644362064,-55.30657326080267,3.945748162935115
FP,1,28,-45.66207637807078,-64.94304004266773,-63.83485433582646
FP,1,29,43.582500869560015,-64.26927935020105,-63.92252956796118
FP,1,30,-43.29256416314976,-33.66272199060585,-50.34998360355507
FP,1,31,39.79863325988537,-32.43203974396362,-50.46657225849115
FP,1,32,-63.36857578462392,-74.718017006879,-13.909918576663664
FP,1,33,-40.61218663496293,-82.35637909394761,-12.442137828947375
FP,1,34,-25.44812525255125,-82.25036366596525,-37.273060194292206
FP,1,35,-20.8240051771679,-66.67125532946794,-53.96606657916213
FP,1,36,-70.84955273571153,-77.41037230273564,-38.080935996182745
FP,1,37,-66.72398738558208,-61.83126396623834,-56.89148586858121
FP,1,38,63.7719453291322,-72.51593518507781,-14.631858554890584
FP,1,39,40.37660821329412,-81.36596413756125,-12.881606946642
FP,1,40,27.07346556808328,-80.70834595124899,-40.1875423046301
FP,1,41,23.89115309318816,-67.10491084966588,-55.56153480299929
FP,1,42,71.8735539823993,-76.86794541328564,-37.68633733684349
FP,1,43,68.67600097533386,-61.07389631871762,-56.31909953333864
FPOS,1,0.8000000000000114,0,43.55000000000001
FROT,1,0,0,0
FSCA,1,1,1,1
FP,2,0,0.06294419822780484,-2.0095110938871175,-39.999949344555375
FP,2,1,-0.0709877207581629,-4.481861465678116,67.55240216521906
FP,2,2,-46.09351761664816,35.01268150736205,-30.73562069035821
FP,2,3,-46.5761336398035,33.90007070039697,31.492882827601207
FP,2,4,-77.41850306303112,-15.329005905502015,-44.94038762812994
FP,2,5,-52.82173089040133,-14.434401200414838,38.28546411646959
FP,2,6,-0.8406065626748551,-56.004406470353686,-39.98235018021275
FP,2,7,-0.966494959130442,-45.87708935170396,26.064553117193014
FP,2,8,75.86330580960265,-15.588593640495354,-43.459382556369654
FP,2,9,57.637417413147105,-15.569571452721116,40.12531145437857
FP,2,10,51.160920916602166,34.52478424970803,-30.96686037919276
FP,2,11,47.46190183060723,32.87549245810037,32.10980769483983
FP,2,12,-0.4700632107666445,-27.005795723821993,46.90249421274346
FP,2,13,28.55452961762591,-8.018286748205613,46.951701002471815
FP,2,14,21.64334439040068,24.170849961045676,47.03007114967794
FP,2,15,-20.770306865700263,24.638693577458632,46.74837049566341
FP,2,16,-28.01414506488988,-8.504750197535444,46.06331615719242
FP,2,17,-0.48582041775147106,-19.406598647624534,66.09642038946926
FP,2,18,24.683155263180147,-5.762010286804112,66.13178081464474
FP,2,19,15.40506576223365,19.901904144880973,66.1880982810263
FP,2,20,-15.977843750269004,18.659918535798106,65.98566575183368
FP,2,21,-24.31636620686916,-6.555673906523515,65.4933797723914
FP,2,22,-52.612402955021594,-38.94762569111176,11.553686034124386
FP,2,23,50.356740310350986,-38.93592899134385,11.957256437727196
FP,2,24,-88.05448946306066,-158.44009998117733,-64.85561618970557
FP,2,25,82.73579454803347,-158.0577996202799,-64.54427372965104
FP,2,26,-16.373072996930578,-49.31242161068662,12.464164416086142
FP,2,27,15.35915644362064,-49.30657326080267,12.945748162935114
FP,2,28,-30.66207637807078,-100.94304004266776,-122.83485433582646
FP,2,29,31.582500869560025,-101.26927935020105,-122.9225295679612
FP,2,30,-43.29256416314976,-33.66272199060585,-50.34998360355507
FP,2,31,39.79863325988537,-32.43203974396362,-50.46657225849115
FP,2,32,-91.36857578462391,-102.718017006879,-10.909918576663664
FP,2,33,-31.61218663496293,-127.3563790939476,-15.442137828947375
FP,2,34,-5.44812525255125,-110.25036366596528,-48.27306019429221
FP,2,35,-2.824005177167905,-105.67125532946795,-85.96606657916212
FP,2,36,-119.84955273571153,-91.41037230273564,-45.080935996182745
FP,2,37,-108.72398738558208,-83.83126396623834,-112.8914858685812
FP,2,38,89.7719453291322,-101.5159351850778,-10.631858554890584
FP,2,39,28.37660821329412,-126.36596413756124,-14.881606946642002
FP,2,40,5.073465568083279,-109.708345951249,-48.1875423046301
FP,2,41,1.8911530931881584,-106.10491084966588,-86.56153480299929
FP,2,42,123.8735539823993,-91.86794541328564,-45.68633733684349
FP,2,43,109.67600097533386,-83.07389631871763,-111.31909953333864
FPOS,2,0.8000000000000114,0,43.55000000000001
FROT,2,0,0,0
FSCA,2,1,1,1
FP,3,0,0.06294419822780484,-2.0095110938871175,-39.999949344555375
FP,3,1,-0.0709877207581629,-4.481861465678116,67.55240216521906
FP,3,2,-46.09351761664816,35.01268150736205,-30.73562069035821
FP,3,3,-46.5761336398035,33.90007070039697,31.492882827601207
FP,3,4,-77.41850306303112,-15.329005905502015,-44.94038762812994
FP,3,5,-52.82173089040133,-14.434401200414838,38.28546411646959
FP,3,6,-0.8406065626748551,-56.004406470353686,-39.98235018021275
FP,3,7,-0.966494959130442,-45.87708935170396,26.064553117193014
FP,3,8,75.86330580960265,-15.588593640495354,-43.459382556369654
FP,3,9,57.637417413147105,-15.569571452721116,40.12531145437857
FP,3,10,51.160920916602166,34.52478424970803,-30.96686037919276
FP,3,11,47.46190183060723,32.87549245810037,32.10980769483983
FP,3,12,-0.4700632107666445,-27.005795723821993,46.90249421274346
FP,3,13,28.55452961762591,-8.018286748205613,46.951701002471815
FP,3,14,21.64334439040068,24.170849961045676,47.03007114967794
FP,3,15,-20.770306865700263,24.638693577458632,46.74837049566341
FP,3,16,-28.01414506488988,-8.504750197535444,46.06331615719242
FP,3,17,-0.48582041775147106,-19.406598647624534,66.09642038946926
FP,3,18,24.683155263180147,-5.762010286804112,66.13178081464474
FP,3,19,15.40506576223365,19.901904144880973,66.1880982810263
FP,3,20,-15.977843750269004,18.659918535798106,65.98566575183368
FP,3,21,-24.31636620686916,-6.555673906523515,65.4933797723914
FP,3,22,-52.612402955021594,-38.94762569111176,11.553686034124386
FP,3,23,50.356740310350986,-38.93592899134385,11.957256437727196
FP,3,24,-88.05448946306066,-161.10394801059925,-24.817809734963326
FP,3,25,82.73579454803347,-160.6544566817325,-24.61521348956694
FP,3,26,-16.373072996930578,-49.31242161068662,12.464164416086142
FP,3,27,15.35915644362064,-49.30657326080267,12.945748162935114
FP,3,28,-30.66207637807078,-120.44470005471563,-95.62974032041713
FP,3,29,31.582500869560025,-120.78251404905387,-95.63059900485327
FP,3,30,-43.29256416314976,-33.66272199060585,-50.34998360355507
FP,3,31,39.79863325988537,-32.43203974396362,-50.46657225849115
FP,3,32,-91.36857578462391,-93.38629574888951,12.989707958142255
FP,3,33,-31.61218663496293,-118.3617073741552,14.943860417089297
FP,3,34,-5.44812525255125,-110.27081713955009,-21.181237816593594
FP,3,35,-2.824005177167905,-115.53575161826373,-58.784581131012786
FP,3,36,-119.84955273571153,-91.24340524742595,-22.939796359882436
FP,3,37,-108.72398738558208,-101.35180449314583,-90.41967352235595
FP,3,38,89.7719453291322,-92.15313209954655,12.949390518335427
FP,3,39,28.37660821329412,-117.26047869753324,15.230935420594065
FP,3,40,5.073465568083279,-109.72503166580596,-21.237936398307493
FP,3,41,1.8911530931881584,-116.10791526656405,-59.24855125436302
FP,3,42,123.8735539823993,-91.8412362264986,-23.40721700045499
FP,3,43,109.67600097533386,-100.21566204196674,-89.09483961903189
FPOS,3,0.8000000000000114,0,43.55000000000001
FROT,3,0,0,0
FSCA,3,1,1,1
]]>
;
wing1_str = <![CDATA[
POS,-16.400000000000006,43.85000000000002,41.80000000000001
ROT,0,0,0
SCA,1,1,1
P,0,-14.031116422758208,7.554252562524712,24.58020982475878
P,1,-7.876582813929219,-10.81660431428291,-8.269335897403622
P,2,8.976321202098896,-11.439446537987909,15.401213131002985
P,3,-111.07436407532296,12.507171987651517,130.1202048581791
P,4,-120.93863579417777,-5.136883574929472,152.2372951546633
P,5,-128.2960616878398,-8.100134706483988,193.07584923796014
P,6,-166.9511220941136,28.073288584504514,123.71842509489795
P,7,-161.39151679122318,7.086624873161918,148.27328023246085
P,8,-167.83351576074517,8.159541173995851,180.423857299733
P,9,-102.8577036285283,47.19315103160923,-0.4472937089405733
P,10,-191.0329022053082,78.55863729602935,-68.12174709820084
P,11,-138.26071545481156,30.13755366879702,125.26423364060184
P,12,-139.60910598730723,5.65504880523996,138.82936282687643
P,13,-307.4010658304498,42.79086068058888,-174.0266871209696
F,0,1,2,4287137928,-1
F,0,3,2,4287137928,1
F,3,2,5,4287137928,-1
F,1,3,0,4287137928,1
F,1,3,4,4287137928,-1
F,8,13,6,4287137928,-1
F,13,6,7,4287137928,1
F,13,7,8,4287137928,1
F,4,1,5,4287137928,1
F,1,5,2,4287137928,-1
F,6,11,10,4287137928,1
F,6,7,10,4287137928,-1
F,10,11,12,4287137928,1
F,12,7,10,4287137928,1
F,9,11,3,4287137928,1
F,11,12,9,4287137928,-1
F,9,3,4,4287137928,1
F,9,4,12,4287137928,1
F,4,7,12,4287137928,1
F,11,6,3,4287137928,1
F,6,8,3,4287137928,1
F,8,3,5,4287137928,-1
F,7,4,5,4287137928,1
F,7,5,8,4287137928,1
F,9,10,11,16777215,-1
F,10,6,13,16777215,1
F,10,6,13,16777215,-1
F,10,9,11,16777215,-1
F,9,3,1,16777215,-1
F,9,3,1,16777215,1
]]>
;
wing2_str = <![CDATA[
POS,28.55000000000001,43.85000000000002,45.099999999999994
ROT,0,0,0
SCA,-1,1,1
P,0,-14.031116422758208,7.554252562524712,24.58020982475878
P,1,-7.876582813929219,-10.81660431428291,-8.269335897403622
P,2,8.976321202098896,-11.439446537987909,15.401213131002985
P,3,-111.07436407532296,12.507171987651517,130.1202048581791
P,4,-120.93863579417777,-5.136883574929472,152.2372951546633
P,5,-128.2960616878398,-8.100134706483988,193.07584923796014
P,6,-166.9511220941136,28.073288584504514,123.71842509489795
P,7,-161.39151679122318,7.086624873161918,148.27328023246085
P,8,-167.83351576074517,8.159541173995851,180.423857299733
P,9,-102.8577036285283,47.19315103160923,-0.4472937089405733
P,10,-191.0329022053082,78.55863729602935,-68.12174709820084
P,11,-138.26071545481156,30.13755366879702,125.26423364060184
P,12,-139.60910598730723,5.65504880523996,138.82936282687643
P,13,-307.4010658304498,42.79086068058888,-174.0266871209696
F,0,1,2,4287137928,1
F,0,3,2,4287137928,-1
F,3,2,5,4287137928,1
F,1,3,0,4287137928,-1
F,1,3,4,4287137928,1
F,8,13,6,4287137928,1
F,13,6,7,4287137928,-1
F,13,7,8,4287137928,-1
F,4,1,5,4287137928,-1
F,1,5,2,4287137928,1
F,6,11,10,4287137928,-1
F,6,7,10,4287137928,1
F,10,11,12,4287137928,-1
F,12,7,10,4287137928,-1
F,9,11,3,4287137928,-1
F,11,12,9,4287137928,1
F,9,3,4,4287137928,-1
F,9,4,12,4287137928,-1
F,4,7,12,4287137928,-1
F,11,6,3,4287137928,-1
F,6,8,3,4287137928,-1
F,8,3,5,4287137928,1
F,7,4,5,4287137928,-1
F,7,5,8,4287137928,-1
F,9,10,11,16777215,1
F,10,6,13,16777215,-1
F,10,6,13,16777215,1
F,10,9,11,16777215,1
F,9,3,1,16777215,1
F,9,3,1,16777215,-1
]]>
;
leg1_str = <![CDATA[
POS,-29.34999999999999,15.349999999999994,-103.15000000000003
ROT,0,0,0
SCA,1,1,1
P,0,-15.99094231025697,32.724984266834554,-334.7550524750547
P,1,-7.938143059949591,23.059968072766893,48.9349461725526
P,2,-14.8892690516794,22.110222542884628,-302.9168463748074
P,3,-54.436988198694046,5.317308826526192,-21.872269889998854
P,4,-28.03845238818705,-0.0768315206446335,-303.94214994363034
P,5,-17.95726455452663,-36.341879282105715,27.940569648971433
P,6,-13.540516525341618,-15.01929222055985,-303.0559553797662
P,7,29.553544578034252,-12.34650132374382,-12.607192983850576
P,8,-1.5453331082297268,-0.7061581411606819,-303.5984996561418
P,9,33.13931983910965,24.955037740645277,27.187351892837324
P,10,13.425460594088356,-5.909108601937316,-138.27685756750697
P,11,-17.746447049177043,20.92840082249716,-133.15352629100758
P,12,-18.733516162622458,-38.6557266283091,-141.50974373669493
P,13,-39.85982532429235,-5.909108601937316,-138.22761919227668
P,14,17.370125882431,-8.272752042712241,-191.06279058999328
P,15,-15.38280360840211,31.564796305984324,-189.8809688696058
P,16,-12.247407600987264,-28.01933114482195,-195.2965429148205
P,17,-42.22031303283658,-8.272752042712241,-190.2246191570943
P,18,-15.753137349624792,-2.8692249968324672,56.50071841096059
P,19,-4.731836247278212,52.55561425517681,-13.916703937001904
P,20,-33.75015999590362,7.580475611560065,-343.58468387711764
P,21,0.7188140120282686,6.951148991044015,-343.7669029788061
P,22,-52.00063199086897,-66.40316189630651,-344.2140104976337
P,23,-4.945125572616165,-78.98969430662758,-343.7669029788061
P,24,-45.07803916519246,-60.10989569114602,-328.61929684124607
P,25,-13.126371639324793,-71.43777486043491,-326.9135360813864
F,0,2,4,8947848,-1
F,1,5,7,4291611852,1
F,1,7,9,4291611852,1
F,0,8,2,8947848,-1
F,7,9,10,4291611852,-1
F,5,7,12,4291611852,-1
F,3,5,13,4291611852,-1
F,13,12,5,4291611852,1
F,10,9,11,4291611852,-1
F,10,7,12,4291611852,1
F,3,11,13,4291611852,1
F,16,12,14,4287137928,-1
F,12,14,10,4291611852,1
F,14,10,11,4291611852,-1
F,14,11,15,4291611852,-1
F,11,15,17,4291611852,1
F,11,17,13,4291611852,1
F,6,16,17,4287137928,1
F,6,16,14,4287137928,-1
F,6,14,8,4287137928,-1
F,14,8,15,4287137928,1
F,8,15,2,4287137928,-1
F,15,2,4,4287137928,1
F,15,4,17,4287137928,1
F,4,17,6,4287137928,-1
F,16,12,17,4287137928,1
F,12,17,13,4291611852,-1
F,18,1,3,4291611852,1
F,18,3,5,4291611852,1
F,18,1,5,4291611852,-1
F,11,9,19,4291611852,-1
F,11,3,19,4291611852,1
F,1,9,19,4291611852,1
F,1,3,19,4291611852,-1
F,4,20,0,8947848,-1
F,20,22,4,8947848,1
F,22,4,24,8947848,-1
F,24,23,22,8947848,-1
F,24,23,25,8947848,1
F,24,4,25,8947848,-1
F,4,25,6,8947848,1
F,6,8,25,8947848,-1
F,21,8,0,8947848,-1
F,25,21,8,8947848,1
F,25,21,23,8947848,-1
F,23,22,20,8947848,1
F,23,20,21,8947848,1
F,20,21,0,8947848,-1
]]>
;
leg2_str = <![CDATA[
POS,29.400000000000006,15.349999999999994,-102.45000000000005
ROT,0,0,0
SCA,-1,1,1
P,0,-15.99094231025697,32.724984266834554,-334.7550524750547
P,1,-7.938143059949591,23.059968072766893,48.9349461725526
P,2,-14.8892690516794,22.110222542884628,-302.9168463748074
P,3,-54.436988198694046,5.317308826526192,-21.872269889998854
P,4,-28.03845238818705,-0.0768315206446335,-303.94214994363034
P,5,-15.818227121371558,-36.341879282105715,29.54484772383774
P,6,-13.540516525341618,-15.01929222055985,-303.0559553797662
P,7,29.553544578034252,-12.34650132374382,-12.607192983850576
P,8,-1.5453331082297268,-0.7061581411606819,-303.5984996561418
P,9,33.13931983910965,24.955037740645277,27.187351892837324
P,10,13.425460594088356,-5.909108601937316,-138.27685756750697
P,11,-17.746447049177043,20.92840082249716,-133.15352629100758
P,12,-18.733516162622458,-38.6557266283091,-141.50974373669493
P,13,-39.85982532429235,-5.909108601937316,-138.22761919227668
P,14,17.370125882431,-8.272752042712241,-191.06279058999328
P,15,-15.38280360840211,31.564796305984324,-189.8809688696058
P,16,-12.247407600987264,-28.01933114482195,-195.2965429148205
P,17,-42.22031303283658,-8.272752042712241,-190.2246191570943
P,18,-8.801265691870793,-2.8692249968324672,60.24403391898196
P,19,-4.731836247278212,52.55561425517681,-13.916703937001904
P,20,-33.75015999590362,7.580475611560065,-343.58468387711764
P,21,0.7188140120282686,6.951148991044015,-343.7669029788061
P,22,-52.00063199086897,-66.40316189630651,-344.2140104976337
P,23,-4.945125572616165,-78.98969430662758,-343.7669029788061
P,24,-45.07803916519246,-60.10989569114602,-328.61929684124607
P,25,-13.126371639324793,-71.43777486043491,-326.9135360813864
F,0,2,4,8947848,1
F,1,5,7,4291611852,-1
F,1,7,9,4291611852,-1
F,0,8,2,8947848,1
F,7,9,10,4291611852,1
F,5,7,12,4291611852,1
F,3,5,13,4291611852,1
F,13,12,5,4291611852,-1
F,10,9,11,4291611852,1
F,10,7,12,4291611852,-1
F,3,11,13,4291611852,-1
F,16,12,14,4287137928,1
F,12,14,10,4291611852,-1
F,14,10,11,4291611852,1
F,14,11,15,4291611852,1
F,11,15,17,4291611852,-1
F,11,17,13,4291611852,-1
F,6,16,17,4287137928,-1
F,6,16,14,4287137928,1
F,6,14,8,4287137928,1
F,14,8,15,4287137928,-1
F,8,15,2,4287137928,1
F,15,2,4,4287137928,-1
F,15,4,17,4287137928,-1
F,4,17,6,4287137928,1
F,16,12,17,4287137928,-1
F,12,17,13,4291611852,1
F,18,1,3,4291611852,-1
F,18,3,5,4291611852,-1
F,18,1,5,4291611852,1
F,11,9,19,4291611852,1
F,11,3,19,4291611852,-1
F,1,9,19,4291611852,-1
F,1,3,19,4291611852,1
F,4,20,0,8947848,1
F,20,22,4,8947848,-1
F,22,4,24,8947848,1
F,24,23,22,8947848,1
F,24,23,25,8947848,-1
F,24,4,25,8947848,1
F,4,25,6,8947848,-1
F,6,8,25,8947848,1
F,21,8,0,8947848,1
F,25,21,8,8947848,-1
F,25,21,23,8947848,1
F,23,22,20,8947848,-1
F,23,20,21,8947848,-1
F,20,21,0,8947848,1
]]>
;
tail_str = <![CDATA[
POS,0,37.19999999999999,-42.450000000000045
ROT,0,0,0
SCA,1,1,1
P,0,0.1559886124923619,-4.280333571683383,3.16917561772067
P,1,-0.6192443446623124,172.88869724562457,-235.56003016038616
P,2,4.096604412039409,144.6357791555449,-175.19590352696252
P,3,-25.643669766302118,120.19541818679973,-170.94422627255025
P,4,-10.45176610486798,117.0672575755335,-204.28176559018118
P,5,15.491902463538624,118.48735901030857,-205.38205158790916
P,6,28.309214144566496,121.27709461553044,-172.00111930777575
P,7,1.3168811894016805,109.6588505672265,-60.03463699416596
P,8,-37.039147024407164,92.39185844874808,-88.04307650321566
P,9,-22.22118814935037,53.34025116293257,-122.2698771997749
P,10,28.192009165298042,53.25018629008803,-122.55564031786925
P,11,40.503532633384,92.2419328241157,-88.46891764102163
P,12,0.07474950964339577,8.741296084491374,4.958993828925641
P,13,-16.723068557356026,6.1882659423468125,-4.969158823974015
P,14,-9.444354100909774,-0.4755710817146712,-23.211662041862557
P,15,10.259927021978163,-1.353272269676989,-22.780539132268885
P,16,19.628810236971045,4.7602930220048645,-4.29098392734339
F,2,3,1,8947848,-1
F,12,13,0,4291611852,1
F,3,4,1,8947848,-1
F,13,14,0,4291611852,1
F,4,5,1,8947848,-1
F,14,15,0,4291611852,1
F,5,6,1,8947848,-1
F,15,16,0,4291611852,1
F,6,2,1,8947848,-1
F,16,12,0,4291611852,1
F,2,3,7,4291611852,1
F,3,7,8,4291611852,-1
F,3,4,8,4291611852,1
F,4,8,9,4291611852,-1
F,4,5,9,4291611852,1
F,5,9,10,4291611852,-1
F,5,6,10,4291611852,1
F,6,10,11,4291611852,-1
F,6,2,11,4291611852,1
F,2,11,7,4291611852,-1
F,7,8,12,4291611852,1
F,8,12,13,4291611852,-1
F,8,9,13,4291611852,1
F,9,13,14,4291611852,-1
F,9,10,14,4291611852,1
F,10,14,15,4291611852,-1
F,10,11,15,4291611852,1
F,11,15,16,4291611852,-1
F,11,7,16,4291611852,1
F,7,16,12,4291611852,-1
]]>
;
head = new Shape3D();
head.load(head_str);
breasts = new Shape3D();
breasts.load(breast_str);
belly = new Shape3D();
belly.load(belly_str);
arm1 = new Shape3D();
arm1.load(arm1_str);
arm2 = new Shape3D();
arm2.load(arm2_str);
leg1 = new Shape3D();
leg1.load(leg1_str);
leg2 = new Shape3D();
leg2.load(leg2_str);
tail = new Shape3D();
tail.load(tail_str);
wing1 = new Shape3D();
wing1.load(wing1_str);
wing2 = new Shape3D();
wing2.load(wing2_str);
head.gotoFrame(1);
belly.gotoFrame(1);
breasts.gotoFrame(1);
arm1.gotoFrame(1);
arm2.gotoFrame(1);
world = new World3D();
camDist = -800;
camCenter = new Point3D();
camSpin = new Point3D();
camera = new Camera3D(stage.stageWidth, stage.stageHeight, 500);
clip = new MovieClip();
camera.setWorld(world);
world.addShape(head);
world.addShape(belly);
world.addShape(breasts);
world.addShape(arm1);
world.addShape(arm2);
world.addShape(leg1);
world.addShape(leg2);
world.addShape(wing1);
world.addShape(wing2);
world.addShape(tail);
updateCamera();
stage.addChildAt(clip, 0);
size = 0;
bSize = 0;
initGrowthSpeed = 100;
growthSpeed = (1 / initGrowthSpeed);
growth = 0;
headState = 1;
arm1State = 1;
arm1Pos = 0;
armSpeed = 0.6;
arm2State = 1;
arm2Pos = 0;
hRotation = 0;
stage.addEventListener("enterFrame", eFrame);
stage.addEventListener("mouseDown", mDown);
stage.addEventListener("keyDown", kDown);
reset = false;
_panel._expand._txt.text = "Expand";
_panel._revert._txt.text = "Revert";
_panel._info.text = "Interactive pregnant 3D Sapphire. Drag the mouse to look around.\nHold Shift while dragging to scroll.\nHold Ctrl while dragging to zoom.\nProgrammed and animated by Doom the wolf";
_panel._cont_txt.text = "continuous";
_panel._speed_txt.text = initGrowthSpeed.toString();
stage.addEventListener("enterFrame", panelFrame);
_panel._cont.addEventListener("click", contUp);
_panel._expand.addEventListener("mouseDown", expandPress);
_panel._expand.addEventListener("mouseUp", expandRelease);
_panel._expand.addEventListener("mouseOut", stopReset);
_panel._expand.addEventListener("mouseOut", expandStop);
stage.addEventListener("mouseUp", expandStop);
_panel._revert.addEventListener("mouseDown", revertDown);
_panel._speed_txt.background = true;
_panel._speed_txt.backgroundColor = 0xFFFFFF;
_panel._speed_txt.border = true;
_panel._speed_txt.restrict = "1234567890";
_panel._speed_txt.addEventListener("change", textChanged_event);
_panel._speed_txt.addEventListener("focusOut", textChanged);
_panel._belly.addEventListener("click", swap);
_panel._breasts.addEventListener("click", swap);
_panel._belly.gotoAndStop(2);
}
public function stopReset(_arg1){
reset = false;
}
public function revertDown(_arg1){
growth = -1;
}
public function mDown(_arg1){
if (_panel.y < (stage.stageHeight - 90)){
return;
};
mX = stage.mouseX;
mY = stage.mouseY;
stage.addEventListener("mouseMove", mMove);
stage.addEventListener("mouseUp", mUp);
}
public function goBetweenFrames(_arg1:Shape3D, _arg2:int, _arg3:int, _arg4:Number){
_arg1.gotoFrame(_arg2);
_arg1.interpolate(_arg3, _arg4);
camera.draw(clip);
}
public function textChanged(_arg1=null){
var _local2:Number;
_local2 = uint(_panel._speed_txt.text);
if (((isNaN(_local2)) || ((_local2 < 1)))){
_local2 = initGrowthSpeed;
};
_panel._speed_txt.text = _local2.toString();
growthSpeed = (1 / _local2);
}
public function textChanged_event(_arg1){
var _local2:String;
_local2 = _panel._speed_txt.text.charAt((_panel._speed_txt.text.length - 1));
if ((((_local2 == "\n")) || ((_local2 == "\n")))){
textChanged();
};
}
public function updateCamera(_arg1=null){
var _local2:Point3D;
_local2 = new Point3D();
_local2.y = camDist;
_local2 = Utils.rotatePoint(_local2, new Point3D(), camSpin.x, camSpin.y, camSpin.z);
_local2.offset(camCenter);
camera.position = _local2;
camera.lookAt(camCenter);
camera.draw(clip);
}
public function contUp(_arg1){
growth = 0;
_panel._cont.gotoAndStop((3 - _panel._cont.currentFrame));
}
public function setSize(){
goBetweenFrames(belly, 1, 2, size);
if (size > 0.5){
goBetweenFrames(breasts, 1, 3, bSize);
} else {
goBetweenFrames(breasts, 1, 2, bSize);
};
}
public function swap(_arg1){
_arg1.currentTarget.gotoAndStop((3 - _arg1.currentTarget.currentFrame));
}
public function kDown(_arg1){
if (_arg1.keyCode == Keyboard.SPACE){
camDist = -800;
camCenter = new Point3D();
camSpin = new Point3D();
updateCamera();
};
}
public function expandStop(_arg1){
if (!Boolean((_panel._cont.currentFrame - 1))){
growth = 0;
};
}
public function panelFrame(_arg1){
if (_panel.hitTestPoint(stage.mouseX, stage.mouseY)){
if (Math.abs((_panel.y - 500)) > 1){
_panel.y = (_panel.y + ((500 - _panel.y) * 0.4));
};
} else {
if (Math.abs((_panel.y - 600)) > 1){
_panel.y = (_panel.y + ((600 - _panel.y) * 0.4));
};
};
if (((growth) && ((_panel._cont.currentFrame == 2)))){
_panel._cont_txt.text = "stop";
} else {
_panel._cont_txt.text = "continuous";
};
if (((((1 - size) > 0.0001)) || (((1 - bSize) > 0.0001)))){
_panel._expand._txt.text = "Expand";
} else {
_panel._expand._txt.text = "Reset";
};
}
public function expandPress(_arg1){
if ((((size >= (1 - 0.0001))) && ((bSize >= (1 - 0.0001))))){
growth = 0;
reset = true;
} else {
growth = 1;
};
}
public function mMove(_arg1){
var _local2:Number;
var _local3:Number;
_local2 = (stage.mouseX - mX);
_local3 = (stage.mouseY - mY);
if (_arg1.shiftKey){
camCenter.z = (camCenter.z + _local3);
camCenter.y = (camCenter.y + (Math.sin(camSpin.z) * -(_local2)));
camCenter.x = (camCenter.x + (Math.cos(camSpin.z) * -(_local2)));
} else {
if (_arg1.ctrlKey){
camDist = (camDist + _local3);
if (camDist > -200){
camDist = -200;
};
} else {
camSpin.z = (camSpin.z - (_local2 / 100));
camSpin.x = (camSpin.x - (_local3 / 100));
if (camSpin.x > ((Math.PI * 0.5) - 0.001)){
camSpin.x = ((Math.PI * 0.5) - 0.001);
} else {
if (camSpin.x < ((-(Math.PI) * 0.5) + 0.001)){
camSpin.x = ((-(Math.PI) * 0.5) + 0.001);
};
};
};
};
updateCamera();
mX = stage.mouseX;
mY = stage.mouseY;
}
public function mUp(_arg1){
stage.removeEventListener("mouseMove", mMove);
stage.removeEventListener("mouseUp", mUp);
}
}
}//package sInf_fla
Section 10
//panel_1 (sInf_fla.panel_1)
package sInf_fla {
import flash.display.*;
import flash.text.*;
public dynamic class panel_1 extends MovieClip {
public var _belly_txt:TextField;
public var _tip:MovieClip;
public var _revert:MovieClip;
public var _cont:MovieClip;
public var _cont_txt:TextField;
public var _breasts:MovieClip;
public var _ok:MovieClip;
public var _info:TextField;
public var _expand:MovieClip;
public var _belly:MovieClip;
public var _breasts_txt:TextField;
public var _speed_txt:TextField;
}
}//package sInf_fla