<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>masputih &#187; Demo</title>
	<atom:link href="http://masputih.com/category/demo/feed" rel="self" type="application/rss+xml" />
	<link>http://masputih.com</link>
	<description>Coder for Hire</description>
	<lastBuildDate>Tue, 10 Jan 2012 14:00:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Manipulasi Tekstur Collada (DAE)</title>
		<link>http://masputih.com/2009/08/manipulasi-tekstur-collada-dae</link>
		<comments>http://masputih.com/2009/08/manipulasi-tekstur-collada-dae#comments</comments>
		<pubDate>Mon, 10 Aug 2009 18:31:09 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[Away3D]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[actionscript]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=530</guid>
		<description><![CDATA[Berikut ini demo manipulasi tekstur Collada (DAE) secara dinamis pada saat runtime. DAE &#38; texture files are courtesy of Away3D team. package { import away3d.animators.SkinAnimation; import away3d.cameras.Camera3D; import away3d.containers.ObjectContainer3D; import away3d.containers.Scene3D; import away3d.containers.View3D; import away3d.core.base.Mesh; import away3d.core.base.Object3D; import away3d.core.math.Number3D; import away3d.core.utils.Cast; import away3d.loaders.Collada; import away3d.materials.BitmapMaterial; import away3d.materials.TransformBitmapMaterial; import away3d.primitives.Cube; import away3d.primitives.Plane; import br.com.stimuli.loading.BulkLoader; import br.com.stimuli.loading.BulkProgressEvent; [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Berikut ini demo manipulasi tekstur Collada (DAE) secara dinamis pada saat runtime.</p>
<div id="attachment_532" class="wp-caption aligncenter" style="width: 360px">
	<a href="http://labs.masputih.com/away3d/dae-mat/index.html"><img src="http://masputih.com/uploads/2009/08/dae-mat-demo.jpg" alt="Click to launch" title="dae-mat-demo" width="360" height="360" class="size-full wp-image-532" /></a>
	<p class="wp-caption-text">Click to launch</p>
</div>
<blockquote><p>DAE &amp; texture files are courtesy of Away3D team.</p></blockquote>
<p><span id="more-530"></span></p>
<pre class="brush:as3">package
{
	import away3d.animators.SkinAnimation;
	import away3d.cameras.Camera3D;
	import away3d.containers.ObjectContainer3D;
	import away3d.containers.Scene3D;
	import away3d.containers.View3D;
	import away3d.core.base.Mesh;
	import away3d.core.base.Object3D;
	import away3d.core.math.Number3D;
	import away3d.core.utils.Cast;
	import away3d.loaders.Collada;
	import away3d.materials.BitmapMaterial;
	import away3d.materials.TransformBitmapMaterial;
	import away3d.primitives.Cube;
	import away3d.primitives.Plane;
	import br.com.stimuli.loading.BulkLoader;
	import br.com.stimuli.loading.BulkProgressEvent;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.utils.getTimer;

	public class Main extends Sprite{

		public var daeFile:String = "mario_testrun.dae";
		public var daeTexture:String = "assets/mario_tex.jpg";
		public var floorTexture:String = "assets/floor.jpg";

		public var cam:Camera3D;
		public var scene:Scene3D;
		public var view:View3D;
		public var collada:Collada;
		public var model:ObjectContainer3D;
		public var skinAnim:SkinAnimation;
		public var mesh:Mesh;

		public var floor:Plane;

		//material variables
		public var colladaMaterial:BitmapMaterial;
		public var floorMaterial:TransformBitmapMaterial;

		//drawing pane
		public var materialSprite:Sprite;

		public var ldr:BulkLoader;

		public var loadStatus:TextField;

		public function Main() {

			loadStatus = new TextField();
			loadStatus.textColor = 0xFFFFFF;
			loadStatus.autoSize = TextFieldAutoSize.RIGHT;
			addChild(loadStatus);

			if (stage) loadAssets();
			else addEventListener(Event.ADDED_TO_STAGE, loadAssets);
		}

//----------------------------------------------------------- LOAD STUFF	

		private function loadAssets(e:Event = null):void {

			removeEventListener(Event.ADDED_TO_STAGE, loadAssets);

			ldr = new BulkLoader('assets');

			ldr.logLevel = BulkLoader.LOG_INFO;

			ldr.add(daeTexture, { id:"texture", type:BulkLoader.TYPE_IMAGE } );
			ldr.add(floorTexture, { id:"floor", type:BulkLoader.TYPE_IMAGE } );
			ldr.add(daeFile, { id:"dae", type:BulkLoader.TYPE_XML } );

			ldr.addEventListener(BulkProgressEvent.PROGRESS, handleBulkLoaderEvents);
			ldr.addEventListener(BulkProgressEvent.COMPLETE, handleBulkLoaderEvents);

			ldr.start(1);
		}

		private function handleBulkLoaderEvents(e:BulkProgressEvent):void {
			if (e.type == BulkProgressEvent.PROGRESS) {

				loadStatus.text = "loading ..." + (BulkLoader.truncateNumber(e.percentLoaded,2) * 100) +"%";

				return;
			}
			if (e.type == BulkProgressEvent.COMPLETE) {

				loadStatus.x = 200;
				loadStatus.text = "<<< draw lines with your mouse here";

				initEngine();

				initFloor(ldr.getBitmap("floor"));

				initObjects(ldr.getXML("dae"), ldr.getBitmap("texture"));

			}

		}

//----------------------------------------------------------- INIT

		private function initEngine():void {

			scene = new Scene3D();

			cam = new Camera3D();
			cam.lookAt(new Number3D(0, 0, 0));
			cam.moveUp(100);
			cam.moveBackward(400);

			view = new View3D();
			view.x = stage.stageWidth / 2;
			view.y = stage.stageHeight / 2;
			view.camera = cam;
			view.scene = scene;
			view.mouseZeroMove = true;
			addChild(view);

		}

		private function initFloor(material:Bitmap):void {

			floorMaterial = new TransformBitmapMaterial(material.bitmapData);
			floorMaterial.repeat = true;

			floor = new Plane();
			floor.width = 400;
			floor.height = 400;
			floor.material = floorMaterial;

			scene.addChild(floor);
		}

		private function initObjects(dae:XML,material:Bitmap):void {

			colladaMaterial = new BitmapMaterial(material.bitmapData);

			collada = new Collada();
			collada.scaling = 10;

			/**
			 * [1] If you do this, you can't assign a new material later on. Dunno why.
			 *
			 *   collada.material = colladaMaterial;
			 *
			 * Do [2] instead.
			 */

			model = collada.parse(dae) as ObjectContainer3D;

			//[2]
			Mesh(model.getChildByName('polySurface1')).material = colladaMaterial;

			scene.addChild(model);

			skinAnim = model.animationLibrary.getAnimation("default").animation as SkinAnimation;

			addEventListener(Event.ENTER_FRAME, render);

			initDrawingPane(material);
		}

//----------------------------------------------------------- DRAWING PANE		

		private function initDrawingPane(material:Bitmap):void {

			materialSprite = new Sprite();
			materialSprite.addChild(new Bitmap(material.bitmapData));
			materialSprite.scaleX = materialSprite.scaleY = .2;
			addChild(materialSprite);

			var drawingLayer:Sprite = new Sprite();
			drawingLayer.name = "drawingLayer";
			materialSprite.addChild(drawingLayer);

			materialSprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
		}

		private function onMouseDown(e:MouseEvent):void {

			var drawingLayer:Sprite = materialSprite.getChildByName('drawingLayer') as Sprite;
			drawingLayer.graphics.lineStyle(1, 0xFFFFFF);
			drawingLayer.graphics.moveTo(e.localX, e.localY);
			materialSprite.addEventListener(MouseEvent.MOUSE_MOVE, drawLine);
			stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
		}

		private function drawLine(e:MouseEvent):void {
			var drawingLayer:Sprite = materialSprite.getChildByName('drawingLayer') as Sprite;
			drawingLayer.graphics.lineTo(e.localX, e.localY);
		}

		private function onMouseUp(e:MouseEvent):void {
			if (materialSprite.hasEventListener(MouseEvent.MOUSE_MOVE)){
				materialSprite.removeEventListener(MouseEvent.MOUSE_MOVE, drawLine);

				var bd:BitmapData = new BitmapData(materialSprite.width, materialSprite.height);
				var mat:Matrix = new Matrix(materialSprite.scaleX, 0, 0, materialSprite.scaleY);
				bd.draw(materialSprite,mat);

				//This won't work if you assign the material to the collada instance like [1]
				Mesh(model.getChildByName('polySurface1')).material = new BitmapMaterial(bd);

			}
		}

//----------------------------------------------------------- RENDER

		private function render(e:Event):void {
			model.rotationY += 10;
			//update the collada animation
			skinAnim.update(getTimer() * 2 / 1000);
			view.render();
		}
	}
}</pre>
<div class="box dl_box">Download source : <a href="http://masputih.com/wordpress/wp-content/plugins/download-monitor/download.php?id=dae-mat.rar" title="Downloaded 1602 times">→ dae-mat.rar</a></div>
]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/08/manipulasi-tekstur-collada-dae/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Send Bitmap via Email</title>
		<link>http://masputih.com/2009/05/send-bitmap-via-email</link>
		<comments>http://masputih.com/2009/05/send-bitmap-via-email#comments</comments>
		<pubDate>Thu, 07 May 2009 14:35:49 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[Demo]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=435</guid>
		<description><![CDATA[Here’s a small application that allows you to draw and email the drawing as an attachment. Downloads Flex 3 Project Archive : PHP script : mailer.txt (right-click → Save As)]]></description>
			<content:encoded><![CDATA[<p></p><p>Here’s a small application that allows you to draw and email the drawing as an attachment.</p>
<div id="attachment_439" class="wp-caption aligncenter" style="width: 300px">
	<a href="http://labs.masputih.com/imagemailer/index.html" rel="shadowbox" title="EMail Your Drawing"><img src="http://masputih.com/uploads/2009/05/imagemailer-300x261.jpg" alt="Click to launch the application" title="imagemailer" width="300" height="261" class="size-medium wp-image-439" /></a>
	<p class="wp-caption-text">Click to launch the application</p>
</div>
<div id="attachment_440" class="wp-caption aligncenter" style="width: 300px">
	<a href="http://masputih.com/uploads/2009/05/outlook.jpg" rel="attachment wp-att-440" title="Received Email in Outlook"><img src="http://masputih.com/uploads/2009/05/outlook-300x235.jpg" alt="Received Email in Outlook" title="outlook" width="300" height="235" class="size-medium wp-image-440" /></a>
	<p class="wp-caption-text">Received Email in Outlook</p>
</div>
<h3>Downloads</h3>
<div class="box dl_box">
<ul>
<li>Flex 3 Project Archive : <a href="http://masputih.com/wordpress/wp-content/plugins/download-monitor/download.php?id=imagemailer.zip" title="Downloaded 547 times">→ ImageMailer.zip</a></li>
<li>PHP script : <a href="http://labs.masputih.com/imagemailer/mailer.txt">mailer.txt</a> (right-click → Save As) </li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/05/send-bitmap-via-email/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Peta Interaktif dengan UMap</title>
		<link>http://masputih.com/2009/04/peta-interaktif-dengan-umap</link>
		<comments>http://masputih.com/2009/04/peta-interaktif-dengan-umap#comments</comments>
		<pubDate>Wed, 29 Apr 2009 04:41:35 +0000</pubDate>
		<dc:creator>Anggie Bratadinata</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Demo]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[component]]></category>
		<category><![CDATA[map]]></category>

		<guid isPermaLink="false">http://masputih.com/?p=61</guid>
		<description><![CDATA[Demo kali ini adalah mengenai pembuatan aplikasi peta interaktif dengan menggunakan komponen gratisan dari AFComponents yaitu UMap. Di sini saya membuat aplikasi untuk menampilkan peta Pulau Jawa dan meletakkan markers di kota-kota besar (Jakarta, Surabaya, Semarang, Bandung, dan Yogya ) yang jika diklik akan menampilkan nama kota dan logonya. Peralatan UMap , tersedia versi Flash [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Demo kali ini adalah mengenai pembuatan aplikasi peta interaktif dengan menggunakan komponen gratisan dari AFComponents yaitu <a title="UMap component" href="http://www.afcomponents.com/components/umap_as3/" target="_blank">UMap</a>. Di sini saya membuat aplikasi untuk menampilkan peta Pulau Jawa dan meletakkan <em>markers</em> di kota-kota besar (Jakarta, Surabaya, Semarang, Bandung, dan Yogya ) yang jika diklik akan menampilkan nama kota dan logonya.</p>
<div class="wp-caption aligncenter" style="width: 400px">
	<a title="UMap Demo" href="http://labs.masputih.com/umap/index.html" target="_blank" rel="shadowbox"><img title="UMap Demo" src="http://labs.masputih.com/umap/umap-swf.jpg" alt="UMap Demo" width="400" height="238" /></a>
	<p class="wp-caption-text">Click to see the demo</p>
</div>
<p><span id="more-61"></span></p>
<h3>Peralatan</h3>
<ul>
<li><a title="Umap component" href="http://www.afcomponents.com/components/umap_as3/" target="_blank">UMap</a> , tersedia versi Flash (.mxp) dan Flex (.swc)</li>
<li>Flex SDK</li>
<li>FlashDevelop</li>
</ul>
<h3>Project Setup</h3>
<p>Setelah saya unduh UMap_Flex.swc, saya buat project di FlashDevelop lalu saya kopi file swc tersebut  ke dalam direktori “lib/” dan saya tambahkan file .swc itu ke dalam <em>library path</em>.</p>
<p><a href="http://masputih.com/uploads/2009/04/fdproject3.jpg"><img style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" title="fd-project" src="http://masputih.com/uploads/2009/04/fdproject-thumb2.jpg" border="0" alt="fd-project" width="173" height="260" /></a></p>
<h3>Variabel</h3>
<p>Pertama, saya buat 3 buah variabel yaitu :</p>
<ul>
<li><code>mapData</code> yaitu sumber data yang akan ditampilkan berisi nama kota, logo, dan koordinat ( dari wikipedia )</li>
<li><code>map</code>, objek UMap</li>
<li><code>initPos</code>, posisi awal map (center point)</li>
</ul>
<pre class="brush:as3">
public var map:UMap;

public var mapData:Array = [
	{kota:"Surabaya",logo:"logo/surabaya.jpg",loc:"-7.233333, 112.733333"},
	{kota:"Jakarta", logo:"logo/jakarta.jpg",loc:"-6.266667, 106.8"},
	{kota:"Bandung", logo:"logo/bandung.jpg",loc:"-6.95, 107.566667"},
	{kota:"Yogyakarta", logo:"logo/yogyakarta.jpg",loc:"-7.801389, 110.364444" },
	{kota:"Semarang",logo:"logo/semarang.jpg",loc:"-6.966667, 110.416667"}
]

//center map to semarang
public var initPos:LatLng = new LatLng( -6.966667, 110.416667);

public function Main():void {
	if (stage) init();
	else addEventListener(Event.ADDED_TO_STAGE, init);
}
</pre>
<h3>init() &amp; onReadyMap()</h3>
<p>Di dalam <code>init()</code> saya mengeset ukuran <code>stage</code>, menginstansiasi objek <code>UMap</code> dan mengeset <code>onReadyMap()</code> sebagai <em>event handler</em> untuk <code>MapEvent.READY</code>.</p>
<p><code>onReadyMap()</code> saya gunakan untuk mengeset ukuran <code>map</code>, disamakan dengan ukuran <code>stage</code>. Kemudian <em>zoom level</em>, posisi awal (<em>center</em>), dan menambahkan kontrol. Terakhir saya panggil <code>createMarkers()</code> setelah saya tambahkan map ke dalam <code>DisplayList</code>.</p>
<pre class="brush:as3">
private function init(e:Event = null):void{
	removeEventListener(Event.ADDED_TO_STAGE, init);
	// entry point

	stage.scaleMode = StageScaleMode.NO_SCALE;
	stage.stageWidth = 600;
	stage.stageHeight = 400;

	map = new UMap();
	map.addEventListener(MapEvent.READY, onReadyMap);

}

private function onReadyMap(e:MapEvent):void {

	map.setSize(stage.stageWidth, stage.stageHeight);
	map.setZoom(6);
	map.setCenter(initPos);
	map.addControl( new ZoomControl());
	map.addControl( new PositionControl());
	map.addControl( new MapTypeControl());

	addChild(map);

	createMarkers();
}
</pre>
<h3>createMarkers()</h3>
<p>Function ini adalah yang paling kompleks. Di sini saya menampilkan data dari <code>mapData</code> sebagai <em>marker</em> di atas map.</p>
<ul>
<li><code>pos</code> : variabel berisi koordinat geografis dalam bentuk desimal (<a href="http://www.answers.com/latitude">latitude</a> &amp; <a href="http://www.answers.com/longitude">longitude</a>) yang saya gunakan untuk posisi <em>marker</em></li>
<li><code>lat</code> &amp; <code>long</code> : variabel untuk menampung koordinat yang ada di setiap elemen di dalam <code>mapData</code> </li>
<li><code>infoStyle</code> : objek yang mewakili <em>content style</em> dari <em>popup panel</em> yang muncul waktu <em>marker</em> diklik. Saya gunakan untuk mengaktifkan mode <em>HTML</em>.</li>
<li><code>infoTitle</code> : teks untuk judul popup</li>
<li><code>infoString</code> : isi popup, berupa teks html</li>
</ul>
<pre class="brush:as3">
private function createMarkers():void {

	var marker:Marker;
	var pos:LatLng;
	var lat:Number;
	var long:Number;

	//info popup
	var infoTitle:String;
	var infoContent:String;
	//enable HTML content
	var infoStyle:InfoWindowStyle = new InfoWindowStyle();
	infoStyle.contentStyle.html = true;

	var i:int = mapData.length;

	while (i--) {
		lat = Number(String(mapData[i]['loc']).split(",")[0]);
		long = Number(String(mapData[i]['loc']).split(",")[1]);
		pos = new LatLng(lat, long);

		//create new marker
		marker = new Marker();
		marker.position = pos;
		marker.buttonMode = marker.useHandCursor = true;
		marker.infoStyle = infoStyle;

		infoTitle = mapData[i]['kota'];
		infoContent = "<img src='" + mapData[i]['logo'] + "'/>";

		marker.infoParam = {title:infoTitle, content:infoContent };

		map.addOverlay(marker);
	}

}
</pre>
<h3>Download</h3>
<a href="http://masputih.com/wordpress/wp-content/plugins/download-monitor/download.php?id=umap.rar" title="Downloaded 1173 times">→ UMap Demo Project File</a>
]]></content:encoded>
			<wfw:commentRss>http://masputih.com/2009/04/peta-interaktif-dengan-umap/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

