<?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>Floorplanner Tech Blog &#187; alchemy flash as3 swc triangulation</title>
	<atom:link href="http://techblog.floorplanner.com/tag/alchemy-flash-as3-swc-triangulation/feed/" rel="self" type="application/rss+xml" />
	<link>http://techblog.floorplanner.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 19 Nov 2009 04:00:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Alchemy &#8211; first looks</title>
		<link>http://techblog.floorplanner.com/2008/11/23/alchemy-first-looks/</link>
		<comments>http://techblog.floorplanner.com/2008/11/23/alchemy-first-looks/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 15:30:26 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[CAD]]></category>
		<category><![CDATA[Flash+ActionScript]]></category>
		<category><![CDATA[Floorplanner]]></category>
		<category><![CDATA[Papervision3D]]></category>
		<category><![CDATA[alchemy flash as3 swc triangulation]]></category>

		<guid isPermaLink="false">http://techblog.floorplanner.com/?p=261</guid>
		<description><![CDATA[Adobe has recently released a preview version of Alchemy. From their site:
Welcome the preview release of codename &#8220;Alchemy.&#8221; Alchemy is a research project that allows users to compile C and C++ code that is targeted to run on the open source ActionScript Virtual Machine (AVM2). The purpose of this preview is to assess the level [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F11%2F23%2Falchemy-first-looks%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftechblog.floorplanner.com%2F2008%2F11%2F23%2Falchemy-first-looks%2F" height="61" width="51" /></a></div><p>Adobe has recently released a preview version of <a href="http://labs.adobe.com/technologies/alchemy/">Alchemy</a>. From their site:</p>
<blockquote><p>Welcome the preview release of codename &#8220;Alchemy.&#8221; Alchemy is a research project that allows users to compile C and C++ code that is targeted to run on the open source ActionScript Virtual Machine (AVM2). The purpose of this preview is to assess the level of community interest in reusing existing C and C++ libraries in Web applications that run on Adobe® Flash® Player and Adobe AIR®.</p></blockquote>
<p>So, what does this mean? This means that we can use existing C/C++ code and compile that down to AS3. Initially I though that this implied a hefty increase in code execution speed, but as all is compiled down to AS3 this is <strong>not</strong> true in most cases. Code will only run faster if you &#8217;stay&#8217; on the C-side and only return to &#8216;AS3&#8242; when your C code is done processing. The reason is that AS3 method-calls are sloooow (params need to be &#8216;unboxed&#8217; etc.)! When in C this slowness doesn&#8217;t occur and hence execution speed will be faster (Adobe claims a potential speed increase by a factor 2 to 10 I beleive). Wow! That of course made me wonder whether Alchemy would be usefull for 3D engines like Papervision3D, more soon! <img src='http://techblog.floorplanner.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://www.automatastudios.com">Branden Hall</a> did a nice <a href="http://www.automatastudios.com/2008/11/21/understanding-adobe-alchemy/">writeup</a> on Alchemy explaining above better then me.</p>
<p>I couldn&#8217;t resist myself and started off immediately with something I always wanted to code for our 3D engine: <a href="http://en.wikipedia.org/wiki/Polygon_triangulation">Polygon Triangulation</a> with support for holes.</p>
<p>I installed the <a href="http://labs.adobe.com/downloads/alchemy.html">Alchemy Toolkit</a>, got the Flex 3.2 SDK and got some C code from the <a href="http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html">Department of Computer Science, UNC Chapel Hill</a>.</p>
<p>Setting up the toolkit was bit tricky, but with help from <a href="http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Getting_Started">this page</a> I finally succeeded to get my environment right (OSX). Then I hit &#8216;make&#8217; and presto! Got my swc! <a href="http://www.assembla.com/spaces/floorplanner-alchemy/documents">Download the swc and sample code</a> or <a href="http://www.assembla.com/spaces/floorplanner-alchemy/documents/agZ5W8Uxir3y-mab7jnrAJ/download/TriangulationTest.swf">view a live example</a>.</p>
<p>Some notes on swc usage:<br />
1] &#8216;outer&#8217; polygons must be defined anti-clockwise<br />
2] &#8216;inner&#8217; polygons (holes) must be defined clock-wise</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="actionscript3" style="font-family: Monaco,monospace;"><span style="color: #009900;">// import</span>
<span style="color: #0033ff; font-weight: bold;">import</span> cmodule.triangulation.CLibInit;
&nbsp;
<span style="color: #009900;">// initialize</span>
<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">loader</span><span style="color: #000000; font-weight: bold;">:</span>CLibInit = <span style="color: #0033ff; font-weight: bold;">new</span> CLibInit;
<span style="color: #6699cc; font-weight: bold;">var</span> lib<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Object</span> = <span style="color: #004993;">loader</span>.<span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #009900;">// @vertices is an array of XY-pairs: [ [], [x0, y0], [x1, y1], ...]</span>
<span style="color: #009900;">//                NOTE: @vertices[0] should always be [] </span>
<span style="color: #009900;">// @contours is an array containing the number of points of each polygon</span>
<span style="color: #009900;">//                =&gt; [4, 3, 3, 3] indicates 4 polygons with the first poly having 4 points, the second 3, etc.</span>
<span style="color: #009900;">// @ncontours is the number of polygons (in our example: 4)</span>
<span style="color: #009900;">//</span>
<span style="color: #009900;">// @return An array of indices into the vertices array in form: [ [p0, p1, p2], [p0, p1, p2], ...]</span>
<span style="color: #6699cc; font-weight: bold;">var</span> indices <span style="color: #000000; font-weight: bold;">:</span> <span style="color: #004993;">Array</span> = lib.triangulate<span style="color: #000000;">&#40;</span> vertices, contours, ncontours <span style="color: #000000;">&#41;</span>;</pre></td></tr></table></div>

<p>Here&#8217;s the relevant C code which was simply added to tri.c :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
</pre></td><td class="code"><pre class="c" style="font-family: Monaco,monospace;"><span style="color: #993333;">static</span> AS3_Val triangulate<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #339933;">*</span> self<span style="color: #339933;">,</span> AS3_Val args<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> ncontours <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> ccount<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> npoints<span style="color: #339933;">,</span> first<span style="color: #339933;">,</span> last<span style="color: #339933;">,</span> n<span style="color: #339933;">,</span> nmonpoly<span style="color: #339933;">;</span>
	<span style="color: #993333;">register</span> <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> op<span style="color: #009900;">&#91;</span>SEGSIZE<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> ntriangles<span style="color: #339933;">;</span>
	AS3_Val dataVal<span style="color: #339933;">;</span>
	AS3_Val contourVal<span style="color: #339933;">;</span>
	AS3_Val retVal<span style="color: #339933;">;</span>
	AS3_Val temp<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* initialze the AS3 values */</span>
	dataVal <span style="color: #339933;">=</span> AS3_Undefined<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	contourVal <span style="color: #339933;">=</span> AS3_Undefined<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	retVal <span style="color: #339933;">=</span> AS3_Undefined<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	temp <span style="color: #339933;">=</span> AS3_Undefined<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//parse the arguments.</span>
	AS3_ArrayValue<span style="color: #009900;">&#40;</span> args<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;AS3ValType, AS3ValType, IntType&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>dataVal<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>contourVal<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>ncontours <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//if no argument is specified</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>dataVal <span style="color: #339933;">==</span> NULL <span style="color: #339933;">||</span> contourVal <span style="color: #339933;">==</span> NULL <span style="color: #339933;">||</span> ncontours <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		AS3_Trace<span style="color: #009900;">&#40;</span> AS3_String<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Invalid input data!&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> AS3_Null<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	ccount <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>ccount <span style="color: #339933;">&lt;</span> ncontours<span style="color: #009900;">&#41;</span>
   	<span style="color: #009900;">&#123;</span>
		<span style="color: #993333;">int</span> j<span style="color: #339933;">;</span>
		<span style="color: #993333;">int</span> k<span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;">//fscanf(infile, &quot;%d&quot;, &amp;npoints);</span>
&nbsp;
		npoints <span style="color: #339933;">=</span> AS3_IntValue<span style="color: #009900;">&#40;</span> AS3_Get<span style="color: #009900;">&#40;</span>contourVal<span style="color: #339933;">,</span> AS3_Int<span style="color: #009900;">&#40;</span>ccount<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		first <span style="color: #339933;">=</span> i<span style="color: #339933;">;</span>
		last <span style="color: #339933;">=</span> first <span style="color: #339933;">+</span> npoints <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>j <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> k <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> npoints<span style="color: #339933;">;</span> j<span style="color: #339933;">++,</span> i<span style="color: #339933;">++,</span> k <span style="color: #339933;">+=</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">//fscanf(infile, &quot;%lf%lf&quot;, &amp;seg[i].v0.x, &amp;seg[i].v0.y);</span>
			temp <span style="color: #339933;">=</span> AS3_Get<span style="color: #009900;">&#40;</span>dataVal<span style="color: #339933;">,</span> AS3_Int<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">v0</span>.<span style="color: #202020;">x</span> <span style="color: #339933;">=</span> AS3_NumberValue<span style="color: #009900;">&#40;</span> AS3_Get<span style="color: #009900;">&#40;</span>temp<span style="color: #339933;">,</span> AS3_Int<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">v0</span>.<span style="color: #202020;">y</span> <span style="color: #339933;">=</span> AS3_NumberValue<span style="color: #009900;">&#40;</span> AS3_Get<span style="color: #009900;">&#40;</span>temp<span style="color: #339933;">,</span> AS3_Int<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">==</span> last<span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">next</span> <span style="color: #339933;">=</span> first<span style="color: #339933;">;</span>
				seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">prev</span> <span style="color: #339933;">=</span> i<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
				seg<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">v1</span> <span style="color: #339933;">=</span> seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">v0</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">==</span> first<span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">next</span> <span style="color: #339933;">=</span> i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
				seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">prev</span> <span style="color: #339933;">=</span> last<span style="color: #339933;">;</span>
				seg<span style="color: #009900;">&#91;</span>last<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">v1</span> <span style="color: #339933;">=</span> seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">v0</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #b1b100;">else</span>
			<span style="color: #009900;">&#123;</span>
				seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">prev</span> <span style="color: #339933;">=</span> i<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
				seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">next</span> <span style="color: #339933;">=</span> i<span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
				seg<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">v1</span> <span style="color: #339933;">=</span> seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">v0</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			seg<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">is_inserted</span> <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		ccount<span style="color: #339933;">++;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	n <span style="color: #339933;">=</span> i <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	initialise<span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	construct_trapezoids<span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	nmonpoly <span style="color: #339933;">=</span> monotonate_trapezoids<span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	ntriangles <span style="color: #339933;">=</span> triangulate_monotone_polygons<span style="color: #009900;">&#40;</span>n<span style="color: #339933;">,</span> nmonpoly<span style="color: #339933;">,</span> op<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	retVal <span style="color: #339933;">=</span> AS3_Array<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;AS3ValType&quot;</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> ntriangles<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
   	<span style="color: #009900;">&#123;</span>
		AS3_Val data <span style="color: #339933;">=</span> AS3_Array<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;IntType, IntType, IntType&quot;</span><span style="color: #339933;">,</span> op<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> op<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> op<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		AS3_Set<span style="color: #009900;">&#40;</span>retVal<span style="color: #339933;">,</span> AS3_Int<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> retVal<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//entry point for code</span>
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//define the methods exposed to ActionScript</span>
	<span style="color: #666666; font-style: italic;">//typed as an ActionScript Function instance</span>
	AS3_Val echoMethod <span style="color: #339933;">=</span> AS3_Function<span style="color: #009900;">&#40;</span> NULL<span style="color: #339933;">,</span> echo <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	AS3_Val triMethod <span style="color: #339933;">=</span> AS3_Function<span style="color: #009900;">&#40;</span> NULL<span style="color: #339933;">,</span> triangulate <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// construct an object that holds references to the functions</span>
	AS3_Val result <span style="color: #339933;">=</span> AS3_Object<span style="color: #009900;">&#40;</span> <span style="color: #ff0000;">&quot;echo: AS3ValType&quot;</span><span style="color: #339933;">,</span> echoMethod <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	AS3_SetS<span style="color: #009900;">&#40;</span>result<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;triangulate&quot;</span><span style="color: #339933;">,</span> triMethod<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// Release</span>
	AS3_Release<span style="color: #009900;">&#40;</span> echoMethod <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	AS3_Release<span style="color: #009900;">&#40;</span> triMethod <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// notify that we initialized -- THIS DOES NOT RETURN!</span>
	AS3_LibInit<span style="color: #009900;">&#40;</span> result <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// should never get here!</span>
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://techblog.floorplanner.com/2008/11/23/alchemy-first-looks/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
