Wednesday, April 8, 2015

What's new in CityEngine 2015

New version of CityEngine is out. Elliot Hartley already mentioned it in his blog post but there are some other changes. One prominent change is Scene tab. Here is the default appearance (for Redlands Redevelopment project.


From this it may not be clear what is the left square used for. It is used to assign a colour to that layer. Simple click on the box brings up a colour selector and result is like below.



Another new feature of Scene tab is ability to create layer groups . In Scene tab right mouse click and from context menu select New, Group Layer


New group is empty and one can just simply drag & drop layers into the group, just like in ArcMap. Of course, new group layer can have a colour assigned. If it is assigned it overrides colours of layers within it.



From CGA standpoint getTreeKey is important. From help documentaion:

The unique TreeKey of the shape being derived, formatted as a string list. The TreeKey is a list of integer numbers denoting the path from the root shape to the shape being derived in the shape tree. Each number denotes the 0-based child index

Sample code for using getTreeKey

CGA Code
Init-->
    print(getTreeKey() + " - Init") 
 center(xz)
 extrude(10)
 comp(f) { front: Facade}
 
Facade-->
 print(getTreeKey() + " - Facade")
 split(y) {'0.5 : Floor }*
 
Floor-->
 print(getTreeKey() + " - Floor")
 split(x) { '0.1 : Wall | '0.3 : Window | '0.1 : Wall }*
  
Wall-->
 print(getTreeKey() + " - Wall")

Window-->
 print(getTreeKey() + " - Window")


and it's output

0; - Init
0;0; - Facade
0;0;0; - Floor
0;0;1; - Floor
0;0;0;0; - Wall
0;0;0;1; - Window
0;0;0;2; - Wall
0;0;0;3; - Wall
0;0;0;4; - Window
0;0;0;5; - Wall
0;0;1;0; - Wall
0;0;1;1; - Window
0;0;1;2; - Wall
0;0;1;3; - Wall
0;0;1;4; - Window
0;0;1;5; - Wall

More on new features when I spend little bit more time with this version.

Tuesday, September 16, 2014

CityEngine 2014.1 released

New version of CityEngine, 2014.1 is released. It is not a major release but there are new features and bug fixes.

Here are new features:

new operations:
  • deleteHoles operation.
new functions:
  • geometry.nHoles function.
  • geometry.isClosedSurface function.
new CGA Utility Library functions:
  • listTerminate function
new features:
  • alignScopeToGeometry, convexify, envelope, cleanupGeometry, innerRect, scatter, setback, shape{L|U|O} and reduceGeometry operations and geometry.isClosedSurface, geometry.area (with selector) functions: holes in polygons are now supported.
  • convexify, innerRect, offset, shape{L|U|O} operations: uv coordinates and vertex normals are not deleted anymore but interpolated for new inner vertices.
  • convexify, innerRect, offset operations: result is not planarized anymore.
  • color, operation: support for setting opacity (alpha).

In short better support for holes and addition of colour transparency.


Changes to existing features:
  • Changed the defaults for recursion detection:
    • Maximum derivation depth: from 99 to 1024.
    • Maximum derivation width: from 50000 to 100000.
    • Maximum function call depth: from 256 to 1024.
  • Optimized function memory overhead (i.e. more interleaved functions beyond the default limit are possible now before crash - actual limit depends on platform & function).
  • Collada reader: added support for polygons with holes.
  • str function and print, report operations: made float-to-string conversion independent of locale (some numbers might be formatted differently now).
  • Internal geometry cleanup: improved handling of illegal holes (overlapping holes, wrong vertex order).

That's it for initial post. More information fill follow when I get more time to try it out.

Thursday, December 12, 2013

New in CityEngine 2013 - Part 4

Street improvements

In the last post I describe the situation when I import land parcel and road centrelines and the problem there is that parcels don't have defined street edge/frontage. In 2012 one can select the required edge of a parcel and set it as First/Street edge. To do that for whole lot you had to reach to Python. With Python script there were cases requiring multiple runs but it was doable. With CE 2013 new option is available - 'Compute First/Street Edges'.


Running this on example parcels and roads from previous post red shows the street edges.


This is great improvement and I'll use this on regular basis.

Another new feature is ability to create more realistic motorway/freeway connections/intersections. Here is an example of default smart type of intersection.


After selecting the node I can change it to 'Freeway' to achieve this:


This of course changes the shape of road segment and the changes are as below.




The last option I'll test today is changing the curves from straight to curves. There are no changes here so example pictures will suffice.











New in CityEngine 2013 - Part 3

Now I am re-creating a project in CE2013 I did very recently in the previous version. Following the same steps and using default settings of CE2013 I noticed some differences in generated blocks and models. The demo I was working on is using Desert City example rules and assets and here is the screenshot from version 2012.


When doing the same workflow in 2013 here is what I got


In CE2013 blocks have rounded corners and the models for buildings have less variation. Comparing street creation setting from both versions in 2013 street width is now 7 (changed from 14) and lane width setting is not there. So far I can't confirm if rounding of the created blocks is a result of change in import module for OSM. I'll do more testing and post the results soon.

Majority of local councils in New Zealand use CRS (Core Record System) as source of parcel and road centreline data. Importing these in CE (after some cleanup of parcels) would produce situation like below.


In this release we can use 'Fit Widths to Shape' option from Graph menu. To test this I have intentionally picked an area where we have simple, straight streets and some more interesting ones. The result is shown below.

Some work is required and it could be as simple as tuning the parameters used. I will definitely explore this option whole lot more.

While talking about street shapes, there are new standard shapes (and rules) available

  • Freeway
  • FreewayEntry
  • RoundaboutIsland
  • Roundabout
  • RoundAboutEntry
  • Joint




This opens up options for greater tuning and control of street shapes. I like the options for roundabouts since there are lot of them in New Zealand.

Next option to explore is bridge generation but for that I'll have put aside little bit more time...

Wednesday, December 11, 2013

New in CityEngine 2013 - Part 2

Now all tutorial and examples are downloaded and it is time to check Change log. Elliot Hartley already had a post showing these here but I'll check if there are any changes since then.

There are no changes, so that list is still valid.

From that list here are the ones I'll have closer look:


  • envelope operation due to great power and applications in planning
  • cleanupGeometrycompextrudesplit operations for supporting holes. This may produce interesting models. geometry.nFacesgeometry.area,geometry.volume functions support holes (there is a risk of losing them in subsequent operations)

Important changes:


attr/const functions evaluation order - "Starting with 2013.1, all attr/const functions are evaluated before the start rule is applied, on the initial shape with a seedian derived from the initial shape's seedian. The initial shape's random number generator state is not affected. While the new approach makes CGA coding more "intuitive", it changes the behaviour compared to older versions.". This will require change of habits and bit more structure when writing rules

inf/nan checks: "CGA 2013.1 introduces a unified inf/nan behaviour: checking of all float paramers of builtin functionality can be set to either "ignore" (= don't check), "abort with error" or "replace with zero" see Grammarcore Preferences). The default behaviour is "replace with zero", which comes closest to the classic behaviour." While CGA 2013.1 provides more debugging capabilities regarding inf/nan values, the behaviour is different than in previous versions.


Envelope operation

New parameter direction is added with two options - normal or world.up. Changing existing rules won't be difficult and all you need to do is change from 

envelope(MaxHeight, FrontBaseHeight, FrontAngle, BackBaseHeight, BackAngle, SideBaseHeight, RightAngle, SideBaseHeight, LeftAngle)

to 

envelope(world.y, MaxHeight, FrontBaseHeight, FrontAngle, BackBaseHeight, BackAngle, SideBaseHeight, RightAngle, SideBaseHeight, LeftAngle)

for the rule I had in my example. So if you are importing your existing 2012 projects minor changes will be required but you may want to consider using new features and functions and keep in mind important changes listed above.

While this is useful addition there is room for improvement or handling of special cases. Several city councils in New Zealand have a requirement for building envelopes determined by a combination of street and compass orientation. I should put this on ides site and see how many votes it will get.

Now it's time to review and rewrite previous work.

New in CityEngine 2013 - Part 1

After a long wait CityEngine 2013.1 is finally released. At the moment it is available for distributors only but general release will follow in few days.

Here I'll describe new features as I encounter them while working with CE 2013. This is by no means ranking or other "top X features" list.

Here we go!

Installation

If you already have CE 2012 you can install CE 2013 in different folder (default location is fine) and having single use I didn't have to do anything license wise. Furthermore, now I can run both versions on my machine! Not in the same time of course. As usual, we have examples and tutorials available for download. These are updated for new version but I don't expect any dramatic changes.

CityWizard


New City Wizard looks very much like the old one. It is still using same heightfield, texture and obstacle map.



New are the structure of the assets folders and large number of textures (400+).  Also we now have 80 new trees created by e-on software in 3 different forms. These are handled by a separate rule in the wizard.

Fan tree

Model tree

Analytical tree


There is a new addition to user interface - a progress bar when generating models.


Of course, new rules are driving the City Wizard but I didn't have time yet to explore and learn from this example.

That's it for now, more to come.




Friday, December 7, 2012

Geodesign at Asia Pacific User Conference

From  November 5-7  Esri Asia Pacific User Conference (APUC) took place in Auckland at Sky City Convention Centre. The Conference was hosted by the company I work for, Eagle Technology Group Ltd. We had the privilege of having a number of people from Esri at the conference including Jack Dangermond, Bernie Szukalski, Mary Jo Fraley, Dave Wrazien, Derek Law, Nathan Benett, Michael Boryski, Dean Angelides, Leonard Jayamohan, Michael Kim, Dave Buyers, Linda Peters and Sandy Szukalski.


Plenary session

I had the privilege and honor of presenting at several sessions. Most of these presentations were about CityEngine and geodesign. The first task was to prepare a 10 minute demonstration of CityEngine in geodesign for plenary session on first day of the Conference. If you are familiar with CityEngine and it's features you know it is a difficult choice on its own. Plus, I had to demonstrate the other parts of ArcGIS and their relevance for geodesign. For this very short demonstration I have decided to demonstrate the following workflow:
  • Create a new subdivision in CityEngine
  • Export designed options to file geodatabase
  • Run analysis on new subdivision in ArcScene
  • Export layers from CityEngine to WebScene
If you would like to see the video of the presentation follow this link and skip to 2:19:41 for start of demo.

Here are some screenshots form the CityEngine project made for plenary session.


High density residential with grid pattern

Low density residential with radial roads

Screenshots above show two alternative designs for this subdivision. First one is a high(er) density residential with grid road pattern. To make alternative design a bit more interesting we went with radial roads and low(er) density residential option with inclusion of open/green space and trees planted on some parcels.

One of features in CityEngine 2012 is ability to visualize buildable volumes. These volumes are defined differently for different district plan zones. Screenshots below show buildable volumes for different zones in different colours.

Buildable volumes by zoning type

Different zones volumes

Here are few more screenshots from the project.



Generated design options were exported to file geodatabase and used in ArcScene for analysis. Here is how data looks in ArcScene.





Lastly, the selected layers from scene in CityEngine are exported as WebScene. If you would like to have a look it is available on ArcGIS.com. You will have to use WebGL capable browser like Chrome or FireFox.

Geodesign workshop

My second engagement was conducting a half day workshop titled "Geodesign – Using ArcGIS to Improve the Design Process". In the first part of this workshop we briefly discussed the principles of geodesign. To get everyone engaged I devised an activity where each team of four carefully picked attendees had to produce first draft design of subdivision  in Auckland. Design teams had a mixture of representatives from organizations like local government, consultants, utilities, conservation. They used very simple tools - coloured pencils and printed black & white map. The key here was collaboration like in every geodesign project. The second part of the workshop was all about CityEngine. We discussed basics of CityEngine and explored some possibilities for rule development in this example of subdivision.

Third task was a breakout session on "Using CityEngine 2012 for Geodesign" on Tuesday. In this session I gave a brief overview of CityEngine and discussed with the audience some options and approaches taken  in example shown in screenshots above. Slides from the presentation will be available on NZ Esri Users Group web site.

All work I did for the conference would not be possible without support of several people. On of them is my colleague Bernice O'Hanlon who designed "Option A" and "Option B". Another big Thank You goes to esri Zurich staff Gert Van Maren and Matthias Buehler.