Create first application

TWaver 3D For Flex(English)

Create a New Project

Follow the step, File -> New -> Flex Project to create a new project:HelloTWaver3D. Put TWaver.swc and TWaver3D.swc file in libs directory. Flex Builder4.5 will add all *.swc files under libs directory to compile class library automatically.

Add TWaver.swc to build path

Add TWaver.swc and TWaver3D.swc to build path as below, and users can add other library files or use other Flex SDK versions.

Setup Flex SDK and Debug Flash Player

References:

http://www.adobe.com/products/flex/

http://www.adobe.com/support/flashplayer/downloads.html

Create first application

RoomView.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="100%"
height="100%" xmlns:demo="demo.*" >
<demo:RoomView  width="100%"
height="100%">

</demo:RoomView>

</s:Application>
RoomView.as
package demo
{
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.geom.Vector3D;

	import mx.controls.Alert;

	import spark.components.Group;

	import twaver.*;
	import twaver.threed.*;
	import twaver.threed.event.Mouse3DEvent;
	import twaver.threed.network.Network3D;
	import twaver.threed.util.Consts3D;
	import twaver.threed.util.Style3D;
	import twaver.threed.util.Util3D;

	public class RoomView extends Group
	{
		private var box:ElementBox=new ElementBox();
		private var network3d:Network3D;

		public function RoomView()
		{
			super();
			Images.init();
			Util3D.registVector3D();
		}

		override protected function createChildren():void
		{
			super.createChildren();
			network3d=new Network3D(box);
			initData();
			initAlarm();
			network3d.showAxises();
			network3d.applyHoverCamera(-180, 5, 8, 1600);
			network3d.tiltAngleLowLimit=-80;
			network3d.tiltAngleUpLimit=80
			network3d.percentWidth=100;
			network3d.percentHeight=100;

			this.addElement(network3d);
			DemoUtil.initNetwork3DContextMenu(network3d);
		}

		private function initData():void
		{
			initRoom();
			initRack();
		}

		private function initAlarm():void
		{
			var e:IElement=box.getElementByID("0:1");
			var alarm:Alarm=new Alarm(null, e.id, AlarmSeverity.CRITICAL);
			box.alarmBox.add(alarm);
			e=box.getElementByID("2:2");
			alarm=new Alarm(null, e.id, AlarmSeverity.MAJOR);
			box.alarmBox.add(alarm);
			e=box.getElementByID("1:0");
			e.setStyle(Style3D.MATERIAL_COLOR,0x00ff00);
		}

		private function initRack():void
		{
			var xgap:Number=size / 4;
			var ygap:Number=size / 4;
			var startX:Number=-xgap;
			var starty:Number=-ygap;
			for (var i:int=0; i < 3; i++)
			{
				for (var j:int=0; j < 3; j++)
				{
					box.add(createRack(i + ":" + j, startX + i * xgap, starty + j * xgap));
				}
			}
		}

		/**
		 *
		 * @param x centerX
		 * @param z centerZ
		 */
		private function createRack(id:String, x:Number, z:Number):IElement
		{
			var element:IElement=new Element(id);
			element.setStyle(Style3D.MAPPINGTYPE, Consts3D.MAPPINGTYPE_MAP6);
			element.setStyle(Style3D.MAPPING_COMMON_PATH, "rackDImage1");
			element.setStyle(Style3D.PROPERTY_SIZE, new Vector3D(80, 150, 80));
			element.setStyle(Style3D.PROPERTY_SPACE_LOCATION, new Vector3D(x, 150 / 2 + 10, z));
			return element;
		}

		private function initRoom():void
		{
			buildWalls();
			buildFloor();
		}
		private var size:Number=800;

		private function buildWalls():void
		{
			box.add(createWall(0, size / 2, size, 0));
			box.add(createWall(0, -size / 2, size, 0));
			box.add(createWall(-size / 2, 0, size, 90));
			box.add(createWall(size / 2, 0, size, 90));
		}

		private function buildFloor():void
		{
			var element:IElement=new Element();
			element.setStyle(Style3D.MAPPINGTYPE, Consts3D.MAPPINGTYPE_COMMON);
			element.setStyle(Style3D.THREED_SHAPE_TYPE, Consts3D.THREED_SHAPE_TYPE_PLANE);
			element.setStyle(Style3D.BOTH_SIDES_VISIBLE, true);
			element.setStyle(Style3D.PROPERTY_SMOOTH_LEVEL, Consts3D.SMOOTH_LEVEL_GREAT);
			element.setStyle(Style3D.WITH_TILED_MATERIAL, true);
			element.setStyle(Style3D.PLANE_MATERIAL, "floor");
			element.setStyle(Style3D.PROPERTY_SPACE_LOCATION, new Vector3D(0, 0, 0));
			element.setStyle(Style3D.PROPERTY_SIZE, new Vector3D(size + 10, 0, size + 10));
			box.add(element);
		}




		/**
		 *          ____________
		 *          |     z    |
		 *          |          |
		 *          |     .   x|
		 *          |   (0,0)  |
		 *          |          |
		 *          ------------
		 **/
		private function createWall(x:Number, z:Number, width:Number, angle:Number=0):IElement
		{
			var wall:IElement=new Element();
			wall.setStyle(Style3D.MATERIAL_COLOR, 0XCCCCCC);
			wall.setStyle(Style3D.THREED_SHAPE_TYPE, Consts3D.THREED_SHAPE_TYPE_ROUNDEDCUBE);
			wall.setStyle(Style3D.MAPPINGTYPE, Consts3D.MAPPINGTYPE_COLOR);
			wall.setStyle(Style3D.MATERIAL_ALPHA, 0.8);

			wall.setStyle(Style3D.SELECTED_EFFECT_COLOR, 0x00ff00);
			wall.setStyle(Style3D.ZORDERING_PUSHBACK, true);

			wall.setStyle(Style3D.PROPERTY_SIZE, new Vector3D(width, 200, 20));
			wall.setStyle(Style3D.PROPERTY_SPACE_LOCATION, new Vector3D(x, 200 / 2, z));
			wall.setStyle(Style3D.PROPERTY_ROT_ANGLE, new Vector3D(0, angle, 0));
			return wall;
		}


	}
}

Displays below:

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.