<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7911484440325715821</id><updated>2012-02-16T00:44:46.975-08:00</updated><category term='arcGIS'/><category term='approach'/><category term='scrum'/><category term='documentation'/><category term='ArcMap'/><category term='alpha review demo'/><category term='maya plugin wizard'/><category term='maya'/><category term='mel'/><category term='alpha review'/><category term='set-up'/><category term='GUI'/><category term='gliffy'/><title type='text'>Hello World</title><subtitle type='html'>Updates, Progress Reports, and To-Do's for Stuff I'm Working On</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-3364056061943644615</id><published>2011-12-23T18:33:00.000-08:00</published><updated>2011-12-23T18:34:20.544-08:00</updated><title type='text'>Point in Plane (finally)</title><content type='html'>One of the last things I've been stuck on is figuring out if a point is within a plane in. After playing around with nearestPointInMesh a couple days ago, it seemed that the function was designed to determine if a point was inside a 3-dimensional mesh rather than a 2D plan (though I still consider that a mesh), which let to a few days of frustration and misunderstanding.&lt;br /&gt;&lt;br /&gt;I ended up coming across Jeren Chen's code on &lt;a href="http://jr3d.com/index.php?n=MiniHowtos.HowToDetermineIfAPointIsInsideAMesh"&gt;determining if a point is inside a mesh &lt;/a&gt;without using plug-ins (which I really prefer since you shouldn't assume your user has all the plug-ins you do). His code, like the Maya plug-in, functioned on a 3D mesh rather than a 2D plane, but I ended up writing a hacky function that takes in a plane, moves it down the y axis a tiny bit and extrudes it upwards twice that amount to form a "buffer" 3d mesh for that plane. And then I called Jeren's code. For those wondering it looks like this:&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;i&gt;def pointInPlane(v, p):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # convert point to MPoint&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m = MPoint()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; coord = cmds.xform(v, q = True, ws = True, t = True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m.x = float(coord[0])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m.y = float(coord[1])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m.z = float(coord[2])&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # copy the given plane (since we'll be extruding it and deleting afterwards)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; plane = cmds.duplicate(p)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # select all faces on the plane&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmds.select(plane, r=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmds.ConvertSelectionToFaces()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f = cmds.ls(sl=True)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # move plane down a bit and extrude upwards to form a thin "buffer" mesh for the pointInMesh function&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmds.move(0, -0.05, 0, plane, a=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e = cmds.polyExtrudeFacet(ty=0.1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # get the resulting polygon&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; poly = getPolyFromFace(f)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # call pointInMesh function&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inside = isInside(m,poly)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # delete the copied poly&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmds.delete(plane)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return inside&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;Hacky as it is, it works (yay!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-3364056061943644615?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/3364056061943644615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/12/point-in-plane-finally.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/3364056061943644615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/3364056061943644615'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/12/point-in-plane-finally.html' title='Point in Plane (finally)'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-7784588552661339588</id><published>2011-12-22T00:30:00.000-08:00</published><updated>2011-12-22T00:30:47.583-08:00</updated><title type='text'>Bug Fix + Self Note</title><content type='html'>I found out that running my code on a computer that wasn't my laptop would result in the trees not being able to load, since in my code I had specified them via an absolute file path. Just fixed that by making a new function that would find the current file path via python's os module, and navigate into the assets folder. Just as a self-reminder, the command to find the path of the script that's running is:&lt;br /&gt;&lt;br /&gt;return os.path.abspath( __file__ )&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-7784588552661339588?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/7784588552661339588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/12/bug-fix-self-note.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7784588552661339588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7784588552661339588'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/12/bug-fix-self-note.html' title='Bug Fix + Self Note'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-8453896167172247483</id><published>2011-12-16T22:29:00.001-08:00</published><updated>2011-12-18T20:55:43.297-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Making the GUI</title><content type='html'>Most of the GUI has been implemented! Right now the GUI is separated into 3 tabs, with the first one controlling all map-related functions (such as subdivision), the second one controlling all building-generating parameters, and the third one displaying a map of color to asset name (still in progress). As of now I'm able to generate buildings via the GUI.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-RupPWyK69ro/Tu7B3jcPU4I/AAAAAAAAAEM/xapWlQCS4po/s1600/gui1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-RupPWyK69ro/Tu7B3jcPU4I/AAAAAAAAAEM/xapWlQCS4po/s320/gui1.PNG" width="306" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DHDXJ8eIyEA/Tu7B5JiC2VI/AAAAAAAAAEU/q2EF5Vn6XkQ/s1600/gui2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-DHDXJ8eIyEA/Tu7B5JiC2VI/AAAAAAAAAEU/q2EF5Vn6XkQ/s320/gui2.PNG" width="304" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-4s4TvSdnqaE/Tu7B7-INFKI/AAAAAAAAAEc/V8PyeP2PjGY/s1600/GUI3.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-4s4TvSdnqaE/Tu7B7-INFKI/AAAAAAAAAEc/V8PyeP2PjGY/s320/GUI3.PNG" width="304" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Thinking about also including a color editor in the GUI so the user doesn't have to navigate to Maya's Color Set Editor to change the faces.&lt;br /&gt;&lt;br /&gt;Also, I'm still working on figuring out if a point falls within a plane. Joe suggested I use the closestPointOnSurface command, but that seems to be a plug-in that happens to be missing from my version of Maya, and I can't find a download for it at the moment. I have, however, found a nearestPointOnMesh command in my plug-in directory, so I'll be looking into that tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-8453896167172247483?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/8453896167172247483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/12/making-gui.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/8453896167172247483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/8453896167172247483'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/12/making-gui.html' title='Making the GUI'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-RupPWyK69ro/Tu7B3jcPU4I/AAAAAAAAAEM/xapWlQCS4po/s72-c/gui1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-4818281297617127354</id><published>2011-12-12T22:07:00.000-08:00</published><updated>2011-12-12T22:08:52.436-08:00</updated><title type='text'>I heard you like faces, so I put a face in your face...</title><content type='html'>Working on implementing subdivisions right now. One thing I've come to notice is that depending on how the face is generated (ie. via the interactive split tool or cut faces tool), running the same subdivide command can generate different results.&lt;br /&gt;&lt;br /&gt;For example, in the instance below, I'm trying to add split each face into 4 sections in the u-direction. Some faces split fine, others aren't affected at all.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Cxw1PS5ztqg/TubpyzvjhZI/AAAAAAAAAD8/ZlUBuAo6EgU/s1600/subdivide.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="317" src="http://4.bp.blogspot.com/-Cxw1PS5ztqg/TubpyzvjhZI/AAAAAAAAAD8/ZlUBuAo6EgU/s320/subdivide.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Direction-specific splitting. Some faces unchanged.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;One solution I've found is to split each face recursively*, rather than in a particular direction. Though this offers slightly less control over how the faces are split, it does manage to affect every face.&lt;br /&gt;&lt;br /&gt;*With divisions set to 3 in quad mode, each initial quadrilateral will be recursively subdivided into 4 subfaces 3 times, yielding a total of 4 * 4 * 4 = 64 faces. &lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-AYCcBY8h3C8/TubqKKXO-rI/AAAAAAAAAEE/OrmK9c_2KkY/s1600/subdivide_1.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="318" src="http://4.bp.blogspot.com/-AYCcBY8h3C8/TubqKKXO-rI/AAAAAAAAAEE/OrmK9c_2KkY/s320/subdivide_1.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Recursive splitting. All faces modified.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;While it is possible to implement directional subdivision, it would require the user to refrain from using certain tools in generating the map. Between the two choices, I decided in favor giving the user the more freedom while retaining basic functionality.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-4818281297617127354?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/4818281297617127354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/12/i-heard-you-like-faces-so-i-put-face-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4818281297617127354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4818281297617127354'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/12/i-heard-you-like-faces-so-i-put-face-in.html' title='I heard you like faces, so I put a face in your face...'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Cxw1PS5ztqg/TubpyzvjhZI/AAAAAAAAAD8/ZlUBuAo6EgU/s72-c/subdivide.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-176981867009991278</id><published>2011-12-04T14:47:00.000-08:00</published><updated>2011-12-04T14:49:03.155-08:00</updated><title type='text'>Self Evaluation</title><content type='html'>It's time for some introspective self-evaluation.&lt;br /&gt;&lt;br /&gt;Looking back on my initial proposal, I realized that starting out, my goals weren't very clear. There are two types of procedural generation when creating a city—the generation of the individual building, and the generation of the whole city from many buildings. At first I had planned to tackle both these problems, but combined with a rather steep learning curve for MEL, this proved to be a bit too ambitious. It's fair to say that I underestimated how long it would take to really understand how MEL worked and how to manipulate objects through MEL effectively. After getting feedback from my Alpha Review, I stepped back and reevaluated my project. This led to a change in direction that I feel was ultimately a positive turn for my project. I decided to focus on the generation of a whole city, since it allowed for more artistic experimentation (generating the different building types), as well as a more practical final product. &lt;br /&gt;&lt;br /&gt;While my current project is fairly different than what I had originally envisioned, I'm quite happy at how it turned out. Here is a list of features I have today:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ability to generate buildings from either faces or polygons&lt;/li&gt;&lt;li&gt;Established framework for adding additional types of buildings &lt;/li&gt;&lt;li&gt;Generation of different building types depending on face color&lt;/li&gt;&lt;li&gt;3 different types of assets: residential, business, trees&lt;/li&gt;&lt;li&gt;Ability to import additional assets as Maya ASCII files&lt;/li&gt;&lt;li&gt;Setting max/min height of generated buildings (currently hard-coded)&lt;/li&gt;&lt;li&gt;Setting cell width of building windows (currently hard-coded)&lt;/li&gt;&lt;li&gt;Generation of random types of roots/details on buildings&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;Please see my previous post for features I'm planning on implementing the next few weeks. Eventually I'm hoping to create a script that's easily extensible so users can have more control over what types of assets are generated (ie. a backyard with different types of plants instead of being limited to a city)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-176981867009991278?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/176981867009991278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/12/self-evaluation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/176981867009991278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/176981867009991278'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/12/self-evaluation.html' title='Self Evaluation'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-1327975343122958902</id><published>2011-12-04T13:03:00.000-08:00</published><updated>2011-12-04T13:06:04.256-08:00</updated><title type='text'>Beta Review and Future Plans</title><content type='html'>I had my Beta Review with Norm and Joe on Friday, and I'd say it went over pretty well. I implemented Norm's suggestion on color-coding building footprints to determine the generated structure type, as well as importing external Maya ASCII files into the library of available assets. Results-wise, I was able to generate a city with multiple building types as well as trees (imported Maya ASCII files), which I was pretty happy about.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-riEIMRIQ5EA/TtvNDG6yRRI/AAAAAAAAAD0/R7nbsAG-CIA/s1600/trees.PNG" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="258" src="http://2.bp.blogspot.com/-riEIMRIQ5EA/TtvNDG6yRRI/AAAAAAAAAD0/R7nbsAG-CIA/s400/trees.PNG" width="400" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;br /&gt;The Beta Review also gave me some ideas to work on the next few weeks. One was finding a rectangle that can fit completely within a convex polygon. Prior to this, I was generating each footprint by shrinking the bounding box of its containing face by a random value, but in some cases (such as when the polygon is a triangle), the resulting footprint can still fall outside of the face. Another feature we thought of during the review was to subdivide a face into smaller components so the user can generate multiple smaller assets close together.&lt;br /&gt;&lt;br /&gt;With the end of the semester coming close, here is a list of features I'm working on having done in the next few weeks:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Must&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Generate a GUI for the users&lt;/li&gt;&lt;li&gt;Implement rectangle generation within convex polygon feature&lt;/li&gt;&lt;li&gt;Implement face subdivision&lt;/li&gt;&lt;li&gt;Refine building structures &lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Optional &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implement user import of assets (as part of the GUI)&lt;/li&gt;&lt;li&gt;Add additional building types&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;Dec 4 - 10&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implement rectangle in convex polygon&lt;/li&gt;&lt;li&gt;Implement face subdivision&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Dec 11-17&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Refine building structures&lt;/li&gt;&lt;li&gt;Create GUI&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Dec 17-21&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Finish optional implementations if time permits &lt;/li&gt;&lt;li&gt;Movie presentation&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-1327975343122958902?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/1327975343122958902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/12/beta-review-and-future-plans.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/1327975343122958902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/1327975343122958902'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/12/beta-review-and-future-plans.html' title='Beta Review and Future Plans'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-riEIMRIQ5EA/TtvNDG6yRRI/AAAAAAAAAD0/R7nbsAG-CIA/s72-c/trees.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-7841927551431815640</id><published>2011-11-29T13:48:00.000-08:00</published><updated>2011-11-29T13:48:36.737-08:00</updated><title type='text'>We're in Business!</title><content type='html'>Added a new business building type. Still have to refine the structure. Also added user control over what types of building to generate on a face (video will be up after beta review). My beta review got delayed, so I'm hoping to stick in a few more building types by then.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ilYBMpR-wxQ/TtVTB61IRGI/AAAAAAAAADs/A8AsivK-QfU/s1600/buildings.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="253" src="http://2.bp.blogspot.com/-ilYBMpR-wxQ/TtVTB61IRGI/AAAAAAAAADs/A8AsivK-QfU/s400/buildings.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-7841927551431815640?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/7841927551431815640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/11/were-in-business.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7841927551431815640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7841927551431815640'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/11/were-in-business.html' title='We&apos;re in Business!'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ilYBMpR-wxQ/TtVTB61IRGI/AAAAAAAAADs/A8AsivK-QfU/s72-c/buildings.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-1120751762817685597</id><published>2011-11-27T00:18:00.000-08:00</published><updated>2011-11-27T00:19:19.076-08:00</updated><title type='text'>Roofs</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MyMXnwesSsA/TtHxnI8Be7I/AAAAAAAAADk/AcAFhA__79k/s1600/roofs.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://2.bp.blogspot.com/-MyMXnwesSsA/TtHxnI8Be7I/AAAAAAAAADk/AcAFhA__79k/s400/roofs.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Added ~5 roof variations. Need to fix footprint generation when the given lots aren't rectangular, which is a maximal rectangle problem. Here's to hoping Maya has some kind of function for that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-1120751762817685597?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/1120751762817685597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/11/roofs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/1120751762817685597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/1120751762817685597'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/11/roofs.html' title='Roofs'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-MyMXnwesSsA/TtHxnI8Be7I/AAAAAAAAADk/AcAFhA__79k/s72-c/roofs.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-3662749663254607634</id><published>2011-11-26T01:11:00.000-08:00</published><updated>2011-11-26T01:12:01.704-08:00</updated><title type='text'>Mini-City!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-5KDxcOUjQQg/TtCpWdUtGvI/AAAAAAAAADc/6VRp3pFRs6A/s1600/city.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://2.bp.blogspot.com/-5KDxcOUjQQg/TtCpWdUtGvI/AAAAAAAAADc/6VRp3pFRs6A/s400/city.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Some updates for the week:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implemented functionality to generate buildings given either a selected face, multiple selected faces, a one-faced polygon, or a multiple-faced polygon. This will offer a lot of flexibility for the user when they are selecting regions to generate buildings&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fixed window extrusions&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Altered a big chunk of my original framework for floor-generation. Before, my code would generate one floor, and return the top-most face. The subsequent function would take that face, duplicate it as a transform node, and extrude from that. The problem I ran into with this method was that, in cases where I subdivided the side faces for making windows, the resulting face that I returned would have all the excess vertices on its sides (imagine a square with a vertex for each corner, and then ten more vertices spaced evenly on each side). This was undesirable, since my code assumes that the footprints passed in are "clean" (as in, without necessary subdivisions). I fixed this by making each function duplicate the resulting face as a polygon/transform node (using a helper function I wrote). This way I can create a duplicate footprint before adding windows to the original one. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Figured out how to import Maya ASCII files into a scene in python. I'm planning on letting users import their own assets eventually&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Improved the building-generation flow in the code. The code stores all the faces in a list (if there are multiple faces to work on). For each face, the ground floor is generated first, and the rest of the floors are generated in a for-loop. Each level is split into two additional functions-- createLedge and createFloor. &lt;/li&gt;&lt;/ul&gt;Some things I'm hoping to finish before the beta review are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Port over the GUI code (right now all the values in Python are hardcoded; the GUI is still in MEL)&lt;/li&gt;&lt;li&gt;Create functions for roof-generation&lt;/li&gt;&lt;li&gt;Create generation functions for different building types&lt;/li&gt;&lt;li&gt;Start functionality for reading in an image file and mapping it to cells on an input map&lt;/li&gt;&lt;li&gt;Add more variation&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-3662749663254607634?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/3662749663254607634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/11/mini-city.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/3662749663254607634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/3662749663254607634'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/11/mini-city.html' title='Mini-City!'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-5KDxcOUjQQg/TtCpWdUtGvI/AAAAAAAAADc/6VRp3pFRs6A/s72-c/city.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-5452020279542822014</id><published>2011-11-21T00:47:00.000-08:00</published><updated>2011-11-21T00:47:58.506-08:00</updated><title type='text'>Making Windows</title><content type='html'>Spent the weekend fixing the the conflict between column generation and building base extrusion. I ended up keeping the initial footprint as a polygon with no subdivisions and creating the columns and base as such:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;inwardExtrude to create the actual footprint the building will be generated from (this is to give "sidewalk space")&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add subdivisions to the newly created footprint. Right now it's set to 10x10, but in the future this value can be pulled from the GUI&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Select the outer ring of faces for column generation.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ShrinkPolygonSelection (this command took a while to find) to select the inner cluster of faces. I wrote a helper function called deleteSubdivisions to remove the subdivisions for the building base extrusion. The reason for removing subdivisions is keep each wall face clean, so there are no conflicts when I do need to subdivide each face according to how many windows there should be. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Finally we can extrude the building body to the height of the columns to get something like this:&lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Iyz2A75KmWk/TsoH8Ty2d4I/AAAAAAAAADM/Ceg0JFWZ9sc/s1600/base.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="241" src="http://1.bp.blogspot.com/-Iyz2A75KmWk/TsoH8Ty2d4I/AAAAAAAAADM/Ceg0JFWZ9sc/s400/base.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Moving on to the floor generation, the hardest part was to figure out how to select the faces I needed, and how to subdivide each face properly. I actually started this portion earlier this week, except the lack of documentation for &lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/polySubdivideFacet.html"&gt;polySubdivideFacet&lt;/a&gt; led me to believe that it wasn't possible to subdivide in only one direction (ie vertically). Coupled with the fact that maya commands in the actual interface are named differently than the ones in the documentation, I was running around in circles for a few days before figuring out that you actually can subdivide a face in one direction (I ended up trying the Add Divisions tool in maya and realizing it was indeed calling polySubdivideFacet).&lt;br /&gt;&lt;br /&gt;That being done, the next step was to scale/extrude each cell to form the frame of a window. From looking through a bunch of other people's code, I learned that polySelectConstraint was the best way to isolate the faces I wanted (ie. all faces on the east side of the building). That being said, I ran into a bug stemming from the fact that I was running transformations on faces that were passed in. I hadn't anticipated the fact that when you iterate through each side face of a floor and subdivide it, you end up with more faces than you started with and trying to keep track of everything by explicitly naming faces becomes much more difficult. So somehow I ended up with this:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-mydP6gRPlpk/TsoLJ5lQwvI/AAAAAAAAADU/tpAzIgKSSVM/s1600/windows1.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="226" src="http://1.bp.blogspot.com/-mydP6gRPlpk/TsoLJ5lQwvI/AAAAAAAAADU/tpAzIgKSSVM/s400/windows1.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Lots and lots of windows&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I'm pretty sure I know what needs to be fixed, so this should be good to go by tomorrow. The windows were the last step to the floor creation function, so once that's done I should be able to create a building by calling createFloor numFloor-many times.&lt;br /&gt;&lt;br /&gt;Some takeaways:&lt;br /&gt;&lt;br /&gt;I feel that the majority of my time up until now has been spent on overcoming the rather steep learning-curve of knowing which maya commands to use to do what you want. I've also become more aware the the flexibility we can get by switching between vertex, edge, and face perspectives (a lot of the helper methods I wrote this weekend utilized this). Previously I was a bit hesitant to post pictures, since I felt what I had was rather lacking given the time that had passed. However I've realized the ramp-up time I took was worth it, since I feel a lot more comfortable coding for maya now, and my productivity has gone up quite a bit. &lt;br /&gt;&lt;br /&gt;Just for my own reference (in case all 300 of my tabs crash), here are the Maya commands I find myself using the most:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/polyEvaluate.html#flagboundingBox"&gt;polyEval&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/polyExtrudeFacet.html"&gt;polyExtrudeFacet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/polyCreateFacet.html"&gt;polyCreateFacet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/polySubdivideFacet.html"&gt;polySubdivideFacet&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/xform.html"&gt;xform&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/goog_897257937"&gt;&lt;span id="goog_897257935"&gt;&lt;/span&gt;&lt;span id="goog_897257936"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/polyListComponentConversion.html"&gt;polyListComponentConversion&lt;/a&gt; (or just cmds.ConvertSelectionToFaces())&lt;br /&gt;&lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/polySelectConstraint.html"&gt;polySelectConstraint&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/polyChipOff.html"&gt;polyChipOff&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.autodesk.com/global/docs/maya2012/en_us/CommandsPython/polySeparate.html"&gt;polySeparate&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-5452020279542822014?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/5452020279542822014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/11/making-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5452020279542822014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5452020279542822014'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/11/making-windows.html' title='Making Windows'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Iyz2A75KmWk/TsoH8Ty2d4I/AAAAAAAAADM/Ceg0JFWZ9sc/s72-c/base.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-7268473284964338411</id><published>2011-11-18T00:32:00.000-08:00</published><updated>2011-11-18T00:33:20.213-08:00</updated><title type='text'>Adding Details</title><content type='html'>Most of this week was spent on looking through sample scripts to see what command patterns other people use to generate building details. One thing I've realized is that although I'm fairly comfortable with MEL and python commands in Maya at this point, I still lack a lot of the experience that comes from long-term use of the languages. The most difficult part for me is knowing what commands I should use for a particular task. For example, the code I had before the alpha review had attempted to move the pivot of a model by using the move command in MEL. Now I know the the proper way to go about it is to use the xform command instead, since there is a scalePivot flag specifically for this operation. The python function I wrote for this looks like :&lt;br /&gt;&lt;br /&gt;def movePivotToBottom(obj):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; piv = cmds.xform(obj, q=1, ws=1, scalePivot=1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; newY = cmds.getAttr(obj + '.boundingBoxMinY')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; piv[1] = newY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmds.xform(obj, ws=1, scalePivot = piv)&lt;br /&gt;&lt;br /&gt;I've written a few helper functions like this one that have been helping me understand the maya commands better. Something else that confused me for a while is the difference between, say cmds.scale(...) and cmds.setAttr(... +&amp;nbsp; '.scale'). I've tried running both of them, and from what I can tell they both do the same thing. I just haven't figured out circumstances under which each command is advantageous.&lt;br /&gt;&lt;br /&gt;Another thing I've realized is that there are MEL commands that aren't found in the online documentation at all. After a frustrating few hours, I found out from a forum that these are either run time commands, or procs that come with maya. To check, you can run whatIs &lt;command name=""&gt;&lt;/command&gt;, and Maya would either tell you it's a run time command, or give you the path to the file containing the proc. At first I was worried that I wouldn't able to use certain commands/procs in python, but the maya.mel.eval command saved the day.&lt;br /&gt;&lt;br /&gt;I'm almost done writing the function that adds columns to the base of the building. One problem I'm trying to fix right now is that the column-generation code relies on the subdivision of the footprint mesh, and my building-body mesh runs on the assumption that the footprint doesn't have any subdivisions. I'm planning on just making a copy of the subdivision-less footprint, adding subdivisions, and deleting it after the columns are generated. The only remaining problem is to make sure the columns are never intersecting with the building body, which I hope to solve by tomorrow. As I become more familiar with what I like to call "design patterns" for creating building assets, I hope to speed up my process and have images ready by the next update. Until then, stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-7268473284964338411?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/7268473284964338411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/11/adding-details.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7268473284964338411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7268473284964338411'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/11/adding-details.html' title='Adding Details'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-1622361995094081479</id><published>2011-11-14T13:56:00.000-08:00</published><updated>2011-11-14T18:08:43.019-08:00</updated><title type='text'>Some Change in Direction + Updates</title><content type='html'>One of the comments that really stuck with me from the alpha review was why bother creating a building generation script so similar to City Engine, when City Engine already exists. I spent the weekend re-evaluating my project, and came up with some changes that I feel would set my project apart from most of the existing building generators.&lt;br /&gt;&lt;br /&gt;The majority of building/city scripts focus a lot on generating sufficient randomness, so the city doesn't look repetitive. Because of this, the user usually doesn't have a lot of say on what types of architecture should be generated at a particular location in the city (in CityEngine this is doable, but requires scripting on the user's end).&lt;br /&gt;&lt;br /&gt;I felt this would an interesting issue to address, so I decided to alter my project a bit, such that it focuses on generating a city with different building types, located according to user specifications. I started out identifying three basic types of architecture that exist in a typical city: business buildings, residential structures, and recreational areas, and listed some of their properties below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-891ctwR6BMU/TsGOElplVkI/AAAAAAAAADE/TAKUlpmY_oQ/s1600/sketch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-891ctwR6BMU/TsGOElplVkI/AAAAAAAAADE/TAKUlpmY_oQ/s640/sketch.png" width="440" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;During one of my review sessions, Norm had suggested the use of a heat-map to specify the placement of different architectural styles. Using that as my start-off point, I plan on having my project take in an image from the user, with each component of the RGB value corresponding to a building type. For example, R = business, G = residential, B = recreational. For colors that have multiple values, I can determine the building type by the dominating RGB value, or by a probability function. This will allow my project to be extensible; additional building types can be added anytime as long as an RGB pattern is specified. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Since Python has an excellent image processing library, I decided to continue my project in python from now on. Currently I'm in the middle of porting my code from MEL to python and thinking about setting up an inheritance structure (if any) for the different building files. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Some links that were really helpful in getting me up to speed with python/maya was &lt;a href="http://www.chadvernon.com/blog/resources/python-scripting-for-maya-artists/%20"&gt;Chad Vernon's tutorial site&lt;/a&gt; and &lt;a href="http://autodesk.com/us/maya/2011help/CommandsPython/"&gt;Autodesk's list of python commands in Maya&lt;/a&gt;. Check back in a couple days for more updates. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-1622361995094081479?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/1622361995094081479/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/11/some-change-in-direction-updates.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/1622361995094081479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/1622361995094081479'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/11/some-change-in-direction-updates.html' title='Some Change in Direction + Updates'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-891ctwR6BMU/TsGOElplVkI/AAAAAAAAADE/TAKUlpmY_oQ/s72-c/sketch.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-2198879361136839945</id><published>2011-11-06T18:04:00.000-08:00</published><updated>2011-11-06T18:04:38.705-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maya plugin wizard'/><title type='text'>Wrangling the Maya Plug-in Wizard</title><content type='html'>This week I started exploring the Maya plug-in for Visual Studio. Since the whole process took a while to figure out, I thought I'd document the steps I took in case someone else needs it later. The basic set of instructions can be found on the autodesk site &lt;a href="http://download.autodesk.com/global/docs/mayasdk2012/en_us/index.html?url=files/GUID-47569627-3312-4457-BB74-2D0470F15B3-153.htm,topicNumber=d28e14379"&gt;here&lt;/a&gt;, but additional steps are needed to make everything work (which I will mention below)&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt; The MayaPluginWizard.zip file is found in the devkit/plugin folder under wherever you installed Maya (for me it was C:\Program Files\Autodesk\Maya2012\devkit\pluginwizard). From there, open the MayaWizardReadme.txt, which will give you step by step instructions on adding the plugin wizard to VS (take note there are different instruction sets for 32 and 64 bits.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Unzip the MayaPluginWizard.zip file (I had to copy this onto the desktop first due to permissions). After navigating into the extracted directory, open the MayaPluginWizard.vsz file in a text editor like Notepad++, and make sure &lt;i&gt;Wizard=VsWizard.VsWizardEngine.9.0 &lt;/i&gt;refers to the correct version of Visual Studio (VS2008 is 9.0 so I didn't have to change anything).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Copy the following files to the "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcprojects" directory:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MayaPluginWizard.vsdir&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MayaPluginWizard.vsz&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MayaPluginWizard.ico&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Copy the *outer* "MayaPluginWizard" directory to "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCWizards".&amp;nbsp; NOTE: there should be a MayaPluginWizard directory within a MayaPluginWizard directory after this step.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now, since my version of Maya2012 is 64-bit, and VS is 32-bit, I needed to configure my VS for 64-bit applications. I followed the directions listed &lt;a href="http://software.intel.com/en-us/articles/configuring-microsoft-visual-studio-for-64-bit-applications/"&gt;here&lt;/a&gt; (basically you need to install the missing x64 compiler and tools). This requires you to have the VS installer on hand, which was a pain.&amp;nbsp; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Close VS if you have it open. Right click on the icon and select "Run as administrator". If you don't do this, you'll get an extremely vague popup saying "project upgrade failed". Figuring out this part was extremely frustrating. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now you should be able to create a project using the Maya Plugin Wizard. (Start Microsoft Visual Studio 9.0 and invoke File -&amp;gt; New -&amp;gt; Project -&amp;gt; Visual C++ Projects and select MayaPluginWizard.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The project will be created and then the solution can updated and built.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-2198879361136839945?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/2198879361136839945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/11/wrangling-maya-plug-in-wizard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/2198879361136839945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/2198879361136839945'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/11/wrangling-maya-plug-in-wizard.html' title='Wrangling the Maya Plug-in Wizard'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-4810815687398983622</id><published>2011-11-04T20:14:00.001-07:00</published><updated>2011-11-07T07:59:19.357-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='alpha review'/><title type='text'>Alpha Review Thoughts</title><content type='html'>After going through the comments on the Alpha Review, I've noted a few areas I could improve on, such as going into more detail on my project context as well as overall progress. The comments were helpful in giving me advice for resources as well as directions to consider for the project. Next I'll address some of the major points in the comments.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Will the final project be procedural generation of a city or just buildings?&lt;/b&gt;&lt;br /&gt;This is something I've been thinking about since a few weeks ago. There are two parts to procedurally generating a city: the generation of the building itself, and then&lt;b&gt; &lt;/b&gt;the creation of a city by populating city blocks with buildings. While I originally intended to focus on generating the building model, it's something that has been explored many times already, and I think it'd be more interesting to explore different ways the user can interface with Maya to generate a city.&amp;nbsp; Norm suggested I could have my script import a color-map from the user to determine which types of buildings should be generated in each region of a city. I feel this is a good point to start off on once I finish implementing the functionality to generate a basic building. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;How is this different from CityEngine and how does the user benefit from using a plug-in in Maya? &lt;/b&gt;&lt;br /&gt;At the moment, most of CityEngine's building generation is done through user-created files. I think it'd be neat if my script can offer a more visual approach like the one I mentioned earlier. Right now I have a couple ideas I'm planning on trying out next week. Until then, thanks for looking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-4810815687398983622?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/4810815687398983622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/11/to-be-updated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4810815687398983622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4810815687398983622'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/11/to-be-updated.html' title='Alpha Review Thoughts'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-788416917107653440</id><published>2011-10-30T20:03:00.000-07:00</published><updated>2011-12-09T21:45:15.936-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='alpha review demo'/><title type='text'>Alpha Review</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-24751f83201658" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v19.nonxt3.googlevideo.com/videoplayback?id%3D0024751f83201658%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1333063014%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3733BDF924602DE5E43552126A21F554E2D666E4.222660E278171F5EDEA9DA200826806210697C1F%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D24751f83201658%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dmw9SLFUANY6tmlMjRVcuPmO3TLE&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v19.nonxt3.googlevideo.com/videoplayback?id%3D0024751f83201658%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1333063014%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3733BDF924602DE5E43552126A21F554E2D666E4.222660E278171F5EDEA9DA200826806210697C1F%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D24751f83201658%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dmw9SLFUANY6tmlMjRVcuPmO3TLE&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Jump to see my current code &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;&lt;span style="font-size: xx-small;"&gt;//==================TO DO==============================//&lt;br /&gt;/*&lt;br /&gt;-user input check for empty footprint submission&lt;br /&gt;polyUnite, group&lt;br /&gt;add user config ledge&lt;br /&gt;make building hollow&lt;br /&gt;implement building scaling (generate more floors)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -add multiple types&lt;br /&gt;&lt;br /&gt;-create selection for floors+ledge via groups&lt;br /&gt;-attach jobScript for scaleY&lt;br /&gt;-when user scalesY, take floor height and add/subtract floors if necessary&lt;br /&gt;-update the text inside numFloors&lt;br /&gt;-move -r 0 -4.866739 0 test.scalePivot test.rotatePivot ; //moves pivot&lt;br /&gt;-add base and roof&lt;br /&gt;&lt;br /&gt;-pickWalk -d up; //to access an object's group&lt;br /&gt;-for ( $i=0; $i &amp;lt; size($conds); $i++ ){&lt;br /&gt;&lt;br /&gt;//==================TO FIX==============================//&lt;br /&gt;-how to select objects in a group???? (TO FIX)&lt;br /&gt;-How to manipulate Maya scale function&lt;br /&gt;-update GUI when ledge changes&lt;br /&gt;-add a curve as a tool&lt;br /&gt;-FIX SCALING BUG&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//================== CREATE GUI ==============================//&lt;br /&gt;&lt;br /&gt;if(`window -exists myUI`){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; deleteUI myUI; //deletes duplicate UI if it exists&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; windowPref -remove myUI;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;window -title "CIS 497: SmallTown" myUI;&lt;br /&gt;&lt;br /&gt;tabLayout myTab;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //BULDING CREATER TAB&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; columnLayout -adjustableColumn 1 columnCreation;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; frameLayout -label "Building Attributes";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; columnLayout;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textFieldGrp -l "Building Name:" -tx "DEFAULT_BLDG" Building_Name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textFieldButtonGrp -l "Foot Print:" -tx "DEFAULT_SQUARE_PLANE" -bl "Set" -buttonCommand "getSelectedFootPrint" FootPrint_Name;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setParent ..;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setParent ..;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; frameLayout -label "Floor Attributes" -collapsable true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; columnLayout;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; intFieldGrp -l "# of Floors:" -v1 3 NumFloors;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; floatFieldGrp -l "Floor Height:" -v1 3 FloorHeight;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; floatFieldGrp -l "Ledge Height:" -v1 1 LedgeHeight;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; floatFieldGrp -l "Ledge Protrusion:" -v1 0.2 ledgeProtrusion;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //ledge depth&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setParent ..;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setParent ..;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; frameLayout -label "Window Attributes" -collapsable true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; columnLayout;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; floatFieldGrp -l "Height Ratio:" -v1 0.8 WindowHeightRatio;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; floatFieldGrp -l "Width Ratio:" -v1 0.5 WindowWidthRatio;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setParent ..;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setParent ..;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; button -l "Create" -command "createBuilding";&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setParent ..;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //COMPONENT SELECTION TAB&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; columnLayout -rowSpacing 0 -adjustableColumn 1 columnSelection;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; text -label "\nClick on component type to filter them from the current selection \n";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; button -label "Floors" -command "selectComponent(\"floor\")" floorSelection;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; button -label "Ledges" -command "selectComponent(\"ledge\")" ledgeSelection;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; button -label "Windows" -command "selectComponent(\"window\")" windowSelection;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; button -label "ALL" -command "select -all" allSelection;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setParent ..;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;//Edit tab attributes&lt;br /&gt;tabLayout -edit &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -tabLabel columnCreation "Creation"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -tabLabel columnSelection "Selection"&lt;br /&gt;myTab;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;showWindow myUI; // displays the window&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//=================== BUILDING CREATION ============================//&lt;br /&gt;&lt;br /&gt;//Main method that generates the building geometry&lt;br /&gt;global proc createBuilding(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; createFootPrint();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; createFloors();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //put the building in a group&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select -all;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $buildingGroup = `group -name building`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //move building pivot&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select -r building.scalePivot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; move -y 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select -r building;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //gets the children within the group&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $geoNodes[] = `listRelatives -children -path $buildingGroup`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for($n = 0; $n &amp;lt; size($geoNodes); $n++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; select -add $geoNodes[$n];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; print ($geoNodes[$n] + "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scriptJob -attributeChange "building.sy" "checkY";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //delete footprint after everything's been created?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //polyUnite to unite everything?&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//creates the floors according to user specification&lt;br /&gt;global proc createFloors(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $footprintName = `textFieldButtonGrp -q -tx FootPrint_Name`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int $numFloors = `intFieldGrp -q -v1 NumFloors`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $floorHeight =`floatFieldGrp -q -v1 FloorHeight`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $ledgeHeight = `floatFieldGrp -q -v1 LedgeHeight`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $currentHeight = 0.0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int $i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for($i=0; $i&amp;lt;$numFloors; $i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; createFloor($i, $footprintName, $currentHeight, $floorHeight, $ledgeHeight);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $currentHeight += ($floorHeight + $ledgeHeight);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//creates a single floor starting from the specified current height&lt;br /&gt;global proc createFloor(int $numFloor, string $footprint, float $startHeight, float $floorHeight, float $ledgeHeight){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $tempFloorName = "floor" + $numFloor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $tempFloor[] = `duplicate -name $tempFloorName $footprint`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select -replace $tempFloor[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; move -relative 0 $startHeight 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConvertSelectionToFaces; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; polyExtrudeFacet -kft true -ltz $floorHeight;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print("created: " + $tempFloorName + "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //create the ledge that goes above a floor (for now)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $ledgeProtrusion = `floatFieldGrp -q -v1 ledgeProtrusion` + 1.0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $ledgeName =&amp;nbsp; "ledge" + $numFloor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $tempFloor[] = `duplicate -name $ledgeName $footprint`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select -replace $tempFloor[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $ledgeTrans = $startHeight+$floorHeight;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; move -relative 0 $ledgeTrans 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; scale -relative $ledgeProtrusion $ledgeProtrusion $ledgeProtrusion; //user config later&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ConvertSelectionToFaces; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; polyExtrudeFacet -kft true -ltz $ledgeHeight;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print("created: " + $ledgeName + "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //group the floor and ledge&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select -d;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select $tempFloorName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select -add $ledgeName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $levelName = "level" + $numFloor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //group -name $levelName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //print("grouped: " + $levelName + "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //scriptJob such that selecting a floor or ledge will select the group level it belongs to&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //scriptJob -ct "SomethingSelected" "pickWalk -d up";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//sets text for building footprint textbox. Assumes user only selected one object&lt;br /&gt;global proc getSelectedFootPrint(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $selection = `ls -sl`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; textFieldButtonGrp -edit -text $selection FootPrint_Name;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//establishes footprint for building&lt;br /&gt;global proc createFootPrint(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $footprintName = `textFieldButtonGrp -q -tx FootPrint_Name`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($footprintName == "DEFAULT_SQUARE_PLANE"){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; string $createdFootPrint[] = `polyPlane -ch on -o on -w 10 -h 10 -cuv 2 -name "DEFAULT_SQUARE_PLANE"`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; select -r $createdFootPrint[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*else{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; select -r $footprintName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print("createFootPrint complete!!\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//=================== BUILDING SELECTION ============================//&lt;br /&gt;&lt;br /&gt;//filters out all ledges from a user's selection&lt;br /&gt;global proc selectComponent(string $name){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $selection[] = `ls -sl`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( $obj in $selection){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if( `substring $obj 1 5` != $name){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; select -d $obj;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//=================== BUILDING EDITING ============================//&lt;br /&gt;global proc checkY(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //print("CHECK Y\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int $numFloors = `intFieldGrp -q -v1 NumFloors`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $floorHeight =`floatFieldGrp -q -v1 FloorHeight`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $ledgeHeight = `floatFieldGrp -q -v1 LedgeHeight`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string $footprintName = `textFieldButtonGrp -q -tx FootPrint_Name`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $sy = `getAttr building.sy`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $currentHeight = 0.0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for($i=0; $i&amp;lt;$numFloors; $i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $currentHeight += ($floorHeight + $ledgeHeight);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; float $newHeight = $sy * $currentHeight;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print("S.Y IS: " + $sy + " CURRENT HEIGHT IS: " + $currentHeight + " NEW HEIGHT IS: " + $newHeight + "\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print("CHECK\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //createFloor($numFloors, $footprintName, $newHeight, $floorHeight, $ledgeHeight);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //add floor to building group&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //first delete everything&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for($i=0; $i&amp;lt;$numFloors; $i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $delFloor = "floor" + $i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $delLedge = "ledge" + $i;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; delete $delFloor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; delete $delLedge;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //then recreate everything again with the recalculated values&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $numFloors = $newHeight / ($floorHeight + $ledgeHeight); //first get the closest number of floors as an int&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $floorHeight = $newHeight / $numFloors - $ledgeHeight; //then adjust the floorHeight such that the new Height is exactly what the user specified&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $currentHeight = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for($i=0; $i&amp;lt;$numFloors; $i++){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; createFloor($i, $footprintName, $currentHeight, $floorHeight, $ledgeHeight);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $currentHeight += ($floorHeight + $ledgeHeight);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //replace the values in the GUI&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; intFieldGrp -edit -v1 $numFloors NumFloors;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; floatFieldGrp -edit -v1 $floorHeight FloorHeight;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; refresh;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//===================OLD STUFF============================//&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Retrieves all values from the GUI and assigns them to variables&lt;br /&gt;// NOT CALLED, FOR REFERENCE ONLY&lt;br /&gt;global proc retrieveGUIValues(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //building attributes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $buildingName = `textFieldGrp -q -tx Building_Name`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $footprintName = `textFieldButtonGrp -q -tx FootPrint_Name`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //floor attributes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $numFloors = `intFieldGrp -q -v1 NumFloors`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $floorHeight =`floatFieldGrp -q -v1 FloorHeight`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ledgeHeight = `floatFieldGrp -q -v1 LedgeHeight`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //window attributes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $windowHeightRatio = `floatFieldGrp -q -v1 WindowHeightRatio`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $windowWidthRatio = `floatFieldGrp -q -v1 WindowWidthRatio`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //check&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("creating building named " + $buildingName + " with " + $numFloors + " floors! LOL Just Kidding! \n");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;global proc makeSimpleBuilding(int $height){&lt;br /&gt;&amp;nbsp;&amp;nbsp; polyPlane -name myPlane -sw 3 -sh 3;&lt;br /&gt;&amp;nbsp;&amp;nbsp; ConvertSelectionToFaces; &lt;br /&gt;&amp;nbsp;&amp;nbsp; polyExtrudeFacet -kft true -ltz $height;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;global proc printText(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "\n You have clicked me!";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;window;&lt;br /&gt;columnLayout;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; button -label "button yay" -command "printText()";&lt;br /&gt;showWindow;&lt;br /&gt;&lt;br /&gt;window;&lt;br /&gt;columnLayout -adjustableColumn true;&lt;br /&gt;textField -text "Enter building height" -enterCommand "makeSimpleBuilding(3)";&lt;br /&gt;showWindow;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-788416917107653440?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/788416917107653440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/10/alpha-review.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/788416917107653440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/788416917107653440'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/10/alpha-review.html' title='Alpha Review'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-367543357574154334</id><published>2011-10-20T01:02:00.000-07:00</published><updated>2011-10-20T01:08:30.131-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Shaping Up the GUI</title><content type='html'>TO DO:&lt;br /&gt;Have a GUI that creates a very basic building according to user specifications [3/6]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;IN PROCESS:&lt;br /&gt;Fine tune details for implementation [1/6]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;COMPLETED:&lt;br /&gt;Set up SVN [0/1]&lt;br /&gt;Research dis/advantages of using Python vs. C++&amp;nbsp; API's for Maya [0/3]&lt;br /&gt;Experiment with MEL UI creation [0/3] &lt;br /&gt;Read about Maya &lt;a href="http://nccastaff.bournemouth.ac.uk/jmacey/RobTheBloke/www/"&gt;Nodes&lt;/a&gt;[0/5]&lt;br /&gt;Read about Maya C++ API, MEL Scripting [0/10]&lt;br /&gt;Build basic plug-in for Maya in MEL[0/4] &lt;br /&gt;Set up framework [0/5]&lt;br /&gt;&lt;br /&gt;While looking through tutorials on making MEL GUI's, I came across &lt;a href="http://wiki.bk.tudelft.nl/toi-pedia/MEL_-_Interfaces"&gt;this page&lt;/a&gt; that introduced groups of controls, such as intFieldGroup. Previously I had been trying to create my GUI with individual text labels, fields, and buttons, but this simplified the process a lot. Right now I have a GUI with frame and column layouts. I also figured out how to extract the user input as a button command, so my next step is to finish creating the geometry from these inputs.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-2XpRh9vp1TQ/Tp_UklFU8HI/AAAAAAAAAC8/mBUss2x6Omg/s1600/GUI.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="256" src="http://2.bp.blogspot.com/-2XpRh9vp1TQ/Tp_UklFU8HI/AAAAAAAAAC8/mBUss2x6Omg/s320/GUI.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The name is a placeholder for now...&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;For now, I plan on limiting the generation of the building to just user interaction with the GUI. Once I complete all the functionality listed in the current GUI, I'll start incorporating dynamic resizing. From this &lt;a href="http://caad.arch.ethz.ch/info/maya/manual/Commands/ELFCommands/ELFCmdsOverview.html#UsingSystemEvents"&gt;tutorial&lt;/a&gt;,&amp;nbsp; the process seems like it will have to incorporate scriptJobs. I haven't looked very closely at this section yet, but plan on reading more about it in the future.&lt;br /&gt;&lt;br /&gt;A small problem I hadn't foreseen is global variables in MEL.&amp;nbsp; I initially had a global proc that extracts all the user inputs from the GUI and dumps them into variables, since it's easier to keep track of what's what (see below):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;// Retrieves all values from the GUI and assigns them to variables&lt;br /&gt;global proc retrieveGUIValues(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //building attributes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $buildingName = `textFieldGrp -q -tx Building_Name`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $footprintName = `textFieldButtonGrp -q -tx FootPrint_Name`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //floor attributes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $numFloors = `intFieldGrp -q -v1 NumFloors`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $floorHeight =`floatFieldGrp -q -v1 FloorHeight`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ledgeHeight = `floatFieldGrp -q -v1 LedgeHeight`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //window attributes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $windowHeightRatio = `floatFieldGrp -q -v1 WindowHeightRatio`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $windowWidthRatio = `floatFieldGrp -q -v1 WindowWidthRatio`;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //check&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ("creating building named " + $buildingName + " with " + $numFloors + " floors! LOL Just Kidding! \n");&lt;br /&gt;}&lt;/blockquote&gt;&amp;nbsp;However, I soon realized that these variables are out of the scope of all the other procs, and I need to specify them as global to rectify this. Using global variables requires an additional step of declaring it within each proc, which in the end isn't much cleaner than just re-extracting the user input whenever I need it, so off to the recycle bin this goes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-367543357574154334?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/367543357574154334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/10/shaping-up-gui.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/367543357574154334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/367543357574154334'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/10/shaping-up-gui.html' title='Shaping Up the GUI'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-2XpRh9vp1TQ/Tp_UklFU8HI/AAAAAAAAAC8/mBUss2x6Omg/s72-c/GUI.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-977579226571732957</id><published>2011-10-09T20:29:00.000-07:00</published><updated>2011-10-09T20:29:50.039-07:00</updated><title type='text'>Another Update</title><content type='html'>TO DO:&lt;br /&gt;Build basic plug-in for Maya in MEL[1/4]&lt;br /&gt;&lt;br /&gt;IN PROCESS:&lt;br /&gt;Fine tune details for implementation [2/6]&lt;br /&gt;Set up framework [2/5]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;COMPLETED:&lt;br /&gt;Set up SVN [0/1]&lt;br /&gt;Research dis/advantages of using Python vs. C++&amp;nbsp; API's for Maya [0/3]&lt;br /&gt;Experiment with MEL UI creation [0/3] &lt;br /&gt;Read about Maya &lt;a href="http://nccastaff.bournemouth.ac.uk/jmacey/RobTheBloke/www/"&gt;Nodes&lt;/a&gt;[0/5]&lt;br /&gt;Read about Maya C++ API, MEL Scripting [0/10]&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Kind of a short update for this week. I've finished reading the first 3 chapters of Complete Maya Programming, which covers the Maya Dependency Graph and MEL scripting. Right now I'm trying to create a simple GUI that lets users extrude the body of a building from a custom "footprint". At the moment I'm having some trouble with executing commands when the user interacts with the GUI, but hopefully that will be fixed shortly. I will have another update when that's done.&lt;br /&gt;&lt;br /&gt;Thanks for looking and have a great fall break!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-977579226571732957?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/977579226571732957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/10/another-update.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/977579226571732957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/977579226571732957'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/10/another-update.html' title='Another Update'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-5298561506306912128</id><published>2011-09-29T16:10:00.000-07:00</published><updated>2011-09-30T00:59:53.923-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maya'/><category scheme='http://www.blogger.com/atom/ns#' term='mel'/><category scheme='http://www.blogger.com/atom/ns#' term='gliffy'/><category scheme='http://www.blogger.com/atom/ns#' term='scrum'/><title type='text'>Starting Out, Logistics, and More</title><content type='html'>When I was interning at EA over the summer, my team adopted Scrum, which is an agile process for software development mostly suited for projects with rapidly changing requirements. Though my senior design doesn't fit that description exactly (though the "rapidly changing requirements" might come into play later when I start figuring what's possible and what isn't), the process of labeling each task and estimating a "burn down" time was immensely helpful for keeping me on track at work. Thus, a logical thing to do now is to apply the most practical aspects of Scrum to this project. So, without further ado, I present my makeshift text-based scrum board, along with tasks from my initial game plan and some for next week:&lt;br /&gt;&lt;br /&gt;Note: Numbers in [ ] are estimated time left /  projected hours needed&lt;br /&gt;&lt;br /&gt;TO DO:&lt;br /&gt;Build basic plug-in for Maya in MEL[4/4]&lt;br /&gt;Read about Maya &lt;a href="http://nccastaff.bournemouth.ac.uk/jmacey/RobTheBloke/www/"&gt;Nodes&lt;/a&gt;[5/5] &lt;br /&gt;&lt;br /&gt;IN PROCESS:&lt;br /&gt;Read about Maya C++ API, MEL Scripting [8/10]&amp;nbsp; &lt;br /&gt;Fine tune details for implementation [5/6]&lt;br /&gt;Set up framework [4/5]&lt;br /&gt;Experiment with MEL UI creation [2/3]&lt;br /&gt;&lt;br /&gt;COMPLETED:&lt;br /&gt;Set up SVN [0/1]&lt;br /&gt;Research dis/advantages of using Python vs. C++&amp;nbsp; API's for Maya [0/3]&lt;br /&gt;&lt;br /&gt;I spent part of this week reading about the two main API's available for writing tools for Maya, namely Python and C++. From what I gathered online, most users agreed that python was an ideal entry point for learning to program for Maya because of its intuitive syntax. However, it's not as well documented online as its C++ counterpart. After talking with Joe and some friends with more expertise in the area, it seemed that C++ is more ideal for this project, since it offers more control and functionality (ie. creating custom nodes in Maya). I also found an &lt;a href="http://koichitamura.blogspot.com/2008/08/how-to-access-to-maya-python-object.html"&gt;article &lt;/a&gt;on interfacing between the two API's if the need ever arises.&lt;br /&gt;&lt;br /&gt;I've also started to explore creating MEL user interfaces. I'm working through the examples on &lt;a href="http://caad.arch.ethz.ch/info/maya/manual/Commands/ELFCommands/ELFCmdsOverview.html#Introduction"&gt;this site&lt;/a&gt; right now, so far everything's been easy to follow, and it's encouraging to have even a little bit of visual feedback.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-aXRWVAIM8VI/ToVrnmevTpI/AAAAAAAAACw/mMzoSkJs4c4/s1600/testMEL.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="267" src="http://1.bp.blogspot.com/-aXRWVAIM8VI/ToVrnmevTpI/AAAAAAAAACw/mMzoSkJs4c4/s400/testMEL.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Test window generated from the tutorial&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;For the next week, I'm planning on reading more about the &lt;a href="http://www.richmoz.com/oldsite/tutorials/maya/depgraph/depgraph.aspx"&gt;Maya Dependency Graph&lt;/a&gt; and &lt;a href="http://www.richmoz.com/oldsite/tutorials/maya/api/eznode.aspx?AspxAutoDetectCookieSupport=1"&gt;creating nodes&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Finally, here's the preliminary system diagram for my building generator:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-akT-LFmNPmE/ToV2rhpkvGI/AAAAAAAAAC4/O9Wuf-bSoQM/s1600/system_flow.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="424" src="http://1.bp.blogspot.com/-akT-LFmNPmE/ToV2rhpkvGI/AAAAAAAAAC4/O9Wuf-bSoQM/s640/system_flow.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I'm planning on emailing a few people this week to make sure that this is a reasonable approach, so the chart is subject to change depending on how the feedback turns out.&lt;br /&gt;&lt;br /&gt;Also, Gliffy (the chart generator) is pretty amazing (thanks Marley!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-5298561506306912128?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/5298561506306912128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/09/starting-out-logistics-and-more.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5298561506306912128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5298561506306912128'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/09/starting-out-logistics-and-more.html' title='Starting Out, Logistics, and More'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-aXRWVAIM8VI/ToVrnmevTpI/AAAAAAAAACw/mMzoSkJs4c4/s72-c/testMEL.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-2010561549616089346</id><published>2011-09-23T01:08:00.000-07:00</published><updated>2011-09-23T01:08:01.199-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='approach'/><category scheme='http://www.blogger.com/atom/ns#' term='set-up'/><title type='text'>An Updated Approach</title><content type='html'>This week I rewrote some parts of my original design document, and I've up with a more detailed approach for my project. After talking to people who have implemented similar projects, the general advice I gathered was that it was best to ensure basic functionality first, before trying to implement all the details of a paper. &lt;br /&gt;&lt;br /&gt;My major goal last week was to read through all the papers and find one that is most relative to my project. Vijay, who worked on the Building Building Builder project from a previous year, recommended &lt;a href="http://www.cg.tuwien.ac.at/research/publications/2008/LIPP-2008-IEV/"&gt;Interactive Visual Editing of Grammars for Procedural Architecture&lt;/a&gt;, so I've decided to focus on this paper after I've created the tool with some basic functionalities.&lt;br /&gt;&lt;br /&gt;As for the work flow, my plan for next week is to finish reading about scripting for and have a basic plug-in running that can create a cube and apply basic transformations (namely scale and rotation). The next step after that would be to add additional faces and edges onto the cube.&lt;br /&gt;&lt;br /&gt;I'm really looking forward to next week and having a skeleton up and running. Thoughts and suggestions are much appreciated!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-2010561549616089346?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/2010561549616089346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/09/updated-approach.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/2010561549616089346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/2010561549616089346'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/09/updated-approach.html' title='An Updated Approach'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-4680228224105979443</id><published>2011-09-14T23:01:00.000-07:00</published><updated>2011-09-14T23:01:39.158-07:00</updated><title type='text'>Game Plan</title><content type='html'>&lt;b&gt;Things to check off for next week:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Finish background reading &lt;/li&gt;&lt;li&gt;Read about Maya C++ API, MEL Scripting&lt;/li&gt;&lt;li&gt;Iron out details for implementation&lt;/li&gt;&lt;li&gt;Start setting up the framework&lt;/li&gt;&lt;li&gt;Set up SVN &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-4680228224105979443?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/4680228224105979443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/09/game-plan.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4680228224105979443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4680228224105979443'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/09/game-plan.html' title='Game Plan'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-4590225986773478667</id><published>2011-09-14T22:23:00.000-07:00</published><updated>2011-09-14T22:26:18.264-07:00</updated><title type='text'>And So It Begins...</title><content type='html'>&lt;div class="Abstract" style="margin-bottom: 4.0pt; margin-left: .2in; margin-right: 20.15pt; margin-top: 0in; mso-hyphenate: none; mso-list: none; text-indent: 0in;"&gt;&lt;/div&gt;&lt;div class="Abstract" style="margin: 0in 20.15pt 4pt 0.2in; text-indent: 0in;"&gt;&lt;b&gt;Procedural Generation of Urban Environments: the Abstract&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;With the advent of modern movies and video games, the demand for visually stimulating environments comprised of unique components has been ever increasing. Traditionally, the problem has been solved by simply creating more assets. However, given the time and effort necessary to create 3D models, a producer risks spending a lot of resources on what is ultimately a small part of the final product. Consequently, this solution becomes much less feasible.&lt;/div&gt;&lt;div class="Abstract" style="margin-bottom: 4.0pt; margin-left: .2in; margin-right: 20.15pt; margin-top: 0in; mso-hyphenate: none; mso-list: none; text-indent: 0in;"&gt;An alternative to manually creating individual components is procedural generation. The result is a large number of variable 3D assets generated in relatively a short amount of time compared to the traditional method. This project will focus on the procedural generation of buildings in an urban environment. Users will be able to create procedurally generated buildings via a Maya authoring tool plug-in. The ultimate goal is for users to create urban environments without the need to model each structure individually.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-4590225986773478667?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/4590225986773478667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2011/09/cis-497-procedural-generation-of-urban.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4590225986773478667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4590225986773478667'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2011/09/cis-497-procedural-generation-of-urban.html' title='And So It Begins...'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-430935013426524723</id><published>2010-08-04T14:06:00.000-07:00</published><updated>2010-08-04T14:22:17.648-07:00</updated><title type='text'>Some Updates</title><content type='html'>I talked to Ben about randomizing lots, and he introduced me to stochastic rules in CityEngine, which creates variation in lots using randomness. One example (take from the CE help page) would look like:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Lot --&amp;gt;&lt;br /&gt;30%  : Lot("residential")&lt;br /&gt;20%  : Lot("retail")&lt;br /&gt;else : Lot("industrial")&lt;/blockquote&gt;&lt;br /&gt;Currently I'm using another method to randomly generate structures on a lot. It's "get" function that returns different file paths at different probabilities. See the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;getBuilding =&lt;br /&gt;20%: "assets/shack1.obj" &lt;br /&gt;30%: "assets/shack2.obj"&lt;br /&gt;20%: "assets/shack3.obj"&lt;br /&gt;else: "assets/shack4.obj"&lt;/blockquote&gt;&lt;br /&gt;For now I find this easier than the previous method since it doesn't require me to define a new symbol for each possibility. I'll probably use it when I need a lot to develop into different types of procedurally generated buildings (Right now a majority of them are OBJ's...I cheated a little).&lt;br /&gt;&lt;br /&gt;I also inserted vegetation into the city. It's funny how much of a differences trees make.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnWlBSscZI/AAAAAAAAABQ/eHcP4Gp8G8E/s1600/ss.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="336" src="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnWlBSscZI/AAAAAAAAABQ/eHcP4Gp8G8E/s400/ss.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Trees added without wireframes (since they tend to make the leaf-clusters look black)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_cafbJTsDTr8/TFnW7DZacpI/AAAAAAAAABY/mIz91OILg4Q/s1600/ss2.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="322" src="http://2.bp.blogspot.com/_cafbJTsDTr8/TFnW7DZacpI/AAAAAAAAABY/mIz91OILg4Q/s400/ss2.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Now with wireframes (just for comparison) &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnXEbSPPfI/AAAAAAAAABg/MHj_8Svp9OQ/s1600/ss3.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="332" src="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnXEbSPPfI/AAAAAAAAABg/MHj_8Svp9OQ/s400/ss3.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;City view. The shadows really slowed the computer down. They look nice, though.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also met with Joe, Norm, and Ben today. For now I'll be working mostly under Ben. For his city he wanted procedurally generated buildings (as opposed to OBJ's), since that method would allow us to identify doors on a building. We will be starting with roughly 5 types of buildings: Home, School, Inns, Food/Convenience Stores, and Restaurants. A high level of detail isn't required this time, so most of the architecture will be very basic.&lt;br /&gt;&lt;br /&gt;Also working on the slides at the moment. Since I'm posting here already, I might as well include the pictures I'll show on the slides.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnYAyXl3NI/AAAAAAAAABo/jE6W_dyQqaQ/s1600/ss4.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="355" src="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnYAyXl3NI/AAAAAAAAABo/jE6W_dyQqaQ/s400/ss4.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Street network generated in CityEngine via Open Street Map file (of Basra)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnYTXcX31I/AAAAAAAAABw/4ZEYziyUy9Y/s1600/ss5.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="366" src="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnYTXcX31I/AAAAAAAAABw/4ZEYziyUy9Y/s400/ss5.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Lots generated from the street network&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnYajFSsAI/AAAAAAAAAB4/kGvkfX5zLNY/s1600/ss6.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="377" src="http://4.bp.blogspot.com/_cafbJTsDTr8/TFnYajFSsAI/AAAAAAAAAB4/kGvkfX5zLNY/s400/ss6.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Sidewalks and roads are added.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By golly do I love blogger's editor. I feel like I'm being spoiled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-430935013426524723?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/430935013426524723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/08/some-updates.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/430935013426524723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/430935013426524723'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/08/some-updates.html' title='Some Updates'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_cafbJTsDTr8/TFnWlBSscZI/AAAAAAAAABQ/eHcP4Gp8G8E/s72-c/ss.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-7119299265227156295</id><published>2010-08-02T15:00:00.000-07:00</published><updated>2010-08-02T15:49:45.023-07:00</updated><title type='text'>Back to work</title><content type='html'>SAAST just ended, so I'm back at the SIG Lab. Decided today would be a good day to start keeping track of what I do (should have really started earlier, oh well)&lt;br /&gt;&lt;br /&gt;Recap so far:&lt;br /&gt;Created a scalable shack that generates additional garage doors at different positions depending on how wide the shack is.&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-f398e6cd8a47bfe2" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v8.nonxt5.googlevideo.com/videoplayback?id%3Df398e6cd8a47bfe2%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1333063014%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DBF265AE89E6B3BE9FB3BC821D88799589B41C81.C3505845CC11BDA99D987F158E9FB881DBA2CF5%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Df398e6cd8a47bfe2%26offsetms%3D5000%26itag%3Dw160%26sigh%3DPjGrg7f7VIRvoFuNkxo5V4r6lwA&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v8.nonxt5.googlevideo.com/videoplayback?id%3Df398e6cd8a47bfe2%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1333063014%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DBF265AE89E6B3BE9FB3BC821D88799589B41C81.C3505845CC11BDA99D987F158E9FB881DBA2CF5%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Df398e6cd8a47bfe2%26offsetms%3D5000%26itag%3Dw160%26sigh%3DPjGrg7f7VIRvoFuNkxo5V4r6lwA&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Maya model imported into CityEngine:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_cafbJTsDTr8/TFdC93Sp7MI/AAAAAAAAABI/nvWr0_cex9U/s1600/ss.png"&gt;&lt;img style="cursor: pointer; width: 250px; " src="http://2.bp.blogspot.com/_cafbJTsDTr8/TFdC93Sp7MI/AAAAAAAAABI/nvWr0_cex9U/s200/ss.png" alt="" id="BLOGGER_PHOTO_ID_5500939100437998786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Planning out the city:&lt;/span&gt;&lt;br /&gt;One of the problems I've been thinking about was how to specify which lot contained what building. One of the potential ideas that came up was to create a variable that generated a building number randomly, and grow the lot from that. Something like:&lt;br /&gt;&lt;br /&gt;//ATTRIBUTES//&lt;br /&gt;attr building_type = rand(1,10) //we have 10 building styles here&lt;br /&gt;&lt;br /&gt;//RULES//&lt;br /&gt;Lot --&amp;gt;&lt;br /&gt;  case building_type == 1: Shack1&lt;br /&gt;  case building_type == 2: Shack2&lt;br /&gt;  ...&lt;br /&gt;  else: Generic_building&lt;br /&gt;&lt;br /&gt;Unfortunately, nothing happened when I tried running the above code. The next idea I tried was to filter the type of structure generated by the scopes of the lot sizes. Currently, if the x-scope and z-scope differ no more than 1, then a shack-structure will be created from the Lot. If either scope is smaller than 20, then a generic building will be created from that Lot. Although this system isn't very sophisticated, it does do the job of partitioning different lots for different structures. More changes may be implemented in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-7119299265227156295?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/7119299265227156295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/08/back-to-work.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7119299265227156295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7119299265227156295'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/08/back-to-work.html' title='Back to work'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_cafbJTsDTr8/TFdC93Sp7MI/AAAAAAAAABI/nvWr0_cex9U/s72-c/ss.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-7871631758403970687</id><published>2010-05-01T15:19:00.000-07:00</published><updated>2010-05-01T15:22:18.055-07:00</updated><title type='text'>Another Update</title><content type='html'>-Just figured out how to convert .csv files into .dbf format via ArcCatalogue&lt;br /&gt;&lt;br /&gt;Python Script I have so far:&lt;br /&gt;# Most of it referenced from this &lt;a href="http://resources.arcgis.com/content/kbase?fa=articleShow&amp;d=31879"&gt;tutorial&lt;/a&gt;&lt;br /&gt;# There are some functions in the tutorial that returned an error when I tried to run it. This might be a version issue.&lt;br /&gt;&lt;br /&gt;import sys, string, os, arcgisscripting&lt;br /&gt;&lt;br /&gt;gp = arcgisscripting.create(9.3)&lt;br /&gt;&lt;br /&gt;gp.Overwriteoutput = 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#Specify the location for the new shapefile.&lt;br /&gt;&lt;br /&gt;#gp.CreateFeatureclass("C:/Users/Alice/Desktop/Testing", "test_line.shp", "POLYLINE")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#Define Coordinate System&lt;br /&gt;&lt;br /&gt;gp.workspace = "C:/Users/Alice/Desktop/Testing"&lt;br /&gt;&lt;br /&gt;gp.toolbox = "management"&lt;br /&gt;&lt;br /&gt;coordsys = "Coordinate Systems/Geographic Coordinate Systems/World/WGS 1984.prj"&lt;br /&gt;&lt;br /&gt;gp.defineprojection("test_line.shp", coordsys)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#Open a cursor to insert rows into the shapefile.&lt;br /&gt;&lt;br /&gt;cur = gp.InsertCursor("C:/Users/Alice/Desktop/Testing/test_line.shp")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#Create an Array and Point object.&lt;br /&gt;&lt;br /&gt;lineArray = gp.CreateObject("Array")&lt;br /&gt;&lt;br /&gt;pnt = gp.CreateObject("Point")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#Open a cursor on the table of XY coordinates to read from. &lt;br /&gt;&lt;br /&gt;rows = gp.SearchCursor("C:/Users/Alice/Desktop/Testing/pythonTest.dbf")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#Reset the cursor to the top.&lt;br /&gt;&lt;br /&gt;row = rows.Next()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#Loop through each record in the XY table..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;while row:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    #Set the X and Y coordinates for origin vertex.&lt;br /&gt;&lt;br /&gt;    pnt.x = row.GetValue("Origin_x")&lt;br /&gt;&lt;br /&gt;    pnt.y = row.GetValue("Origin_y")&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    #Insert it into the line array    &lt;br /&gt;&lt;br /&gt;    lineArray.add(pnt)&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    #Set the X and Y coordinates for destination vertex&lt;br /&gt;&lt;br /&gt;    pnt.x = row.GetValue("dest_x")&lt;br /&gt;&lt;br /&gt;    pnt.y = row.GetValue("dest_y")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    #Insert it into the line array&lt;br /&gt;&lt;br /&gt;    lineArray.add(pnt)&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    #Go to next row in table.    &lt;br /&gt;&lt;br /&gt;    row = rows.Next()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    #Insert the new poly into the feature class.&lt;br /&gt;&lt;br /&gt;    feat = cur.NewRow()&lt;br /&gt;&lt;br /&gt;    feat.shape = lineArray&lt;br /&gt;&lt;br /&gt;    cur.InsertRow(feat)&lt;br /&gt;&lt;br /&gt;    lineArray.RemoveAll()&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;del cur, row, rows&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-7871631758403970687?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/7871631758403970687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/05/another-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7871631758403970687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7871631758403970687'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/05/another-update.html' title='Another Update'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-6147891335455465800</id><published>2010-05-01T11:33:00.000-07:00</published><updated>2010-05-01T11:43:55.022-07:00</updated><title type='text'>Update May 1st</title><content type='html'>Right now the goal is to create a python script that plots the location on arcMap when given a longitude and latitude.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-6147891335455465800?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/6147891335455465800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/05/update-may-1st.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/6147891335455465800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/6147891335455465800'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/05/update-may-1st.html' title='Update May 1st'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-5591279107691740422</id><published>2010-04-13T16:19:00.000-07:00</published><updated>2010-04-13T16:49:32.251-07:00</updated><title type='text'>4/13 Update</title><content type='html'>I visited Ken today to help me with ArcGIS. Below are my notes for setting up a route between 2 points using ArcMap.&lt;br /&gt;&lt;br /&gt;-Download files from PASDA-&gt;open in ArcCatalogue-&gt;drag the file into 'layers' in ArcMap&lt;br /&gt;&lt;br /&gt;-Use the select tool to select part of the map (the whole map will take too long to process)&lt;br /&gt;&lt;br /&gt;-In the layer window-&gt;selection tab:&lt;br /&gt;      Right click&lt;br /&gt;      Create layer from selected features&lt;br /&gt;      Clear selected features(this is a button on the right toolbar)&lt;br /&gt;      To save this, right-click -&gt; data -&gt; export data&lt;br /&gt;&lt;br /&gt;-Create address Locator&lt;br /&gt;      A.L.Style: US Streets w/ zone&lt;br /&gt;      Ref. Data: teststreet&lt;br /&gt;      Role: Primary table -&gt;press OK&lt;br /&gt;&lt;br /&gt;-Geocode Addresses&lt;br /&gt;      Input table-&gt;we need to make one&lt;br /&gt;      New excel file: 2 columns, address + zip. Enter 2 rows, arbitrary values&lt;br /&gt;      Save as CSV (we called it adds.csv)&lt;br /&gt;      *Note: don't share data files between programs. ArcGIS doesn't like that&lt;br /&gt;      Refresh ArcCatalogue (right click)&lt;br /&gt;      Drag adds file to layers (under source tab)&lt;br /&gt;      Right click-&gt;open&lt;br /&gt;      Back to geocode address-&gt;input table = adds&lt;br /&gt;      Input Address Locator the one we made -&gt; has 2 points from the 2 rows in adds.&lt;br /&gt;      Use the 'i' tool to identify&lt;br /&gt;&lt;br /&gt;      Note: you can use Tools-&gt;geocoding-&gt;rematch addresses if adds are out of date&lt;br /&gt;&lt;br /&gt;Network Analyst&lt;br /&gt;      Toolbar(view-&gt;status bar-&gt;networkanalyst)&lt;br /&gt;      To turn on: tools-&gt;extensions-&gt;check the box next to 'network analyst'&lt;br /&gt;      &lt;br /&gt;      For more info: click Help-&gt;network analyst-&gt;workflow description&lt;br /&gt;&lt;br /&gt;      In catalog: street test-&gt; new network dataset&lt;br /&gt;      Impedance = length&lt;br /&gt;      Click OK-&gt;creates a streetstest_ND file&lt;br /&gt;      Move the 2 ND files from catalog to streetfile layer&lt;br /&gt;      New route-&gt;route-&gt;load locations-&gt;add ouradds&lt;br /&gt;      Finally click the solve button&lt;br /&gt;&lt;br /&gt;Just plotting down 2 points and creating a route between them took over 40 minutes. This was without python scripting, or moving the dots at all.&lt;br /&gt;&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_cafbJTsDTr8/S8UC_Isbv6I/AAAAAAAAABA/qy2gcWDQy60/s1600/map.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 108px;" src="http://3.bp.blogspot.com/_cafbJTsDTr8/S8UC_Isbv6I/AAAAAAAAABA/qy2gcWDQy60/s200/map.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5459773406945460130" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-5591279107691740422?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/5591279107691740422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/04/413-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5591279107691740422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5591279107691740422'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/04/413-update.html' title='4/13 Update'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_cafbJTsDTr8/S8UC_Isbv6I/AAAAAAAAABA/qy2gcWDQy60/s72-c/map.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-8834247776511736599</id><published>2010-04-11T21:38:00.000-07:00</published><updated>2010-04-11T21:59:36.758-07:00</updated><title type='text'>Progress Report 4/12</title><content type='html'>-Received 2 documents from Ken about Agent Analyst. I have a pretty clear idea on what Agent Analyst does now, it's just the implementation part that I'm still a bit lost on. The tutorials I've worked on give a basic sense of how to create an agent, but I haven't found any that would help my figure out how to create agents that visibly move across a map. &lt;a href="http://www.institute.redlands.edu/agentanalyst/tutorials.aspx"&gt;These&lt;/a&gt; are the ones I've been working through. The Schelling GIS tutorial seems close to what I am looking for, since it involves agents on a map, but they aren't displayed individually, and the tutorial provides a pre-made file to load rather than guide the user in creating the agents and their movements. So far I've only found 3 tutorials---it seems that support for AgentAnalyst is quite limited, which is a bit frustrating.&lt;br /&gt;&lt;br /&gt;I was able to download a world street file from the esri website &lt;a href="http://resources.esri.com/arcgisdesktop/index.cfm?fa=content&amp;tab=Layers"&gt;(here)&lt;/a&gt;, so it seems that PASDA will not be needed for now.&lt;br /&gt;&lt;br /&gt;If Agent Analyst does not work, I've compiled some other programs to consider:&lt;br /&gt;&lt;br /&gt;1. Attempt to place object on a layer in ArcMap, and manipulate it along a street using Python script. I've emailed Ken about the probability of this alternative. Right now I'm waiting on a reply.&lt;br /&gt;&lt;br /&gt;2. I found a version of Repast that integrates with eclipse (Repast Symphony). It seems like there is a lot more support for it than Agent Analyst. I'm already looking through tutorials. This is probably the best alternative if the above does not work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-8834247776511736599?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/8834247776511736599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/04/progress-report-412.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/8834247776511736599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/8834247776511736599'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/04/progress-report-412.html' title='Progress Report 4/12'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-4560543277895867855</id><published>2010-04-09T08:18:00.000-07:00</published><updated>2010-04-09T08:24:16.424-07:00</updated><title type='text'>4/9 Progress Report</title><content type='html'>-Got Agent Analyst/Repast to work with ArcMap by using the Legacy version. &lt;br /&gt;-Worked through tutorials to familiarize with the program&lt;br /&gt;-Currently I got Agent Analyst to run within ArcMap and modify its map contents (see below)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_cafbJTsDTr8/S79F2VJhqnI/AAAAAAAAAAU/oXoOgegWTm4/s1600/chicago.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://4.bp.blogspot.com/_cafbJTsDTr8/S79F2VJhqnI/AAAAAAAAAAU/oXoOgegWTm4/s200/chicago.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5458158073088682610" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;br /&gt;Simple vector model of Chicago in Schelling tutorial by Arika Ligmann-Zielinska, Ph.D. Associate, San Diego State University&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-It is possible to create agents using RepastPy, but making them display on the map is still in question (most likely possible though)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-4560543277895867855?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/4560543277895867855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/04/49-progress-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4560543277895867855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/4560543277895867855'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/04/49-progress-report.html' title='4/9 Progress Report'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_cafbJTsDTr8/S79F2VJhqnI/AAAAAAAAAAU/oXoOgegWTm4/s72-c/chicago.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-3968670036952247676</id><published>2010-04-07T19:45:00.001-07:00</published><updated>2010-04-07T19:45:51.048-07:00</updated><title type='text'></title><content type='html'>selfnote: http://www.institute.redlands.edu/agentanalyst/tutorials.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-3968670036952247676?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/3968670036952247676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/04/selfnote-httpwww.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/3968670036952247676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/3968670036952247676'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/04/selfnote-httpwww.html' title=''/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-808363363452514858</id><published>2010-04-04T20:00:00.000-07:00</published><updated>2010-04-04T20:12:53.388-07:00</updated><title type='text'>4/2 Meeting Recap</title><content type='html'>-Simulation will be one which people exit building during a fire drill.&lt;br /&gt;-Blockades will be place along routes in order to force agents to navigate detours. &lt;br /&gt;-Possibility of redefining my part of the project if Python scripting for ArcGIS doesn't work out&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some updates:&lt;br /&gt;&lt;br /&gt;-Emailed Ken about executable jar file error for Agent Analyst/Repast. Seems like &lt;br /&gt;it is indeed an incompatibility issue. He might be able to find version 9.2 for ArcGIS (which should run with Repast/AA)&lt;br /&gt;&lt;br /&gt;-Links to check out:&lt;br /&gt;http://repast.sourceforge.net/&lt;br /&gt;http://forums.esri.com/Thread.asp?c=93&amp;f=983&amp;t=288747&lt;br /&gt;&lt;br /&gt;Happy Easter!!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cheezdailysquee.files.wordpress.com/2010/04/129140326459591741.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px;" src="http://cheezdailysquee.files.wordpress.com/2010/04/129140326459591741.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-808363363452514858?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/808363363452514858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/04/42-meeting-recap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/808363363452514858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/808363363452514858'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/04/42-meeting-recap.html' title='4/2 Meeting Recap'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-5356269519475577778</id><published>2010-03-31T18:40:00.000-07:00</published><updated>2010-04-01T23:54:46.423-07:00</updated><title type='text'>Progress Report 4/2</title><content type='html'>-Installed PythonWin (along with python 2.6.5)&lt;br /&gt;&lt;br /&gt;-Installed Repast 3/ Agent Analyst. There are still a few problems with it though--the jar executable won't run, and the batch file needed to add a toolbox into arcMap (agent_analyst.bat) generates a 'path not found' error. Not sure if this is due to installation issues, or incompatibility with the our version of ArcGIS (Most current version for Repast/AA is 9.2, we're running version 9.3)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Notes to self:&lt;br /&gt;-So right now I have PythonWin running, and it is able to import arcgisscripting. I tried creating a geoprocessing object, gp = arcgisscripting.create(9.2), which works fine as well. Now I just need to figure out how to link these PythonWin and ArcMap together (shouldn't be hard...), and demo data to practice with.&lt;br /&gt;&lt;br /&gt;Helpful Links:&lt;br /&gt;&lt;br /&gt;Course-worth's of material:&lt;br /&gt;      http://www.gis.usu.edu/~jlowry/python/&lt;br /&gt;&lt;br /&gt;http://blogs.esri.com/Support/blogs/esritrainingmatters/archive/2009/09/10/want-to-create-python-scripts-try-the-f-c-p-m-t-method.aspx&lt;br /&gt;&lt;br /&gt;-Python ArcObjects&lt;br /&gt;      http://www.pierssen.com/arcgis/misc.htm&lt;br /&gt;      http://www.pierssen.com/arcgis/upload/misc/python_arcobjects.pdf&lt;br /&gt;&lt;br /&gt;-Agent Analyst &lt;br /&gt;      http://www.institute.redlands.edu/AgentAnalyst/ &lt;br /&gt;      Latest version of this supports ArcGIS 9.2, we have 9.3 so there might be compatibility issues.&lt;br /&gt;&lt;br /&gt;-Repast&lt;br /&gt;      http://www.institute.redlands.edu/AgentAnalyst/repast.aspx&lt;br /&gt;&lt;br /&gt;-PythonWin (for scripting in ArcGIS)&lt;br /&gt;      Download: http://sourceforge.net/projects/pywin32/&lt;br /&gt;      "Getting Started with Writing Geoprocessing Scripts"&lt;br /&gt;      "Installing PythonWin"&lt;br /&gt;&lt;br /&gt;-Python 2.6.5&lt;br /&gt;      Download: http://www.python.org/download/releases/2.6.5/&lt;br /&gt;      Needed for PythonWin&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cuteoverload.files.wordpress.com/2010/03/121.jpg?w=560&amp;h=425"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 360px;" src="http://cuteoverload.files.wordpress.com/2010/03/121.jpg?w=560&amp;h=425" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-5356269519475577778?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/5356269519475577778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/03/progress-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5356269519475577778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5356269519475577778'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/03/progress-report.html' title='Progress Report 4/2'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-5370918336985029237</id><published>2010-03-31T17:50:00.000-07:00</published><updated>2010-03-31T18:08:12.127-07:00</updated><title type='text'>3/26 Meeting Recap</title><content type='html'>-For arcGIS in javascript, fine a file that stores information such as street numbers. They are generally called LTADD, LFADD (can be found on the PASDA website; spatial data info)&lt;br /&gt;&lt;br /&gt;-Look into ArcMap Network Analyst&lt;br /&gt;-Look into ArcGIS Repast Agent Analyst&lt;br /&gt;&lt;br /&gt;-Pythonwin from sourceforge( for arcGIS)&lt;br /&gt;&lt;br /&gt;-Find icon on top of little red hammer -&gt;tool utilities -&gt;create script&lt;br /&gt;look for help menu in arcMap for help with arcpy (Python API for arcGIS)&lt;br /&gt;&lt;br /&gt;-ksteif@sp2.upenn.edu (email for help)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-5370918336985029237?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/5370918336985029237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/03/326-meeting-recap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5370918336985029237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5370918336985029237'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/03/326-meeting-recap.html' title='3/26 Meeting Recap'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-8945061891959902239</id><published>2010-03-26T00:14:00.000-07:00</published><updated>2010-03-26T00:29:06.410-07:00</updated><title type='text'>Progress Report 3/26</title><content type='html'>So it seems like it is possible to generate routes in the ArgGIS javascript API as well as locate points on the map based on an address input. The API links are below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jshelp_start.htm#jshelp/intro_route_overview.htm"&gt;Routing overview&lt;/a&gt;&lt;br /&gt;&lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jsapi_start.htm#jsapi/Graphic.htm"&gt;RouteTask&lt;/a&gt;&lt;br /&gt;&lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jshelp_start.htm#jshelp/intro_route_routetask.htm"&gt;Working with RouteTask&lt;/a&gt;&lt;br /&gt;&lt;a href="http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jsapi_start.htm#jsapi/GraphicsLayer.htm"&gt;Locator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some difficulties:&lt;br /&gt;-It's difficult to determine what type of map to import due to the variety of maps available and the fact that they  can only be viewed in ArcGlobe.&lt;br /&gt;(http://server.arcgisonline.com/ArcGIS/rest/services)&lt;br /&gt;&lt;br /&gt;-Still trying to figure out the syntax for RouteTask. (Will most likely be working on this next week)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Locator for ArcGIS:&lt;br /&gt;http://resources.esri.com/arcgisserver/apis/javascript/arcgis/index.cfm?fa=codeGalleryDetails&amp;scriptID=16821&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-8945061891959902239?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/8945061891959902239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/03/progress-report-326.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/8945061891959902239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/8945061891959902239'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/03/progress-report-326.html' title='Progress Report 3/26'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-6661157085261878400</id><published>2010-03-25T20:46:00.000-07:00</published><updated>2010-03-25T21:03:54.065-07:00</updated><title type='text'>3/19 Meeting Recap</title><content type='html'>-Try to connect the dots to actual geographical information on the map.&lt;br /&gt;-See if additional data can be added to a map (ie. sidewalk)&lt;br /&gt;-Check if ArcGIS has a route planner.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-6661157085261878400?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/6661157085261878400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/03/319-meeting-recap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/6661157085261878400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/6661157085261878400'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/03/319-meeting-recap.html' title='3/19 Meeting Recap'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-7820150413374104475</id><published>2010-03-04T23:47:00.000-08:00</published><updated>2010-03-31T18:46:06.862-07:00</updated><title type='text'>3/5 Progress Report</title><content type='html'>Figured out how to animate the dot using a timer. Also, instead using a for-loop, I used setInterval:&lt;br /&gt;&lt;br /&gt;function animate(){&lt;br /&gt;          var pt = oldLoc, i = 0, timer; // no global variables declared...&lt;br /&gt;&lt;br /&gt;          timer = setInterval(function () {&lt;br /&gt;            pt.y += 20;&lt;br /&gt;            pt.x += 20;&lt;br /&gt;            graphic.setGeometry(pt);&lt;br /&gt;            graphic.show();&lt;br /&gt;            //dojo.byId("info").innerHTML += "testingcheck";&lt;br /&gt;&lt;br /&gt;            if (i &gt;= 1000) { // stop condition&lt;br /&gt;              clearInterval(timer);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            i++;&lt;br /&gt;          }, 5);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;And Happy Spring Break!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://icanhascheezburger.files.wordpress.com/2010/02/funny-pictures-kitten-tries-to-stay-neutral.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px;" src="http://icanhascheezburger.files.wordpress.com/2010/02/funny-pictures-kitten-tries-to-stay-neutral.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-7820150413374104475?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/7820150413374104475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/03/progress-report-35.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7820150413374104475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7820150413374104475'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/03/progress-report-35.html' title='3/5 Progress Report'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-321195233506018929</id><published>2010-02-26T20:32:00.000-08:00</published><updated>2010-02-27T11:27:18.833-08:00</updated><title type='text'>2/25 Update and Meeting Recap</title><content type='html'>&lt;span style="font-style: italic;"&gt;Progress Report:&lt;/span&gt;&lt;br /&gt;*Since ThinkMap is deeply integrated into GCAT, it would be extremely difficult to replace it with FreeMind. Currently we're waiting on a 30-day trial version of ThinkMap.&lt;br /&gt;&lt;br /&gt;*ArcMap can only render animations over the entire map. ArcScene can animate object layers along a set path (seen &lt;a href="http://www.youtube.com/watch?v=V2j9PTls6Cs"&gt;here&lt;/a&gt;) but it requires environmental data which can be difficult to generate.&lt;br /&gt;&lt;br /&gt;*Using the ArcGIS Javascript API seems to be the best solution now. The user is able to generate markers on a map and move it. Animation still needs some work.&lt;br /&gt;&lt;br /&gt;*The PowerPoint presentation can be downloaded &lt;a href="http://www.2shared.com/file/11719801/1f5ebef3/LM_slides.html"&gt;here&lt;/a&gt;.&lt;br /&gt;*The dragPoint file can be downloaded &lt;a href="http://www.2shared.com/file/11720167/951eb295/dragpointsimple.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;To Do:&lt;/span&gt;&lt;br /&gt;*Figure out how to animate the markers using a timer in javascript.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cheezdailysquee.files.wordpress.com/2010/02/129115953318659898.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 300px;" src="http://cheezdailysquee.files.wordpress.com/2010/02/129115953318659898.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://cheezdailysquee.files.wordpress.com/2010/02/129115953318659898.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-321195233506018929?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/321195233506018929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/02/225-update-and-meeting-recap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/321195233506018929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/321195233506018929'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/02/225-update-and-meeting-recap.html' title='2/25 Update and Meeting Recap'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-7192530980477953455</id><published>2010-02-22T20:26:00.000-08:00</published><updated>2010-02-27T11:21:16.071-08:00</updated><title type='text'>2/19/2010 Meeting Recap</title><content type='html'>&lt;span style="font-style: italic;"&gt;Notes:&lt;/span&gt;&lt;br /&gt;*Since we're still in the process of getting a license of ThinkMap, Norm suggested looking into FreeMind, which is an entity-relation map and happens to be free.&lt;br /&gt;&lt;br /&gt;*My idea of using coordinates on the ArcMap map display to display data didn't go through--Zooming in would cause the image to pixelate/degenerate, which is why we need an actual object/objects on the map.&lt;br /&gt;&lt;br /&gt;*Random tidbits: Lockheed Martin has developed a software called CultureSim that we might use in place of GCAT should it prove to be insufficient.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;To-Do:&lt;/span&gt;&lt;br /&gt;*Figure out if ThinkMap can be replaced by FreeMind&lt;br /&gt;*Which databases have we been given to pull all the components of GCAT together.&lt;br /&gt;*Find out if it is possible to animate marker objects in ArcMap.&lt;br /&gt;&lt;br /&gt;Edit/Update: Joe heard back from ThinkMap. Seems like they're not willing to give us a free license so that's most likely a no-go.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_cafbJTsDTr8/S4lwR9prcPI/AAAAAAAAAAM/4MHDfPh0sKM/s1600-h/nomnomnomcat.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_cafbJTsDTr8/S4lwR9prcPI/AAAAAAAAAAM/4MHDfPh0sKM/s200/nomnomnomcat.gif" alt="" id="BLOGGER_PHOTO_ID_5443005078563418354" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-7192530980477953455?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/7192530980477953455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/02/2192010-meeting-recap.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7192530980477953455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/7192530980477953455'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/02/2192010-meeting-recap.html' title='2/19/2010 Meeting Recap'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_cafbJTsDTr8/S4lwR9prcPI/AAAAAAAAAAM/4MHDfPh0sKM/s72-c/nomnomnomcat.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-5169450525234498553</id><published>2010-02-19T10:06:00.000-08:00</published><updated>2010-02-19T10:33:31.141-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ArcMap'/><title type='text'>2/19/10 Progress Report</title><content type='html'>*Installed MySQL. Next step would be to look up tutorials/become familiar with the program.&lt;br /&gt;&lt;br /&gt;*From the documentation Norm sent me it seems like GCAT needs an additional software, Thinkmap, to fuction. I emailed them about obtaining a limited license and Joe will be taking care of the rest of the process.&lt;br /&gt;&lt;br /&gt;*It seems like ArcMap can support animation from &lt;a href="http://webhelp.esri.com/arcgisdesktop/9.2/pdf/Animation_in_ArcMap_Tutorial.pdf"&gt;this tutorial &lt;/a&gt;I found. From the introduction:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Animations can be created in ArcMap™, ArcScene™ or ArcGlobe™. With an animation, you can visualize changes to the properties of objects (such as layers, the camera, or the map extent). By altering layer properties, such as the time stamp that is displayed or layer visibility and transparency, you can create interesting animations that can be used to analyze data through time or to view information in various layers. By altering the extent (ArcMap) or the camera position (ArcScene or ArcGlobe), you can create an animation that moves around a map, scene or globe. Examples of applications that would benefit from being viewed as an animation include:&lt;br /&gt;&lt;br /&gt;• The occurrence of events through time, such as hurricanes or precipitation, the spread of a disease, or population change&lt;br /&gt;• The navigation of an object (such as a car) through a landscape (example &lt;a href="http://www.esri.com/news/arcuser/0103/files/animation.pdf"&gt;here&lt;/a&gt;)&lt;br /&gt;• A visualization of information in multiple layers by applying transparency&lt;/blockquote&gt;&lt;br /&gt;The second bullet seems close to what we're looking for, although I'm not sure what the effects would be if we had multiple objects (possible lag?). Also, judging from the videos, it seems that ArcMap is more suited for animating a spread rather than single points of data. If GCAT doesn't work, this may be a viable option.&lt;br /&gt;&lt;br /&gt;More references:&lt;br /&gt;&lt;a href="http://webhelp.esri.com/arcgisdesktop/9.2/tutorials/animationinarcmap_tutorial_index.htm"&gt;Animation in ArcMap tutorial index&lt;/a&gt;&lt;br /&gt;&lt;a href="http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=About_building_animations_in_ArcGIS"&gt;Animating data through time&lt;/a&gt;&lt;br /&gt;&lt;a href="http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=Sample_animation_videos"&gt;Sample animation videos&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-5169450525234498553?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/5169450525234498553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/02/21910-progress-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5169450525234498553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/5169450525234498553'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/02/21910-progress-report.html' title='2/19/10 Progress Report'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7911484440325715821.post-238913152735064591</id><published>2010-02-16T19:55:00.000-08:00</published><updated>2010-02-19T10:06:04.429-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='arcGIS'/><title type='text'>2/12/10 Meeting Notes</title><content type='html'>*Try to see if it's possible to move dots from one latitude/longitude to another in GCAT using a simple or loop&lt;br /&gt;&lt;br /&gt;*See if trail can be updated/erased. Some ideas for erasure was to put a street-colored on the old dot and masking it out, since redrawing the whole map would be expensive&lt;br /&gt;&lt;br /&gt;*Next meeting will be at 2pm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7911484440325715821-238913152735064591?l=y-alice.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://y-alice.blogspot.com/feeds/238913152735064591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://y-alice.blogspot.com/2010/02/alright.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/238913152735064591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7911484440325715821/posts/default/238913152735064591'/><link rel='alternate' type='text/html' href='http://y-alice.blogspot.com/2010/02/alright.html' title='2/12/10 Meeting Notes'/><author><name>Alice</name><uri>http://www.blogger.com/profile/01494200204037788494</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
