<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="creationCompleteHandler(event)"
xmlns:degrafa="com.degrafa.*" xmlns:paint="com.degrafa.paint.*" xmlns:geometry="com.degrafa.geometry.*">
<mx:Script>
<![CDATA[
import org.papervision3d.core.math.Matrix3D;
import org.papervision3d.cameras.FrustumCamera3D;
import org.papervision3d.core.geom.CustomRendering3D;
import com.degrafa.IGraphic;
import org.papervision3d.core.geom.renderables.Curve3D;
import org.papervision3d.core.geom.Curves3D;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.core.geom.Lines3D;
import org.papervision3d.materials.special.LineMaterial;
import org.papervision3d.core.geom.renderables.Line3D;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.core.math.Plane3D;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.core.render.data.RenderHitData;
import org.papervision3d.core.geom.renderables.Triangle3D;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.core.proto.MaterialObject3D;
import org.papervision3d.objects.primitives.Cone;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.scenes.Scene3D;
import mx.core.UIComponent;
private var parentUIC:UIComponent;
private var scene:Scene3D;
private var camera1:Camera3D;
private var fcamera2:FrustumCamera3D;
private var renderer:BasicRenderEngine;
private var viewPort:Viewport3D;
private var whatever:Cube;
private var line:Lines3D;
private var curves:Curves3D;
private var custom:CustomRendering3D;
private function creationCompleteHandler(event:Event):void {
parentUIC = new UIComponent();
parentUIC.percentWidth = 100;
parentUIC.percentHeight = 100;
main.addChild(parentUIC);
viewPort = new Viewport3D(10,10,true,true);
parentUIC.addChild(viewPort);
scene = new Scene3D();
renderer = new BasicRenderEngine();
var mat:ColorMaterial = new ColorMaterial(0xEE4477,1,true);
mat.interactive = true;
var ml:MaterialsList = new MaterialsList();
ml.addMaterial(mat, "all");
whatever = new Cube(ml, 200, 200, 200);
whatever.pitch(-30);
var redLine:LineMaterial = new LineMaterial(0xF00F00,1);
var greenLine:LineMaterial = new LineMaterial(0x00FF00,1);
var blueLine:LineMaterial = new LineMaterial(0x0000FF,1);
line = new Lines3D(redLine, "lineTest");
line.addLine(new Line3D(line, greenLine, 2, new Vertex3D(-1000, 0, 0), new Vertex3D(1000, 0, 0)));
line.addLine(new Line3D(line, redLine, 2, new Vertex3D(0, -1000, 0), new Vertex3D(0, 1000, 0)));
line.addLine(new Line3D(line, blueLine, 2, new Vertex3D(0, 0, -1000), new Vertex3D(0, 0, 1000)));
scene.addChild(line);
curves = new Curves3D(redLine, "curveTest");
curves.addCurve(new Curve3D(curves, redLine, 2, new Vertex3D(0, 0, -1000), new Vertex3D(0, 0, 1000),
new Vertex3D(0, 300, 500)));
scene.addChild(curves);
scene.addChild(a.displayObject3D);
scene.addChild(b.displayObject3D);
scene.addChild(c.displayObject3D);
scene.addChild(d.displayObject3D);
d.displayObject3D.pitch(50);
camera1 = new Camera3D(null, 2);
camera1.x = 100;
camera1.y = 200;
camera1.z = -1000;
parentUIC.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true);
renderer.renderScene(scene, camera1, viewPort);
fcamera2 = new FrustumCamera3D(viewPort);
fcamera2.far = 5000;
fcamera2.x = 100;
fcamera2.y = 200;
fcamera2.z = -2000;
fcamera2.near = 10;
fcamera2.fov = 90;
originalTransform = fcamera2.transform;
}
private function enterFrameHandler(event:Event):void {
whatever.yaw(5);
b.displayObject3D.yaw(5);
renderer.renderScene(scene, fcamera2, viewPort);
}
protected function updateRotationFromSliders():void
{
originalTransform = Matrix3D.translationMatrix(xSlider.value, ySlider.value, zSlider.value);
fcamera2.transform = Matrix3D.multiply(originalTransform,
Matrix3D.multiply(
Matrix3D.rotationX(pitchSlider.value*Math.PI/180),
Matrix3D.multiply(
Matrix3D.rotationY(yawSlider.value*Math.PI/180),
Matrix3D.rotationZ(rollSlider.value*Math.PI/180))
)
);
}
protected var originalTransform:Matrix3D;
]]>
</mx:Script>
<mx:Grid width="100%">
<mx:GridRow width="100%">
<mx:GridItem>
<mx:Label text="X-Axis"/>
</mx:GridItem>
<mx:GridItem width="100%">
<mx:HSlider id="xSlider" width="100%" change="fcamera2.x = xSlider.value" liveDragging="true"
minimum="-1000" maximum="1000" value="100"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%">
<mx:GridItem>
<mx:Label text="Y-Axis"/>
</mx:GridItem>
<mx:GridItem width="100%">
<mx:HSlider id="ySlider" width="100%" change="fcamera2.y = ySlider.value" liveDragging="true"
minimum="-1000" maximum="1000" value="200"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%">
<mx:GridItem>
<mx:Label text="Z-Axis"/>
</mx:GridItem>
<mx:GridItem width="100%">
<mx:HSlider id="zSlider" width="100%" change="fcamera2.z = zSlider.value" liveDragging="true"
minimum="-5000" maximum="1000" value="-2000"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%">
<mx:GridItem>
<mx:Label text="Pitch"/>
</mx:GridItem>
<mx:GridItem width="100%">
<mx:HSlider id="pitchSlider" width="100%" change="updateRotationFromSliders()" liveDragging="true"
minimum="-180" maximum="180" value="0"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%">
<mx:GridItem>
<mx:Label text="Yaw"/>
</mx:GridItem>
<mx:GridItem width="100%">
<mx:HSlider id="yawSlider" width="100%" change="updateRotationFromSliders()" liveDragging="true"
minimum="-180" maximum="180" value="0"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow width="100%">
<mx:GridItem>
<mx:Label text="Roll"/>
</mx:GridItem>
<mx:GridItem width="100%">
<mx:HSlider id="rollSlider" width="100%" change="updateRotationFromSliders()" liveDragging="true"
minimum="-180" maximum="180" value="0"/>
</mx:GridItem>
</mx:GridRow>
</mx:Grid>
<mx:Panel title="Test" id="main" width="100%" height="100%" backgroundColor="black"/>
<mx:UIComponent id="me" height="500" visible="false" includeInLayout="false"/>
<degrafa:Surface id="surf" verticalCenter="0" horizontalCenter="-125">
<degrafa:fills>
<paint:SolidFill id="aqua" color="aqua"/>
<paint:SolidFill id="chartreuse" color="chartreuse"/>
<paint:SolidFill id="mintcream" color="mintcream"/>
<paint:SolidFill id="fuchsia" color="fuchsia"/>
<paint:SolidFill id="gold" color="gold"/>
<paint:SolidFill id="peru" color="peru"/>
</degrafa:fills>
<degrafa:strokes>
<paint:SolidStroke id="whiteStroke" color="white" alpha="1" weight="2"/>
<paint:SolidStroke id="aquaStroke" color="aqua" alpha="1" weight="2"/>
<paint:SolidStroke id="blackStroke" color="DARKSLATEBLUE" alpha="1" weight="1"/>
<paint:SolidStroke id="greenStroke" color="green" alpha="1" weight="2"/>
<paint:SolidStroke id="redStroke" color="red" alpha="1" weight="2"/>
</degrafa:strokes>
<degrafa:GeometryGroup3d id="a">
<geometry:Line stroke="{greenStroke}" x="100" x1="290" y="-50" y1="-250"/>
</degrafa:GeometryGroup3d>
<degrafa:GeometryGroup3d id="b">
<geometry:Circle fill="{gold}" radius="20" centerX="50" centerY="60"/>
<geometry:CubicBezier stroke="{aquaStroke}" x="0" y="0" cx="50" cy="50" cx1="80" cy1="20" x1="100" y1="100"/>
<geometry:Ellipse fill="{mintcream}" width="100" height="30" x="250" y="50"/>
<geometry:RegularRectangle fill="{aqua}" stroke="{aquaStroke}" y="100" height="100" width="50"/>
<geometry:EllipticalArc x="400" closureType="open" arc="180" width="200"
height="200" startAngle="10" stroke="{aquaStroke}"/>
<geometry:EllipticalArc closureType="pie" arc="30" width="200"
height="200" startAngle="10" y="150" stroke="{aquaStroke}" fill="{gold}"/>
<geometry:HorizontalLine stroke="{greenStroke}" x="260" x1="320" y="-140"/>
<geometry:VerticalLine stroke="{redStroke}" y="10" y1="60" x="300"/>
<geometry:Line stroke="{greenStroke}" x="100" x1="290" y="-50" y1="-250"/>
<geometry:Path stroke="{redStroke}">
<geometry:data>M-83.982,82.53c22.185,22.189,51.686,34.411,83.066,34.411c31.38,0,60.881-12.222,83.069-34.411
c22.189-22.189,34.406-51.689,34.406-83.065c0-31.381-12.217-60.881-34.405-83.07c-22.189-22.19-51.69-34.406-83.07-34.406
c-31.379,0-60.878,12.218-83.066,34.406c-22.191,22.188-34.408,51.688-34.408,83.07C-118.39,30.841-106.174,60.341-83.982,82.53z
M-79.77-79.392c21.064-21.064,49.066-32.663,78.854-32.663s57.793,11.601,78.853,32.663
c21.067,21.062,32.666,49.068,32.666,78.857c0,29.786-11.599,57.79-32.666,78.855c-21.06,21.061-49.063,32.663-78.853,32.663
S-58.706,99.381-79.77,78.32c-21.066-21.065-32.664-49.069-32.664-78.855C-112.434-30.324-100.835-58.33-79.77-79.392z
</geometry:data>
</geometry:Path>
<geometry:Polygon stroke="{aquaStroke}" x="100" y="300">
<geometry:data>
-0.201,-108.65 24.134,-33.754 102.885,-33.754 39.174,12.535 63.509,87.431 -0.201,41.143 -63.912,87.431 -39.577,12.535 -103.287,-33.754 -24.537,-33.754
</geometry:data>
</geometry:Polygon>
<geometry:Polyline stroke="{whiteStroke}" autoClose="false" x="150" y="300">
<geometry:data>0,0 0,20 20,20 20,40 40,40 40,60</geometry:data>
</geometry:Polyline>
</degrafa:GeometryGroup3d>
<degrafa:GeometryGroup3d id="d" z="-60" y="100">
<geometry:RoundedRectangle fill="{mintcream}" stroke="{blackStroke}" width="300" height="20" cornerRadius="10"/>
</degrafa:GeometryGroup3d>
<degrafa:GeometryGroup3d id="c" z="-60">
<geometry:RoundedRectangleComplex fill="{peru}" y="-50" width="200"/>
</degrafa:GeometryGroup3d>
</degrafa:Surface>
</mx:VBox>