<?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>LMNts</title>
	<atom:link href="http://lmnts.lmnarchitects.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://lmnts.lmnarchitects.com</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 18:46:37 +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>Wandering the Garden of Technology at the SAM</title>
		<link>http://lmnts.lmnarchitects.com/news/discussion-at-the-sam/</link>
		<comments>http://lmnts.lmnarchitects.com/news/discussion-at-the-sam/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 23:17:04 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=1085</guid>
		<description><![CDATA[ARCADE and SAM are hosting an event on May 10 at the SAM where Pierluigi Serraino and John Marx will discuss their recently published book, Wandering the Garden of Technology and Passion.  Scott has been invited to be part of the discussion panel following the presentation.  More details located here.]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://images.betterworldbooks.com/189/Wandering-the-Garden-of-Technology-and-Passion-Serraino-Pierluigi-9781890449568.jpg" alt="" width="190" height="200" /></p>
<p><a href="http://arcadenw.org/">ARCADE</a> and <a href="http://www.seattleartmuseum.org/">SAM</a> are hosting an event on May 10 at the SAM where <a href="http://www.pierluigiserraino.com/">Pierluigi Serraino</a> and <a href="http://www.form4inc.com/">John Marx</a> will discuss their recently published book, <em><a href="http://www.papress.com/html/book.details.page.tpl?isbn=9781890449568">Wandering the Garden of Technology and Passion</a>.  </em>Scott has been invited to be part of the discussion panel following the presentation.  More details located <a href="http://www.brownpapertickets.com/event/242806">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/discussion-at-the-sam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TCPA &#8211; Modeling of the Veil</title>
		<link>http://lmnts.lmnarchitects.com/fabrication/tcpa-veil/</link>
		<comments>http://lmnts.lmnarchitects.com/fabrication/tcpa-veil/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 10:53:53 +0000</pubDate>
		<dc:creator>scrawford</dc:creator>
				<category><![CDATA[BIM]]></category>
		<category><![CDATA[Fabrication]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Parametrics]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Grasshopper]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[Patterning]]></category>
		<category><![CDATA[Rhino]]></category>
		<category><![CDATA[Tobin Center]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=877</guid>
		<description><![CDATA[LMN's transformation of the San Antonio Public Auditorium into the Tobin Center for the Performing Arts required the old theater and stage house to be removed and replaced with a contemporary theater and back-of-house areas.  The concept for cladding this addition was to wrap all of the new construction in what appeared to be a simple, delicate surface whose appearance would constantly change in different lighting conditions.  

While the concept was simple, the actual system was fairly complex.  Luckily, even though the system was complex it was not complicated.  Here's what we did...]]></description>
			<content:encoded><![CDATA[<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-concept.jpg" rel="shadowbox[sbpost-877];player=img;"><img class="alignright size-medium wp-image-934" title="veil-concept" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-concept-165x300.jpg" alt="" width="165" height="300" /></a><span>LMN&#8217;s transformation of the San Antonio Public Auditorium into the Tobin Center for the Performing Arts required the old theater and stage house to be removed and replaced with a contemporary theater and back-of-house areas.  The concept for cladding this addition was to wrap all of the new construction in what appeared to be a simple, delicate surface whose appearance would constantly change in different lighting conditions.  </span>The design team referred to this piece of the building as the Veil.  While the concept was simple, the actual system was fairly complex.  There are over 18,000 panels, with 8 unique panel types occurring in various patterns.  Luckily, even though the system was complex it was not complicated.</p>
<p><span>Parametric modeling was not used during the design of the Veil, but the modeling work-flow was like a mental parametric model where the critical parameters and logic of the system were held in the minds of a few individuals instead of a Grasshopper definition.  The designer developing the study models for the Veil was very rigorous in forming the logic of the system and was capable of producing a large number of studies by continuously modifying or remodeling the Veil using linear arrays.  <span>LMNts</span> was asked to help develop a Building Information Model that could be used by the contractor to do more detailed quantity takeoffs as well as address a few issues that proved difficult to solve through the direct modeling process.</span></p>
<p><span id="more-877"></span></p>
<p>There are a number of similarities between the layout of this system of panels and the way that we developed the <a title="Med Mart 1: Generation of Facade Geometry" href="http://lmnts.lmnarchitects.com/featured/mm-geometry/">base geometry for the Cleveland Medical Mart</a>.  Both approaches begin with a shell model that is broken down into a grid according to the width and height module of the base unit panel.  An issue that often arises with modular systems is what happens when the dimensions of a face aren&#8217;t a multiple of the module.  For example, the north and south elevations of the Medical Mart were 195&#8242; wide and we were using a 10&#8242; module.  This left us with a difference of 5&#8242; to the closest module multiples of 190&#8242; and 200&#8242;.  The difference was taken up in uniquely sized corner panels, a piece of the facade that was going to be unique no matter what.</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-panelTypes.jpg" rel="shadowbox[sbpost-877];player=img;"><img class="alignleft size-large wp-image-930" title="veil-panelTypes" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-panelTypes-1024x276.jpg" alt="" width="1024" height="276" /></a></p>
<p>The Veil is not a water tight enclosure so the layout flexibility of the system was taken up in the gap between panels which could range from 0.25&#8243; to 0.50&#8243;.  This was originally causing problems in the direct modeling approach because even slight changes to the base geometry required the panel spacing to be recalculated for each face.  Once we had the Veil modeled in Grasshopper it was possible to calculate the number panels that needed to occur on each course and then adjust the gap to be within the acceptable range.  Adjusting the gap size also afforded us more flexibility when trying to align the panels with openings and structure.</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-panels.jpg" rel="shadowbox[sbpost-877];player=img;"><img class="alignleft size-large wp-image-935" title="veil-panels" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-panels-1024x546.jpg" alt="" width="1024" height="546" /></a></p>
<p>The design team had established a variety of panel types and organization patterns for how the panels were arrayed across the building.  Here again there was a series of rules that the patterns were following, making it fairly straightforward to replicate the design.  The challenge with parametric modeling process is incorporating exceptions to rule.  For every exception there needs to be a system of logic defined to always pull out the exception and handle it accordingly.  These exceptions end up carrying over into the fabrication and construction process as well.  The more exceptions, the more room for potential errors to occur.</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-upperpattern.jpg" rel="shadowbox[sbpost-877];player=img;"><img class="alignleft size-large wp-image-933" title="veil-upperpattern" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-upperpattern-1024x397.jpg" alt="" width="1024" height="397" /></a></p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-lowerpattern.jpg" rel="shadowbox[sbpost-877];player=img;"><img class="alignleft size-large wp-image-927" title="veil-lowerpattern" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/veil-lowerpattern-1024x345.jpg" alt="" width="1024" height="345" /></a></p>
<p>&nbsp;</p>
<p><span>In the above image, there are a series of trapezoidal panels that occur along the top edge of the Veil. Each of these panels are unique and there are over 1300 of them.  The current fabrication plan for the project is to field cut full-size panels.  We&#8217;ve digitally modeled every one of those panels so there&#8217;s the potential that shop drawings could be provided for all of them.  To demonstrate this potential we put together a work-flow that writes to a spreadsheet the left and right edge height for each panel and these values are then used as a Design Table for an <span>Autodesk</span> Inventor sheet metal file.  We don&#8217;t often use Inventor but fabricators do so we thought the fabricator building the Veil might be interested in this information.  </span></p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/02/GH-Excel-Inventor.jpg" rel="shadowbox[sbpost-877];player=img;"><img class="alignleft size-large wp-image-1077" title="GH-Excel-Inventor" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/02/GH-Excel-Inventor-1024x571.jpg" alt="" width="1024" height="571" /></a></p>
<p>Turns out we were wrong for a few reasons.  They were intrigued that we could provide them with that information, but at that time the fabricator was only responsible for installing the panels and another contractor was responsible for installation.  Therefore, the time investment in machine code setup, tagging and crating the 1300+ panels had no payoff for them.  From our point of view, shop cutting the panels seemed like it would offer more control and likely a better end product.  The increased setup time and effort involved with tracking the unique panels could potentially be offset through material and labor savings.</p>
<p>In the end, means and methods are not within our scope of responsibilities and we&#8217;re not responsible for selecting who builds what on the project so there are limits to how much we can influence the decision this time.  However, more and more we are developing models that contain a significant amount of information that could be useful in the fabrication process and we&#8217;re looking for opportunities to share that information rather than simply handing over 2D drawings and asking someone to take their best shot.  We&#8217;re now trying to make our consultants and collaborators more aware of the control we have over our models and the information we can extract from them with the hope that someone will take full advantage of this information.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/fabrication/tcpa-veil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Advancing a Data-Driven Approach to Architecture</title>
		<link>http://lmnts.lmnarchitects.com/news/data-driven-design/</link>
		<comments>http://lmnts.lmnarchitects.com/news/data-driven-design/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 23:02:28 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design Technology]]></category>
		<category><![CDATA[Still Life]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=1072</guid>
		<description><![CDATA[LMNts’ most recent blog post for Metropolis Magazine’s POV blog has been published.  Sam Miller, a partner at LMN, shares his thoughts on Advancing a Data-Driven Approach to Design.  Be sure to also checkout Architectural Storytelling vs Public Relations, Cabinet of Curiosities, Confessions of a Design Technology Evangelical and Re-Upping on Design Technology if you haven’t already.]]></description>
			<content:encoded><![CDATA[<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/04/Sams-Post.jpg" rel="shadowbox[sbpost-1072];player=img;"><img class="alignleft size-large wp-image-1074" title="Sams-Post" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/04/Sams-Post-1024x682.jpg" alt="" width="1024" height="682" /></a></p>
<p>LMNts’ most recent blog post for <a href="http://www.metropolismag.com/pov/">Metropolis Magazine’s POV blog</a> has been published.  Sam Miller, a partner at LMN, shares his thoughts on <a href="http://www.metropolismag.com/pov/20120410/advancing-a-data-driven-approach-to-architecture">Advancing a Data-Driven Approach to Design</a>.  Be sure to also checkout <a href="http://www.metropolismag.com/pov/20120228/architectural-storytelling-vs-public-relations">Architectural Storytelling vs Public Relations</a>, <a href="http://www.metropolismag.com/pov/20120115/cabinet-of-curiosities#more-22566">Cabinet of Curiosities</a>, <a title="Field Notes on Metropolis" href="http://www.metropolismag.com/pov/20111204/field-notes">Confessions of a Design Technology Evangelical</a> and <a href="http://www.metropolismag.com/pov/20111103/re-upping-on-design-technology">Re-Upping on Design Technology</a> if you haven’t already.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/data-driven-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rorschach Shadow Diagram</title>
		<link>http://lmnts.lmnarchitects.com/featured/rorschach-shadow-diagram/</link>
		<comments>http://lmnts.lmnarchitects.com/featured/rorschach-shadow-diagram/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 18:45:39 +0000</pubDate>
		<dc:creator>ekatzenstein</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Parametrics]]></category>
		<category><![CDATA[Simulation]]></category>
		<category><![CDATA[Visualization]]></category>
		<category><![CDATA[Grasshopper]]></category>
		<category><![CDATA[Lighting]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=1050</guid>
		<description><![CDATA[We’re developing a set of Grasshopper user objects to generate sun study diagrams using the DIVA sun vector component.  This post focuses on the overshadowing diagram, a powerful metric which offers comprehensive analysis for point of interest shading (more info). The diagram can be used for early site studies to consider shading based on existing context. It also demonstrates the impact of vegetative shading strategies, particularly in deciduous climates (during the winter, leafless trees will allow light to enter the building for warmth; during the summer, the regrown leaves will shade the building to ease the load on cooling systems).]]></description>
			<content:encoded><![CDATA[<p>We’re developing a set of Grasshopper user objects to generate sun study diagrams using the <a href="http://diva4rhino.com/" target="_blank">DIVA </a>sun vector component.  This post focuses on the overshadowing diagram, a powerful metric which offers comprehensive analysis for point of interest shading (<a title="moreinfo" href="http://wiki.naturalfrequency.com/wiki/Sun-Path/Overshadowing" target="_blank">more info</a>). The diagram can be used for early site studies to consider shading based on existing context. It also demonstrates the impact of vegetative shading strategies, particularly in deciduous climates (during the winter, leafless trees will allow light to enter the building for warmth; during the summer, the regrown leaves will shade the building to ease the load on cooling systems).</p>
<div id="attachment_1065" class="wp-caption alignnone" style="width: 610px"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/04/CombinedDiagrams00.jpg" rel="shadowbox[sbpost-1050];player=img;"><img class="size-large wp-image-1065" title="CombinedDiagrams00" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/04/CombinedDiagrams00-1024x543.jpg" alt="" width="1024" height="543" /></a><p class="wp-caption-text">October 3, 8AM: The two diagrams show the same result for this time period.</p></div>
<p>The way the overshadowing diagram works can be shown in the images above. On the left, we are in shade because of the immediate shadows cast (<em>we </em>are the red dot in the center). On the right, we are in shade because the sun is contained in an overshadowed area.</p>
<p>The basic overshadowing diagram is effective for point based shadow studies, but not very intuitive. It’s difficult to understand and hard to explain to others. While generated three dimensionally, it must be studied in plan, and those unfamiliar with it often visualize the surfaces as a representation of literal building shadows rather than the abstraction of a shadow range. In short, the diagram is presented radially but wants to be interpreted linearly.</p>
<p><span id="more-1050"></span></p>
<p><script type='text/javascript' src='http://content.bitsontherun.com/players/v6B9G9FO-Cj8XUjwC.js?exp=1337258234&sig=265a595723845d646eb9c33567b5e94a'></script></p>
<p>To remedy this, the Rorschach Shadow diagram translates the overshadowing diagram into a basic bar graph. Rather than just overlaying a sun path diagram onto an overshadowing diagram, the Rorschach considers the hybrid of these two metrics. To generate this, sun path curves are projected onto the overshadowing diagram. The curves are then split between areas of shade and areas of sunlight. These curves are unrolled to create a bar graph showing black and white representations of shade and sunlight. The user can then control period of time to study (seasonal, monthly, weekly, daily, etc.). Other parameters can be controlled at the same time. For example, a deciduous tree’s <em>transparency </em>can be flexed parametrically in accordance with the day of the year.</p>
<div id="attachment_1061" class="wp-caption aligncenter" style="width: 310px"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/04/Rorschach_blot_07.jpg" rel="shadowbox[sbpost-1050];player=img;"><img class="size-medium wp-image-1061" title="Rorschach_blot_07" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/04/Rorschach_blot_07-300x208.jpg" alt="" width="300" height="208" /></a><p class="wp-caption-text">The original Rorschach test. What do <strong>you </strong>see?</p></div>
<p>By splitting our sun paths between areas of shade and sunlight, we are also able to quantify the percentage of daylight hours that a point of interest is in the sun. This allows us to compare multiple points on our site to determine areas of maximum and minimum shading. The Rorschach metric enables us to analyze the content of the overshadowing diagram while preserving the legibility of a bar graph.</p>
<div id="attachment_1071" class="wp-caption alignnone" style="width: 610px"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/04/RDA.jpg" rel="shadowbox[sbpost-1050];player=img;"><img src="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/04/RDA-844x1024.jpg" alt="" title="RDA" width="844" height="1024" class="size-large wp-image-1071" /></a><p class="wp-caption-text">The Rorschach diagram at contrasting latitudes shows different results for the same overshadowing diagram.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/featured/rorschach-shadow-diagram/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tobin Center for the Performing Arts &#8211; Introduction</title>
		<link>http://lmnts.lmnarchitects.com/fabrication/tcpa-intro/</link>
		<comments>http://lmnts.lmnarchitects.com/fabrication/tcpa-intro/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 19:23:46 +0000</pubDate>
		<dc:creator>scrawford</dc:creator>
				<category><![CDATA[BIM]]></category>
		<category><![CDATA[Fabrication]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Parametrics]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Grasshopper]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[Patterning]]></category>
		<category><![CDATA[Rhino]]></category>
		<category><![CDATA[Tobin Center]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=880</guid>
		<description><![CDATA[Since 2009, LMN has been working on the design of the Tobin Center for the Performing Arts (previously San Antonio's Municipal Auditorium), which is getting ready to move into construction.  In the coming weeks we'll be publishing a series of posts unpacking some of the pieces of the project that LMNts was involved with.  This introduction post will provide some information about the project's background and context.]]></description>
			<content:encoded><![CDATA[<p>Since 2009, LMN has been working on the design of the 1,750 seat Tobin Center for the Performing Arts (previously San Antonio&#8217;s Municipal Auditorium), which is currently under construction.  In the coming weeks we&#8217;ll be publishing a series of posts unpacking some of the pieces of the project that LMNts was involved in, similar to our posts on the Cleveland Medical Mart (<a title="Med Mart: Introduction" href="http://lmnts.lmnarchitects.com/featured/mm-intro/">intro</a>, <a title="Med Mart 1: Generation of Facade Geometry" href="http://lmnts.lmnarchitects.com/parametrics/mm-geometry/">1</a>, <a title="Med Mart 2: Panel Texture and Geometry" href="http://lmnts.lmnarchitects.com/parametrics/mm-panels/">2</a>, <a title="Med Mart 3: Daylighting the Atrium" href="http://lmnts.lmnarchitects.com/simulation/mm-atriumdaylight/">3</a>, <a title="Med Mart 4: Facade Design Coordination" href="http://lmnts.lmnarchitects.com/parametrics/mm-documentation/">4</a>, <a title="Med Mart 5: Panel Fabrication" href="http://lmnts.lmnarchitects.com/fabrication/mm-fabrication/">5</a>). Alright, now for some context&#8230;</p>
<p>Nearly 100 years ago when San Antonio&#8217;s Municipal Auditorium was first built, it was among the city&#8217;s first major civic structures.  Over the last century, the city has experienced a significant evolution – both in terms of urban development and the cultural arts. The city recognized the need to respond to that evolution with a new performing arts center that is evocative of its new urban condition and community significance.</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-siteplan.jpg" rel="shadowbox[sbpost-880];player=img;"><img class="alignleft size-medium wp-image-906" title="TCPA-siteplan" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-siteplan-300x300.jpg" alt="" width="185" height="185" /></a><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-siteplan2.jpg" rel="shadowbox[sbpost-880];player=img;"><img class="alignleft size-medium wp-image-907" title="TCPA-siteplan2" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-siteplan2-291x300.jpg" alt="" width="179" height="185" /></a><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-siteplan.jpg" rel="shadowbox[sbpost-880];player=img;"></a><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-program-concept.jpg" rel="shadowbox[sbpost-880];player=img;"><img class="alignleft size-medium wp-image-905" title="TCPA-program-concept" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-program-concept-300x300.jpg" alt="" width="185" height="185" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The city’s goals for the Tobin Center for the Performing Arts is to create a world-class home for the major performing arts organizations of San Antonio, and establishes the center as a vital part of the cultural life of San Antonio, Bexar County and all of South Texas.  The design integrates two new performance spaces with portions of the historic Municipal Auditorium to create a new center serving the symphony, opera, ballet and a rich diversity of theatrical programs.</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-exterior-riverwalk.jpg" rel="shadowbox[sbpost-880];player=img;"><img class="alignleft size-medium wp-image-912" title="TCPA-exterior-riverwalk" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-exterior-riverwalk-300x187.jpg" alt="" width="282" height="175" /></a><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-exterior-riverwalk2.jpg" rel="shadowbox[sbpost-880];player=img;"><img class="alignleft size-medium wp-image-913" title="TCPA-exterior-riverwalk2" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-exterior-riverwalk2-300x187.jpg" alt="" width="282" height="175" /></a><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/10/TCPA-exterior-riverwalk.jpg" rel="shadowbox[sbpost-880];player=img;"></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span id="more-880"></span>A design concept was to create moments in the building that reflected the patterns and spectacle that can be found throughout the city, the riverwalk, festivals and regional culture.  Of particular interest was how these patterns could be made more dynamic through the use of lighting, either natural or artificial.  Our future posts will focus on the Veil (shown above) which forms the exterior cladding of LMN&#8217;s addition, and the North Wall that serves as the theater’s face to the lobby (shown below on the left).</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/TCPA-lobby.jpg" rel="shadowbox[sbpost-880];player=img;"><img class="alignleft size-large wp-image-958" title="TCPA-lobby" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/11/TCPA-lobby-1024x451.jpg" alt="" width="1024" height="451" /></a></p>
<p>Parts of the posts will build off of ideas and processes we developed while working on the <a href="http://lmnts.lmnarchitects.com/featured/mm-intro/">Cleveland Medical Mart</a>. However, we plan on sharing our experiences with a few new problems that we&#8217;d hadn&#8217;t dealt with before such as management of a very large number of components (18,000+ in the Veil) and the rationalization of a doubly curved surface. More to come&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/fabrication/tcpa-intro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Architectural Storytelling vs. Public Relations</title>
		<link>http://lmnts.lmnarchitects.com/news/storytelling/</link>
		<comments>http://lmnts.lmnarchitects.com/news/storytelling/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 18:03:59 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design Technology]]></category>
		<category><![CDATA[Still Life]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=1028</guid>
		<description><![CDATA[LMNts’ fourth blog post is up on Metropolis Magazine’s POV blog where Adrian MacDonald of our Marketing department shares his thoughts on Architectural Storytelling vs. Public Relations.  The three previous posts include Cabinet of Curiosities, Confessions of a Design Technology Evangelical and Re-Upping on Design Technology.]]></description>
			<content:encoded><![CDATA[<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/02/final-draft-copy-600px-535x298.jpg" rel="shadowbox[sbpost-1028];player=img;"><img class="alignleft size-full wp-image-1029" title="final-draft-copy-600px-535x298" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/02/final-draft-copy-600px-535x298.jpg" alt="" width="535" height="298" /></a></p>
<p>LMNts’ fourth blog post is up on <a href="http://www.metropolismag.com/pov/">Metropolis Magazine’s POV blog</a> where Adrian MacDonald of our Marketing department shares his thoughts on <a href="http://www.metropolismag.com/pov/20120228/architectural-storytelling-vs-public-relations">Architectural Storytelling vs. Public Relations</a>.  The three previous posts include <a href="http://www.metropolismag.com/pov/20120115/cabinet-of-curiosities#more-22566">Cabinet of Curiosities</a>, <a title="Field Notes on Metropolis" href="http://www.metropolismag.com/pov/20111204/field-notes">Confessions of a Design Technology Evangelical</a> and <a href="http://www.metropolismag.com/pov/20111103/re-upping-on-design-technology">Re-Upping on Design Technology</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/storytelling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cabinet of Curiosities</title>
		<link>http://lmnts.lmnarchitects.com/news/cabinet-of-curiosities/</link>
		<comments>http://lmnts.lmnarchitects.com/news/cabinet-of-curiosities/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 18:04:54 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design Technology]]></category>
		<category><![CDATA[Still Life]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=1017</guid>
		<description><![CDATA[LMNts&#8217; third blog post and image are up on Metropolis Magazine&#8217;s POV blog where Scott Crawford shares his thoughts on a design technology Cabinet of Curiosities.  Be sure to also checkout Confessions of a Design Technology Evangelical and Re-Upping on Design Technology if you haven&#8217;t already.]]></description>
			<content:encoded><![CDATA[<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/01/CabinetofCuriosities.jpg" rel="shadowbox[sbpost-1017];player=img;"><img class="alignleft size-large wp-image-1018" title="CabinetofCuriosities" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2012/01/CabinetofCuriosities-1024x682.jpg" alt="" width="1024" height="682" /></a></p>
<p>LMNts&#8217; third blog post and image are up on <a href="http://www.metropolismag.com/pov/">Metropolis Magazine&#8217;s POV blog</a> where <a href="http://lmnts.lmnarchitects.com/author/scrawford/">Scott Crawford</a> shares his thoughts on a design technology <a href="http://www.metropolismag.com/pov/20120115/cabinet-of-curiosities#more-22566">Cabinet of Curiosities</a>.  Be sure to also checkout <a title="Field Notes on Metropolis" href="http://www.metropolismag.com/pov/20111204/field-notes">Confessions of a Design Technology Evangelical</a> and <a href="http://www.metropolismag.com/pov/20111103/re-upping-on-design-technology">Re-Upping on Design Technology</a> if you haven&#8217;t already.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/cabinet-of-curiosities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grasshopper Canvas with Kinect Interaction: Part 3</title>
		<link>http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3/</link>
		<comments>http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:26:19 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[Interaction]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Grasshopper]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=986</guid>
		<description><![CDATA[This post - part of a series of 3 posts on the Kinect Multitouch Interaction - is a detailed technical walkthrough of the code we implemented to support touch from depth.  The downloadable code that this post refers to is in Part 2 in the series.  This post is meant to serve as a foundational primer for the major modules of the code that build up the touch-from-depth interaction.]]></description>
			<content:encoded><![CDATA[<p>As we mentioned in the <a title="Grasshopper Canvas with Kinect Interaction: Part 2" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-2">previous post</a>, a complete code walk-through for the Kinect SDK is beyond the scope of this blog post.   Microsoft has <a title="Microsoft Kinect for PC SDK Quickstarts" href="http://channel9.msdn.com/Series/KinectSDKQuickstarts">some great documentation and support for getting up and running with the SDK</a>.  That said, let&#8217;s cover the main event loop for the TouchGestures source code we are providing on top of Microsoft&#8217;s code&#8230;</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Kinect-Multitouch-MissionMode-Event-Loop1.png" rel="shadowbox[sbpost-986];player=img;"><img class="alignleft  wp-image-992" title="Kinect-Multitouch-MissionMode-Event Loop" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Kinect-Multitouch-MissionMode-Event-Loop1.png" alt="" width="278" height="346" /></a>The basic steps in our touch-as-depth software can be summarized by the flowchart at left.  For each mode of operation (SurfaceCalibration, ExtentsCalibration, and MissionMode), the data flow is slightly different.  The flowchart displayed is that of the typical MissionMode flow loop.   Let&#8217;s go over these one by one&#8230;</p>
<p>Depth information is gathered frame-by-frame from the Kinect.  These depth points are stored in the depth buffer.  Next, the base interaction surface is found in relation to the location of the Kinect (as determined by the SurfaceCalibration routine).  During MissionMode, if it&#8217;s the first pass through, all the depth data is adjusted relative to the calibration matrix.  In all subsequent frames, this depth data is then compared relative to the surface to determine whether or not there is a &#8220;touch&#8221; event.  The raw touch-from-depth data is then filtered using a custom mean filter that weeds out some of the extraneous noise&#8230;some, but not all.  Connected 8 component labeling is used to disambiguate one finger from another.  Particle analysis is then performed to figure out exactly which points are &#8220;touch&#8221; points and which are noise&#8230;at this point, the data should not be noisy.  Now that we have the touch points, we need to make sure they line up with the spots in the real world.  The raw points as seen by the Kinect are then transformed relative to the tracked space (as determined by the ExtentsCalibration routine).  Finally, a filter is applied to the frame-to-frame behavior of the points to determined their mapped keyboard and mouse event.  Rinse and repeat&#8230;as fast as possible.  Now let&#8217;s go through each of the steps in more detail&#8230;<span id="more-986"></span></p>
<h3>SurfaceCalibration Mode</h3>
<p>Once you have placed your Kinect relative to the surface (a table, a wall, a chair, etc.) you want to track touch on, you need to get some very accurate readings about depth.  This is a one-time calibration&#8230;unless you move your Kinect or change the surface, in which case you will need to re-calibrate.  The <em>SurfaceCalibration</em> mode is responsible for modeling the interaction surface over multiple frames and a fixed spatial resolution of 640&#215;480 depth points.  The <a title="Using a Depth Camera as a Touch Sensor" href="http://research.microsoft.com/en-us/um/people/awilson/publications/WilsonITS2010/WilsonITS2010.html">methodology of modeling the surface and extracting touch information</a> that we use is explained very clearly by Andy Wilson of Microsoft Research.  Unfortunately, the process does not calculate depth information adaptively.  Hence, any objects placed on the interaction surface during calibration will be modeled as being part of the touch space.  It is important to keep the field-of-view devoid of interference from direct light sources and objects (even a few seconds of interference would yield result in errors of ~10% in calibration).</p>
<p><em>SurfaceCalibration</em> mode involves a single step as soon as the depth buffer is ready and locked.  This step contains the routine <code>(Gelib_DoSurfaceCalibration)</code> that translates the depth values to millimeters and stores the cumulative sum over a period.  The number of frames to track the depth values (defined by <code>DUMPFOR</code> parameter) and the frame interval (defined by <code>DUMPEVERY</code> parameter) are specified in the header file <code>TouchGestures.h</code>.  The calibration routine shows a progress bar.  Once the depth values are gathered, the final depth data for each pixel (one of 640&#215;480) are calculated by finding the average values (dividing each pixel accumulated value by <code>DUMPFOR</code>).  The average depth values are stored in the file <code>DepthAverage.dump</code> (our file format uses a semicolon-space-newline delimitation).  The <code>SurfaceCalibration.exe</code> application may be terminated as soon as this file is generated (or as soon as the progress bar indicates completion).  At this point, the Kinect should be calibrated relative to your surface and you are ready to tell the Kinect what the boundaries of your tracked space are&#8230;for that you switch to:</p>
<h3>ExtentsCalibration Mode</h3>
<p>During the <em>ExtentsCalibration</em> mode, the system works in partial Mission mode.  Touch gestures are processed but not translated and emulated as mouse events.  Instead, touch points are recorded for a certain time period and the corresponding co-ordinates are logged in a file.</p>
<p>Upon initialization and depth buffer filled event, the first step is to read the surface calibration depth values as an <code>IMAGE</code> structure from the stored file <code>DepthAverage.dump</code>. The <code>IMAGE</code> data structure is defined as a 2D unsigned short integer array with sizes specified as <code>DWIDTH</code> and <code>DHEIGHT</code> (640, 480).</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code11.png" rel="shadowbox[sbpost-986];player=img;"><img class="size-full wp-image-994 aligncenter" title="code1" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code11.png" alt="" width="600" height="70" /></a>The image analysis and processing routines are similar to that of the MissionMode and will be explained in that section. The additional function <code>(CALIBRATION Gelib_CalibrateExtents( CALIBRATION C ) )</code> displays and logs the touch points in the sequence. The five points are iterated through a counter <code>(cIteration)</code> and the calibration mode swaps to regular mode <code>(qswap = 0)</code> once the calibration is completed&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code2.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-995" title="code2" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code2.png" alt="" width="600" height="176" /></a></p>
<p>The <code>Calout</code> data structure contains the calibration reference points.  These points are stored in the <code>Calibration.dat</code> file.  The data flow switches to touch display mode hence forth (displays transformed touch points and does not translate and emulate mouse events).</p>
<p>Transforming touch points: An affine transform of the touch points is performed to translate the touch points from the depth space to the table space&#8230;</p>
<p style="text-align: center;"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Table-to-Depth-Calibration.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter  wp-image-988" title="Table-to-Depth-Calibration" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Table-to-Depth-Calibration.png" alt="" width="600" height="406" /></a></p>
<p>The depth space is defined as the 2D region as seen by the Kinect depth camera (this is different from the 2D video space seen by the Kinect). This is expected to be a subset of the table space which is the physical 2D region of the glass top over the table. The transforms applied are:</p>
<p>1. Translation in <code>X,Y</code> direction:  <code>T[C0(x,y)]</code> towards &amp; relative to the table space origin of <code>C0</code>.<br />
2. Scale in <code>X,Y</code> direction:<code> S[M(x,y))]</code> towards the upper boundaries of the table space.</p>
<p>The above process determines factors to calculate the transformation offset and scale factors. The translation offset and scale factors are then applied to any incoming touch particle set over a loop&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code3.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-996" title="code3" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code3.png" alt="" width="600" height="133" /></a></p>
<p>The <code>gestureCanvas</code> image is necessary for debugging and visualizing the touch points in real time by assigning the gesture points to a square 5&#215;5 super pixel.</p>
<h3>Mission Mode</h3>
<p>The Mission Mode is the run time mode that tracks touch gestures in real time and translates it to keyboard and mouse events for the Windows 7 OS.</p>
<p><strong>Reading Surface Calibration Values</strong><br />
During the system boot-up (Frames = 0), after the global run time variables are initialized, the surface calibration values are read off of the <code>DepthAverage.dump</code> file&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code4.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-997" title="code4" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code4.png" alt="" width="600" height="54" /></a></p>
<p><code>gSurface</code> is an image data structure that holds the average depth values of the table surface obtained during calibration. Following this, the calibration reference co-ordinates obtained from the ExtentsCalibration Mode is read back from the file <code>Calibration.dat</code> and stored in the structure <code>Calout</code>. For each calibration co-ordinate obtained from the file, an envelope bounding box (rectangular) is applied and the co-ordinates are redefined. This is done to adjust for any rotational shifts in the Z-axis during calibration (please note: this is not a transform, but a linear extrapolation).<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code5.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-998" title="code5" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code5.png" alt="" width="600" height="220" /></a></p>
<p><strong>Calculating Touch from Depth</strong></p>
<p>Following the above operations of reading the calibration files and loading it in the run time memory variables, the conversion of depth image to touch is performed by calling:<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code6.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-999" title="code6" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code6.png" alt="" width="600" height="36" /></a></p>
<p>The output of the <code>Gelib_CalcTouchImage</code> function is an image structure containing binary touch information (a 640&#215;480 array of 0s and 255s). The function takes inputs of the buffer containing depth information passed on to the application from the SDK as a memory pointer, bounding box co-ordinates for the calibration points (this is required to exclude points outside the touch space), the constants <code>DSURFACE_TOL</code> and <code>FINGER</code> passed through the GUI.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code7.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1009" title="code7" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code7.png" alt="" width="600" height="336" /></a></p>
<p>The touch image is calculated by first reducing the depth buffer and extracting the masked depth values (by a logical bitwise &amp;0x0ffff).  Again, following Andy Wilson&#8217;s work, the classification of depth values as touch is <a title="Using a Depth Camera as a Touch Sensor" href="http://research.microsoft.com/en-us/um/people/awilson/publications/WilsonITS2010/WilsonITS2010.html">explained in detail here</a>.</p>
<p>The values of <code>Dmax</code> and <code>Dmin</code> are calculated as shown in the code snippet above. <code>Dmax</code> is the maximum value of depth beyond which any value of depth is classified as not belonging to the touch range. <code>Dmin</code> is the minimum depth value below which depth values do not count as meaningful touch values. The small range of values between <code>Dmax</code> and <code>Dmin</code> is classified as a valid touch point. (Note: To avoid spurious calibration parameters to be counted in the process, any value of Depth equaling 0 or greater than 1200 is classified as a non-touch point). <code>Dmax</code> can be assumed to be the actual surface value as calculated during the surface calibration procedure. However, owing to temporal depth noise, a tolerance parameter <code>(DSURFACE_TOL)</code> is included in the calculation of <code>Dmax</code>. The thickness of your finger dictates the <code>Dmin</code> calculation. We include the parameter <code>FINGER</code> to determine the <code>Dmin</code> value.</p>
<p><strong>2D Spatial Depth Filter</strong></p>
<p>As recommended by A. Wilson, a 2D separable mean filter (without weights) is implemented to remove boundary noise during interactions&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code8.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1000" title="code8" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code8.png" alt="" width="600" height="56" /></a></p>
<p>The kernel size is fixed at 9&#215;9 (although this is configurable using the GUI).  A binary threshold is applied following the two stages of filtering.  The threshold is adjustable from the MissionMode GUI.  A value of 96 to 128 worked well at the time of testing.</p>
<p><strong>Connected Component Labeling</strong></p>
<p>The process of identifying blobs of connected particles (in this case, separate one finger from another in the touch space) and labeling them progressively for each frame is known as <a title="Connected Component Labeling on Wikipedia" href="http://en.wikipedia.org/wiki/Connected-component_labeling">Connected Component Labeling (CCL for short)</a>. The algorithm used here is 8 connected (Moore Neighborhood) component labeling. Check out the Wikipedia entry for more info.  Our algorithm (borrowing heavily from the standard) is implemented here:<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code9.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1001" title="code9" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code9.png" alt="" width="600" height="54" /></a></p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Connected-8-Kernel.png" rel="shadowbox[sbpost-986];player=img;"><img class="alignleft  wp-image-989" title="Connected-8 Kernel" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Connected-8-Kernel-300x300.png" alt="" width="240" height="240" /></a>The CCL algorithm is run in two passes.  The first pass labels each valid pixel incrementally depending on the 8-connectivity rule.  The second pass creates an equivalence table for labels that are associated with the same particle but have a different primary value (a primary value is the dominant value in the particle).  The connected-8 kernel is defined as&#8230;</p>
<p>First Pass: For each pixel (represented by the solid black cell), the surrounding connected pixels are compared with the current pixel. The smallest label above 0 in the connected 8 kernel is assigned as the new label for the current pixel. If the smallest label in the kernel cannot be found (probably connected by zeros), then the pixel value is assigned a new label which is defined as a counter.</p>
<p>Second pass: The first pass output is rerun to derive the equivalence table. The equivalence table associates boundary particles that may have a different label than the primary value of the particle. The same procedure of 8-connecting is applied and the table structure is formed based on the variance in pixel values between the current pixel and the surrounding pixels. Once the association is derived, the equivalence table is normalized and the frame is redrawn. The resulting output is a well-connected and a uniquely labeled blob set.</p>
<p><strong>Particle Analysis</strong></p>
<p>Particle analysis deals with performing morphology and intensity based parameter measurements on binary images.  Typical operations involve measuring areas, lengths, coordinates, chords and axes, shape equivalence and shape features.  Before particle analysis, Histogram-based thresholding and equalization is done to remove small particles and noise.  Currently, the threshold is a fixed parameter of 32, which means that any particle with less than 32 pixels area is ignored for gesture calculations.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code10.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1002" title="code10" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code10.png" alt="" width="600" height="54" /></a></p>
<p>We limit the particle analysis operations in this application to a “bounding-box and center point” approach.  More accurate measurements are unnecessary considering the errors in touch registration.  For each particle identified as a label, the bounding box and center values are found as the maximum and minimum values in X and Y direction.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code111.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1003" title="code11" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code111.png" alt="" width="600" height="424" /></a></p>
<p>The particle analysis structure P returns the measured values for each valid particle back to the application.</p>
<p><strong>Detecting Gestures and Emulating I/O Device Actions</strong></p>
<p>The particle structure is used as the input to the gesture filter switch-case structure.  Based on the number of particles detected (label count from the particle analysis routine), the gesture filter redirects I/O control (typically mouse actions or keyboard events) to the corresponding functions.  These functions process gestures temporally and spatially, hence the accuracy of gesture detection depends on well-trained coefficients (these coefficients are currently hard-wired in the source code.  These can be exposed as controls during the Surface Calibration process or as a completely different calibration/training process.  Coefficients maybe determined as OTP values (hard-wired), dynamic and linear values or intelligence based values such as using neural networks).  At the time of writing, up to 5 particles per frame are handled by the gesture filter (up to five fingers or five cases in the switch-case structure), although there is no limit to the number of particles (<code>NUM_PARTICLES parameter</code>) that the particle analysis method can process and the gesture filter can handle.</p>
<p><strong></strong>For multi-user interactions, it may be necessary to process multiple particles through deeper particle measurements (palm recognition etc.).  This would also require the Windows Multipoint SDK for multi-mouse interactions.  This should get easier in the future.</p>
<p>For the moment, our gesture detection mechanism is designed in a way to facilitate smooth hand off between gestures and gesture fade-in and fade-out.  As an example, there may be cases where a two-finger zoom gesture may transition and fade-out from 2 particles to 1 particle followed by 0.  These transitions have been accounted for in the gesture tracking mechanism.  Here&#8217;s a breakdown of how each gesture works&#8230;</p>
<p><strong><em>Idle mode</em>:</strong> During the idle mode, the gesture filter and class variables are initialized and the filter waits for a valid gesture particle set.  Any value of the number of particles above 1 is assumed to be a valid gesture. In addition, all emulation events are reset (mouse buttons are released).  In order to avoid spurious gesture resets to case 0 (noisy frames), a time out counter is set.  For any value of the time out beyond 3 (3 frames) the previous gesture is assumed to have completed.  Certain gestures like Select/Move have special time out values that are unique to the behavior of those interactions.  Every gesture case also keeps track of the previous gesture in the <code>pGesture</code> variable (which acts a lot like a state machine).</p>
<p><strong><em>Select/Move mode</em>:</strong> This mode (<code>case 1</code>) handles gestures such as Select/Move components and delete component as well as (left and right) mouse click gestures.</p>
<p><strong><em>Handling Mouse Right Click</em>:</strong>The right click event is handled based on a timed gesture response.  This is required to differentiate between gesture transitions as well as other single particle gestures.  The right click event is determined based on the <code>dtTimeout</code>counter value&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code12.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1004" title="code12" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code12.png" alt="" width="600" height="113" /></a></p>
<p><strong><em>Component Select, Move and Delete</em>:  </strong>The <code>Gelib_SelectElement</code> function processes all touch gestures that require translation to corresponding events on the Grasshopper canvas.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code13.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1005" title="code13" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code13.png" alt="" width="600" height="45" /></a></p>
<p>The select gesture is valid when the spatial difference between the current touch point and the previous touch point (the previous frame) is less than a tolerance value defined by <code>SE_TOLERANCE</code>.  The tolerance value is set to a strict 1 currently.  To distinguish between spurious or stray touch points, we track the gesture for stability.  If the current touch point is stable for 10 frames, the gesture is locked down by setting the mouse pointer position at the translated position and a &#8220;mouse left-click and hold&#8221; event is sent to the operating system.  For the 11th frame (special case), the mouse pointer is jittered for a pixel in the Y direction to ensure that the component information (usually achieved by mouse hover) is displayed.<strong><br />
</strong></p>
<p><code></code>The component move gesture is opposite in implementation to the move gesture.  In this case, we check if the difference in coordinates of the current and previous touch point is above a certain threshold <code>(SE_TOLERANCE + 2)</code> and proceed to send the &#8220;mouse left-click and hold&#8221; event to the OS.  The delete component gesture is also implemented under the same category wherein we check if the difference in current and previous touch coordinates is above the delete threshold of <code>DE_TOLERANCE</code>.  Once the threshold limit is hit, the delete gesture identifier proceed to a binary encoded style state machine that tracks for successive gestures (back and forth movement of the finger).  After 3 successive move gestures (back and forth), the gesture recognition loop proceeds to send the &#8220;Delete&#8221; key event to the OS.</p>
<p><strong><em>Zoom</em>:</strong> The two finger zoom gesture is similar in implementation to the Select/Move mode&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code14.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1006" title="code14" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code14.png" alt="" width="600" height="54" /></a></p>
<p>On function entry, the floating point distance between the two fingers is calculated.  This is required to differentiate between a zoom in and zoom out gesture. For each frame, the current distance between the fingers and the previous frame‟s distance between the fingers are compared.  If the difference is positive, the gesture is a zoom-out.  In this case, the mouse-scroll event is sent to the OS with a positive <code>WHEEL_DELTA</code>.  A zoom counter in each case is incremented to verify switching between one zoom-mode to the other.</p>
<p><strong><em>Pan:</em></strong> Cases 4 and 5 are used in tandem for the pan mode.  The pan gesture is a 5 finger gesture, however there may be instances where two fingers combine to one particle and yield 4 particle gestures.  In those cases, the gesture filter operates in the same pan canvas mode.  The start of the gesture however requires 5 unique particles&#8230;<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code16.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1008" title="code16" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code16.png" alt="" width="600" height="54" /></a></p>
<p>The actual mouse position is determined as the average <code>X</code> and <code>Y</code> position of each of the (4 or) 5 particles passed as the parameter to the Pan Canvas function.  The pan canvas gesture is easily susceptible to temporal noise owing to the inconsistency in the ability to determine a fixed mouse pointer coordinate.  To nullify this problem, a 2 point frame average of the coordinates is calculated as the final pan point.  Whenever the current touch point changes position, the movement delta values in <code>X</code> and <code>Y</code> directions are calculated.  If the delta values exceed a threshold <code>(PAN_TOLERANCE)</code>, the pan gesture is simulated by a mouse right-click and hold event.</p>
<p><strong><em>Drag-wire and add connection</em>:</strong> This is a 3 finger gesture similar to the move gesture with the additional shift key event included with the mouse left click hold event.<a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code15.png" rel="shadowbox[sbpost-986];player=img;"><img class="aligncenter size-full wp-image-1007" title="code15" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/code15.png" alt="" width="600" height="56" /></a></p>
<p>It is important to identify the optimum relative positioning of the 3 fingers on the touch space.  For natural interaction the index finger, middle finger and the thumb are used.  The middle finger shall be used as the actual pointer position for the gesture.  To calculate the validity of this condition, a conditional check is performed on the 3 coordinates passed to the function.  Following the classification of the touch points, the final touch point (unfortunately, it&#8217;s the middle finger) is extracted and checked for motion across frames using the same method described for the move gesture.  The shift key is also held in addition to the &#8220;Left-Click-Hold&#8221; event.  The 3 finger hold gesture is implemented as well for the sake of uniformity in behavior.</p>
<h3>Related Posts</h3>
<p><a title="Grasshopper Canvas with Kinect Interaction: Part 2" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-2">Grasshopper Canvas with Kinect Interaction: Part 2</a></p>
<p><a title="Grasshopper Canvas with Kinect Interaction: Part 1" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-meet-kinect/">Grasshopper Canvas with Kinect Interaction: Part 1</a></p>
<p><a title="Grasshopper Canvas Real Estate" href="http://lmnts.lmnarchitects.com/interaction/ghcanvas-real-estate/">Grasshopper Canvas Real Estate</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grasshopper Canvas with Kinect Interaction: Part 2</title>
		<link>http://lmnts.lmnarchitects.com/featured/grasshopper-canvas-with-kinect-interaction-part-2/</link>
		<comments>http://lmnts.lmnarchitects.com/featured/grasshopper-canvas-with-kinect-interaction-part-2/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:25:06 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Interaction]]></category>
		<category><![CDATA[Collaboration]]></category>
		<category><![CDATA[Grasshopper]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=976</guid>
		<description><![CDATA[Over the past year, we've made the Microsoft Kinect sense touch - and in turn, gestures - which we then used to control the Grasshopper canvas via keyboard and mouse events.  We've had a lot of fun building Kinect Multitouch Interactions but - being an architecture firm - we can only spend so much time developing the code.  We think we've created a solid foundation and would like to share with the broader community to use, modify, and extend.  Obviously, Grasshopper is only one possible application and we'd love to see what others could do.  In the spirit of openness, we're providing the complete source.]]></description>
			<content:encoded><![CDATA[<div id="attachment_984" class="wp-caption aligncenter" style="width: 584px"><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Kinect-Multitouch-TouchEvent-Process.png" rel="shadowbox[sbpost-976];player=img;"><img class=" wp-image-984 " title="Kinect-Multitouch-TouchEvent-Process" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Kinect-Multitouch-TouchEvent-Process.png" alt="" width="574" height="322" /></a><p class="wp-caption-text">1.Kinect Sensor | 2.Raw Depth Image | 3.Segmented Depth Image | 4.After Lowpass Filter | 5.Connected Component Labeling | 6.Particle Analysis | 7n.Gesture Filters | 8.Keyboard/Mouse Events</p></div>
<p>In our <a title="Grasshopper Meets Kinect" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-meet-kinect///">previous post</a>, we talked about our efforts to use the Microsoft Kinect to control a large-scale table-top interface running Grasshopper.  In short: we used the Kinect to sense touch and gestures&#8230;which we then used to control the canvas via keyboard and mouse events.  We&#8217;ve had a lot of fun building Kinect Multitouch Interactions but &#8211; being an architecture firm &#8211; we can only spend so much time developing the code.  We think we&#8217;ve created a solid foundation and would like to share with the broader community to use, modify, and extend.  Obviously, Grasshopper is only one possible application and we&#8217;d love to see how others will use this interaction.  So, in the spirit of openness, we&#8217;re providing the complete source &#8211; as well as Visual Studio solution files &#8211; downloadable below.  It&#8217;s our hope that those of you reading this will adapt and improve on what we&#8217;ve started.</p>
<p><strong>BE WARNED</strong>:  Before you jump in and try this at home, we  encourage you to read this post (and the next one) to get a sense of how we went about this.  Rest assured, downloading and compiling our sample code is not a terribly complex endeavor, provided you have some experience with linking and building applications.  You&#8217;ll need to have some experience with C/C++ programming&#8230;so please read the detailed technical descriptions included in the SDK (and in these posts).</p>
<p>To get started, you&#8217;ll need the following&#8230;</p>
<p><strong>Prerequisites/Dependencies</strong></p>
<p>1. <a title="Microsoft Kinect - Go buy one" href="http://www.xbox.com/en-US/kinect">Microsoft Kinect</a> for XBox with external power source and USB cables.<br />
2. Microsoft Windows 7 or later.<br />
3. <a title="Kinect for Windows PC SDK Download" href="http://kinectforwindows.org/download/">Kinect for Windows PC SDK</a> with drivers.  We used the first public beta.<br />
4. <a title="Microsoft .NET Framework 4.0" href="http://www.microsoft.com/download/en/details.aspx?id=17851">Microsoft .NET Framework 4.0</a>.<br />
5. <a title="Microsoft Visual Studio" href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions">VisualStudio 2010</a> IDE or similar.  <a title="Visual Studio Express" href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express">Express editions</a> should work fine.<br />
6. Our source code, which includes the Visual Studio Solution files&#8230;scroll down.</p>
<p><strong>Optional Equipment</strong></p>
<p>7. Projector (or similar) display.  Our setup, while not expensive, is a bit exotic.<br />
8. Kinect stabilizing mount (for walls, tables and ceilings).</p>
<h3>Kinect Multitouch Interaction Source and Examples</h3>
<p><a title="GNU General Public License" href="http://www.gnu.org/licenses/gpl.html"><img class="alignleft size-full wp-image-991" title="gplv3-127x51" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/gplv3-127x51.png" alt="" width="127" height="51" /></a>Kinect Multitouch Interaction by <a rel="cc:attributionURL" href="http://lmnts.lmnarchitects.com">LMNts</a> is copyleft and licensed under the <a title="GNU General Public License" href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>.</p>
<p title="GNU General Public License"><strong>Obligatory Disclaimer/Terms and Conditions of Use:</strong>  By downloading, you agree to use this software at your own risk.  Under no circumstances shall LMN or LMNts be liable for direct, indirect, special, incidental, or consequential damages resulting from the use, misuse, or inability to use this software.  The software is provided &#8220;as is,&#8221; whereas we cannot provide a guarantee of support.  LMNts does not guarantee that this software is bug-free or that it will solve all your problems&#8230;</p>
<p><pre><pre>&nbsp;&nbsp;&nbsp;&nbsp;This program is free software: you can redistribute it and/or modify
&nbsp;&nbsp;&nbsp;&nbsp;it under the terms of the GNU General Public License as published by
&nbsp;&nbsp;&nbsp;&nbsp;the Free Software Foundation, either version 3 of the License, or
&nbsp;&nbsp;&nbsp;&nbsp;(at your option) any later version.

&nbsp;&nbsp;&nbsp;&nbsp;This program is distributed in the hope that it will be useful,
&nbsp;&nbsp;&nbsp;&nbsp;but WITHOUT ANY WARRANTY; without even the implied warranty of
&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp;&nbsp;See the
&nbsp;&nbsp;&nbsp;&nbsp;GNU General Public License for more details.</pre></pre><br />
<a href="http://lmnts.lmnarchitects.com/wp-content/plugins/download-monitor/download.php?id=19">Download LMNts-KinectMultiTouchGestures, 206.09 kB </a></p>
<p>Ok, let&#8217;s get into the fun details of how this works&#8230;<span id="more-976"></span></p>
<h3>Hardware Setup</h3>
<p>There are a great number of possible configurations and methods of display, from as simple as tracking touch on a standard LCD monitor to registering touch on the surface of a wall or a chair.  In our example, we used a large ground glass table and a giant mirror to project the interactive workspace and UI from beneath the table.  Our goal was to create a poor man&#8217;s Microsoft Surface.  As it&#8217;s unlikely that you will have a similar setup, let&#8217;s assume you want to project onto a standard table from above.  The table top should typically be capable of allowing light from the projector to be dispersed on the surface to facilitate viewing but not exhibit excessive specular behavior.  That&#8217;s a fancy way of saying: you will need a table with a dull surface finish and position the projector at an angle (adjusting the image keystone) so that it doesn&#8217;t bounce light directly back into the depth sensor.  This is important since the Kinect sensor operates by projecting infra-red light through the field of view; light bouncing off any reflective surface would be reproduced as noise or invalid depth data.  You don&#8217;t want that.</p>
<p>If you set this up on a table, the RGBD sensor (ie: Kinect) should be installed overhead with a field of view covering the table top.  While the minimum distance of the sensor (distance to table) is restricted by the Kinect&#8217;s capabilities (typically around 0.75m), the maximum distance to table determines the accuracy of touch calculations.  A typical depth value (and recommended) is 1.00 m for the specific table dimensions.  You will want to mount the Kinect in such a way as it cannot be moved or disturbed&#8230;even small vibrations cause noise in the depth data and could throw off the interaction.</p>
<p>If you set this up on a wall (or similar surface), the above rules still apply, but you will want to be careful to position the Kinect where its view of the surface won&#8217;t be occluded by users standing directly in the way.  Our touch implementation is based on line-of-sight&#8230;overhead mounting works best for wall interaction as well.</p>
<h3>Software Setup</h3>
<p>A complete walkthrough of the Microsoft Kinect PC SDK is well beyond the scope of this post.  Microsoft has <a title="Microsoft Kinect for PC SDK Quickstarts" href="http://channel9.msdn.com/Series/KinectSDKQuickstarts">some great documentation and support for getting up and running with the SDK</a>.  For clarity, we&#8217;ve built our the demo interaction around Microsoft&#8217;s SkeletalViewer sample code (a popular place to start for good reason).  We have NOT included Microsoft&#8217;s source, so it will be necessary to link and recompile with the actual Microsoft SDK if you want to make major changes.  The VisualStudio Solution file is setup to link to the necessary dependencies, but you will have to copy the relevant sources from the SDK into the project folder of your choosing.</p>
<p>The source code is written in C++ and targeting the .NET framework 4.0.  We have included the three executable builds:</p>
<p><em>SurfaceCalibration.exe</em><br />
<em>ExtentsCalibration.exe</em><br />
<em>MissionMode.exe</em></p>
<p>Each of these builds is a modified version of the main TouchGestures sample code.  The sample included in our download builds the MissionMode executable by default.  (Should you like to rebuild SurfaceCalibration.exe or ExtentsCalibration.exe, the TouchGestures.h contains a globally defined switch that will trigger #ifndef code in the implementation&#8230;after building, simply rename the execs).</p>
<p>The executables should be run in the following order (one at a time):</p>
<p><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/LMNts-Kinect-Multitouch-Surface-Calibration.png" rel="shadowbox[sbpost-976];player=img;"><img class="alignleft  wp-image-985" title="LMNts-Kinect-Multitouch-Surface Calibration" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/LMNts-Kinect-Multitouch-Surface-Calibration-300x276.png" alt="" width="168" height="155" /></a>1.  <em>SurfaceCalibration.exe</em> – necessary for depth estimation across the interaction surface.  This utility calibrates the Kinect relative to a surface in its field of view.   Once the executable completes, a dump file called <code>DepthAverage.dump</code> is created in the Release folder containing the depth information in millimeters for each of the 640&#215;480 pixels.</p>
<p>2.  <em>ExtentsCalibration.exe</em> – is required to map the 2D table top space to the projected interaction space (in our case, the Grasshopper canvas).   Build and run this executable.  If you are using a projector, move the window directly over the area you wish to track.   This executable displays a square pixelated area on the display which acts as the target point to be mapped onto the 2D depth space (which is normally restricted to a subset of the Kinect&#8217;s field-of-view).  Once the square is displayed <a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/LMNts-Kinect-Extents-Calibration.png" rel="shadowbox[sbpost-976];player=img;"><img class="alignright  wp-image-987" title="LMNts - Kinect - Extents Calibration" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/LMNts-Kinect-Extents-Calibration-300x226.png" alt="" width="270" height="203" /></a>(starting bottom-right and moving clockwise for each corner, ending in the center),  you are expected to touch and hold the square for a few seconds until it moves to the next calibration location.  Watch carefully: the better the tracking, the quicker it moves.  This continues until all the 5 points are displayed and logged by the calibration utility.  At the end of the process, a data file called <code>Calibration.dat</code> is created in the Release directory containing the co-ordinates logged during the extents calibration process.  <a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/UI-Controls.png" rel="shadowbox[sbpost-976];player=img;"><img class="alignleft size-medium wp-image-990" title="UI-Controls" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/UI-Controls-300x252.png" alt="" width="300" height="252" /></a></p>
<p>The controls in the UI are required to adjust the touch parameters and thresholds during image processing: this section displays the frame rate, provides control sliders to modify the <code>DSurface</code>, Finger and Mean filter threshold value.  The filter kernel size can also be modified using the text control box (we&#8217;ll explain these terms in the next post).  The default values in the UI are usually sufficient for a typical use case but, depending on where you position the Kinect relative to the tracked area, you may need to adjust the parameters to remove some of the noise.</p>
<p>3.  <em>MissionMode.exe</em> – this is the sample touch and image processing executable that processes touch inputs, identifies and translates the touch inputs as gestures and mouse events on the Grasshopper canvas.  This executable should always be open and running to enable touch gestures tracking, but it does not need to be coincident with the tracked area.  The window displays the touch points at ~30 frames per second.   This exe should only be run once the calibration procedure is complete.   In our example, the Grasshopper canvas can be pushed to the display space (in our case: the table) and the fun begins.</p>
<h3><a href="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Grasshopper-Kinect-Touch-Gestures1.png" rel="shadowbox[sbpost-976];player=img;"><img class="aligncenter size-full wp-image-979" title="Grasshopper-Kinect-Touch-Gestures1" src="http://lmnts.lmnarchitects.com/wp-content/uploads/2011/12/Grasshopper-Kinect-Touch-Gestures1.png" alt="" width="590" height="400" /></a></h3>
<p>So that&#8217;s the overview.  If you are testing this out with Grasshopper (which we recommend), the above gestures are implemented and should work fine without any changes to the code.  In <a title="Grasshopper Canvas with Kinect Interaction: Part 3" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3">our next post</a>, we&#8217;ll unpack and walk through each of the code functions in greater detail&#8230;</p>
<h3>Related Posts</h3>
<p><a title="Grasshopper Canvas with Kinect Interaction: Part 3" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-with-kinect-interaction-part-3">Grasshopper Canvas with Kinect Interaction: Part 3</a></p>
<p><a title="Grasshopper Canvas with Kinect Interaction: Part 1" href="http://lmnts.lmnarchitects.com/interaction/grasshopper-canvas-meet-kinect/">Grasshopper Canvas with Kinect Interaction: Part 1</a></p>
<p><a title="Grasshopper Canvas Real Estate" href="http://lmnts.lmnarchitects.com/interaction/ghcanvas-real-estate/">Grasshopper Canvas Real Estate</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/featured/grasshopper-canvas-with-kinect-interaction-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy Holidays 2011 from LMN</title>
		<link>http://lmnts.lmnarchitects.com/news/happy-holidays-2011-from-lmn/</link>
		<comments>http://lmnts.lmnarchitects.com/news/happy-holidays-2011-from-lmn/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 20:49:32 +0000</pubDate>
		<dc:creator>LMNts</dc:creator>
				<category><![CDATA[Media]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Holiday Card]]></category>
		<category><![CDATA[LMN]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://lmnts.lmnarchitects.com/?p=981</guid>
		<description><![CDATA[Happy Holidays 2011 from everyone at LMN.  
This Holiday Season, LMNers lit candles...LOTS of candles.  The video was directed, shot, edited and produced by: cbaker, jbeaver, scrawford, cgrammens, kgregga, thenderson, ahunter, kkimura, amacdonald, and gshaw.]]></description>
			<content:encoded><![CDATA[<p><script type='text/javascript' src='http://content.bitsontherun.com/players/U6dUoXCn-Cj8XUjwC.js?exp=1337258234&sig=fa28f5505eabbba102ec01984b5a4ebc'></script></p>
<p>This Holiday Season, LMNers lit candles&#8230;LOTS of candles.  The video was directed, shot, edited and produced by: cbaker, jbeaver, scrawford, cgrammens, kgregga, thenderson, ahunter, kkimura, amacdonald, and gshaw.</p>
]]></content:encoded>
			<wfw:commentRss>http://lmnts.lmnarchitects.com/news/happy-holidays-2011-from-lmn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

