<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic CityEngine Text Attribute Rule in ArcGIS CityEngine Questions</title>
    <link>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751574#M9897</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to use a Rule to create a text from attributes that would be embedded into a room polygon, and base on its length (horizontal or vertical) (See the attachment) also wit would be good to scale text base on the polygon size&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This example I use one Rule per Room - that's why its different orientation/ size&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG alt="fmeattributesrule.png" class="image-1 jive-image" src="https://community.esri.com/legacyfs/online/114548_fmeattributesrule.png" style="height: auto;" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And here is the Rule I have been using, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can you help me modify this Rule, so I can use only one Rule for all my floors ( and get all the room names - scaled and placed horizontal/vertical- based on it room area?)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Lukasz&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/**&lt;/P&gt;&lt;P&gt; * File:&amp;nbsp;&amp;nbsp;&amp;nbsp; 3D_Text.cga&lt;/P&gt;&lt;P&gt; * Created: 13 May 2014&lt;/P&gt;&lt;P&gt; * Changed: 19 Aug 2014&lt;/P&gt;&lt;P&gt; * Author:&amp;nbsp; chri7180&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;version "2014.0"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Important Note: Procedural Runtime setting for Max Derivation Depth&lt;/P&gt;&lt;P&gt;# must be raised above default for rule to print longer text.&lt;/P&gt;&lt;P&gt;# Go to Edit &amp;gt; Preferences &amp;gt; General &amp;gt; Procedural Runtime.&lt;/P&gt;&lt;P&gt;# Set Max Derivation Depth to 1000 (an arbitrarily large value).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# USEFUL FOR TESTING: &lt;/P&gt;&lt;P&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; the quick brown fox jumps over the lazy dog&lt;/P&gt;&lt;P&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG&lt;/P&gt;&lt;P&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.'[]{}~!@#$%^&amp;amp;()-_=+*:&amp;gt;&amp;lt;|?/\&lt;/P&gt;&lt;P&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; Special Char Test: ;,.'[]{}~!@#$%^&amp;amp;()-_=+*:&amp;gt;&amp;lt;|?/\&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;# To make more fonts, email &lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:cwilkins@esri.com"&gt;cwilkins@esri.com&lt;/A&gt;&lt;SPAN&gt; for instructions.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Change below directories for your use.&lt;/P&gt;&lt;P&gt;const assetsDirectory = "assets/3D_Text/" + Font + "/"&lt;/P&gt;&lt;P&gt;const assetsDirectoryLower = assetsDirectory + "Lower/"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY", 10) @Order(10)&lt;/P&gt;&lt;P&gt;@Order(1)&lt;/P&gt;&lt;P&gt;attr Text = "Floating;3D TEXT;is Cool"&lt;/P&gt;&lt;P&gt;#attr Text = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.'[]{}~!@#$%^&amp;amp;()-_=+*:&amp;gt;&amp;lt;|?/"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY") @Order(20)&lt;/P&gt;&lt;P&gt;@Color&lt;/P&gt;&lt;P&gt;attr Color = "#00FF00"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY") @Order(30)&lt;/P&gt;&lt;P&gt;attr White_Underlay = false&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY") @Order(40)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Transparency = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY") @Order(50)&lt;/P&gt;&lt;P&gt;@Range("Arial")&lt;/P&gt;&lt;P&gt;attr Font = "Arial"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE", 20) @Order(10)&lt;/P&gt;&lt;P&gt;@Range(0,200)&lt;/P&gt;&lt;P&gt;attr Elevation = 0.2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE") @Order(20)&lt;/P&gt;&lt;P&gt;@Range(1,5)&lt;/P&gt;&lt;P&gt;attr Font_Height = 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE") @Order(30)&lt;/P&gt;&lt;P&gt;@Range(0,100)&lt;/P&gt;&lt;P&gt;attr Font_Depth = 0.2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE") @Order(40)&lt;/P&gt;&lt;P&gt;@Range(-180,180)&lt;/P&gt;&lt;P&gt;attr Rotation_Y = 90&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE") @Order(50)&lt;/P&gt;&lt;P&gt;@Range(-90,90)&lt;/P&gt;&lt;P&gt;attr Tilt = 90&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("RELATIVE SIZE", 30) @Order(60)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Kerning = 0.15&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("RELATIVE SIZE") @Order(70)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Stretch_Horizontal = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("RELATIVE SIZE") @Order(80)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Line_Spacing = 0.5&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("RELATIVE SIZE") @Order(90)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Space_Size = 0.3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@StartRule&lt;/P&gt;&lt;P&gt;Generate --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color(Color)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity, 1 - Transparency)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alignScopeToAxes(y)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # XX Is Tilt tilting around the right Z axis?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; r(-Tilt, Rotation_Y, 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; translate(rel, world, 3, Elevation, -1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLines(Text, 1)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Hidden&lt;/P&gt;&lt;P&gt;attr Line = ""&lt;/P&gt;&lt;P&gt;@Hidden&lt;/P&gt;&lt;P&gt;attr ReturnAt = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;const Max_Lines = 20&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# FIXME: multiple semi-colons in a row just make spaces. Not sure why. Not important for now.&lt;/P&gt;&lt;P&gt;PrintLines(myString, lineIndex) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case len(myString) &amp;lt;= 0 || lineIndex &amp;gt; Max_Lines:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NIL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case find(myString, ";", 2) &amp;gt; 0:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set(ReturnAt, find(myString, ";", 0))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetters(substring(myString, 0, ReturnAt))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t(0, -(Font_Height * (1 + Line_Spacing)), 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r(0,0,0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t(0,0,0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLines(substring(myString, ReturnAt + 1, Max_String_Length), lineIndex + 1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetters(substring(myString, 0, Max_String_Length))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NIL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Used during recursion on Text:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Hidden&lt;/P&gt;&lt;P&gt;attr Letter = ""&lt;/P&gt;&lt;P&gt;@Hidden&lt;/P&gt;&lt;P&gt;attr Asset = ""&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;const Max_String_Length = 1000&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PrintLetters(myString) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetters(myString, len(myString))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;PrintLetters(myString, n) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case n &amp;gt; 0:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set(Letter, substring(myString, 0, 1))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set(Asset, getLetterAsset(Letter))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersHandleCursorMoves(myString, n)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NIL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PrintLettersHandleCursorMoves(myString, n) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case Letter == " ":&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Printing a space only moves the cursor. No asset used.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersRecurse(myString, n)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersAssetSetup(myString, n)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;PrintLettersAssetSetup(myString, n) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case !fileExists(Asset):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print("Error: No file for asset='"+Asset+"'")&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersRecurse(myString, n)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # This one letter is printed in a separate branch.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetter&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersRecurse(myString, n)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PrintLettersRecurse(myString, n) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t((_assetSizeX&amp;nbsp; + Kerning + Stretch_Horizontal) * Font_Height, 0, 0)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetters(substring(myString, 1, Max_String_Length), n - 1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;_assetSizeX = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case Letter == " ":&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Space_Size&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sx(Asset)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PrintLetter --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s(0,0,0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; insert(Asset, Font_Height)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;insert(a, scalar) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i(a)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s(scalar * sx(a), scalar * sy(a), scalar * sz(a))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t((scalar * tx(a)) - tx(a),(scalar * ty(a)) - ty(a),(scalar * tz(a)) - tz(a))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s('(1 + Stretch_Horizontal),'1,0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WhiteUnderlay&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;sx(asset) = assetInfo(asset, sx) &lt;/P&gt;&lt;P&gt;sy(asset) = assetInfo(asset, sy) &lt;/P&gt;&lt;P&gt;sz(asset) = assetInfo(asset, sz) &lt;/P&gt;&lt;P&gt;tx(asset) = assetInfo(asset, tx) &lt;/P&gt;&lt;P&gt;ty(asset) = assetInfo(asset, ty) &lt;/P&gt;&lt;P&gt;tz(asset) = assetInfo(asset, tz) &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WhiteUnderlay --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case White_Underlay:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Weird push/pop notation that I've never seen anyone use:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; color(1,1,1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extrude(underlayDepth)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t(0, 0, underlayDepth)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extrude(overlayDepth)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extrude(Font_Depth_Non_Zero)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;const flatUnderlayPercent = 0.05&lt;/P&gt;&lt;P&gt;const underlayDepth = Font_Depth_Non_Zero * (1 - flatUnderlayPercent)&lt;/P&gt;&lt;P&gt;const overlayDepth = Font_Depth_Non_Zero * (flatUnderlayPercent)&lt;/P&gt;&lt;P&gt;const Font_Depth_Non_Zero = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case Font_Depth &amp;lt;= 0: &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Font_Height * 0.05&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: Font_Depth&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#######################################&lt;/P&gt;&lt;P&gt;# Letter Assets - this finds the OBJ file for each letter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;getLetterAsset(letter) = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # These characters cannot be used for filenames:&amp;nbsp; *!:&amp;gt;&amp;lt;|?/\&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Below case structure relates those characters to specially named assets.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # The else case is for all other characters.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == " " : ""&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "*" : getAssetPath(letter) + "_asterisk.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "!" : getAssetPath(letter) + "_bang.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == ":" : getAssetPath(letter) + "_colon.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "&amp;gt;" : getAssetPath(letter) + "_greaterthan.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "&amp;lt;" : getAssetPath(letter) + "_lessthan.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "|" : getAssetPath(letter) + "_pipe.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "?" : getAssetPath(letter) + "_question.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "/" : getAssetPath(letter) + "_slash.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "\\" : getAssetPath(letter) + "_backslash.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "\"" : getAssetPath(letter) + "_quote.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: getAssetPath(letter) + letter + ".obj"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;getAssetPath(letter) = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case isLowercase(letter): assetsDirectoryLower&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: assetsDirectory&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;isLowercase(letter) = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "a" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "b" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "c" : true &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "d" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "e" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "f" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "g" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "h" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "i" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "j" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "k" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "l" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "m" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "n" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "o" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "p" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "q" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "r" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "s" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "t" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "u" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "v" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "w" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "x" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "y" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "z" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: false&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 30 Jun 2015 04:21:27 GMT</pubDate>
    <dc:creator>LukeCzar</dc:creator>
    <dc:date>2015-06-30T04:21:27Z</dc:date>
    <item>
      <title>CityEngine Text Attribute Rule</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751574#M9897</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to use a Rule to create a text from attributes that would be embedded into a room polygon, and base on its length (horizontal or vertical) (See the attachment) also wit would be good to scale text base on the polygon size&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This example I use one Rule per Room - that's why its different orientation/ size&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG alt="fmeattributesrule.png" class="image-1 jive-image" src="https://community.esri.com/legacyfs/online/114548_fmeattributesrule.png" style="height: auto;" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And here is the Rule I have been using, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can you help me modify this Rule, so I can use only one Rule for all my floors ( and get all the room names - scaled and placed horizontal/vertical- based on it room area?)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Lukasz&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/**&lt;/P&gt;&lt;P&gt; * File:&amp;nbsp;&amp;nbsp;&amp;nbsp; 3D_Text.cga&lt;/P&gt;&lt;P&gt; * Created: 13 May 2014&lt;/P&gt;&lt;P&gt; * Changed: 19 Aug 2014&lt;/P&gt;&lt;P&gt; * Author:&amp;nbsp; chri7180&lt;/P&gt;&lt;P&gt; */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;version "2014.0"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Important Note: Procedural Runtime setting for Max Derivation Depth&lt;/P&gt;&lt;P&gt;# must be raised above default for rule to print longer text.&lt;/P&gt;&lt;P&gt;# Go to Edit &amp;gt; Preferences &amp;gt; General &amp;gt; Procedural Runtime.&lt;/P&gt;&lt;P&gt;# Set Max Derivation Depth to 1000 (an arbitrarily large value).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# USEFUL FOR TESTING: &lt;/P&gt;&lt;P&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; the quick brown fox jumps over the lazy dog&lt;/P&gt;&lt;P&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG&lt;/P&gt;&lt;P&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.'[]{}~!@#$%^&amp;amp;()-_=+*:&amp;gt;&amp;lt;|?/\&lt;/P&gt;&lt;P&gt;#&amp;nbsp;&amp;nbsp;&amp;nbsp; Special Char Test: ;,.'[]{}~!@#$%^&amp;amp;()-_=+*:&amp;gt;&amp;lt;|?/\&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;# To make more fonts, email &lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:cwilkins@esri.com"&gt;cwilkins@esri.com&lt;/A&gt;&lt;SPAN&gt; for instructions.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Change below directories for your use.&lt;/P&gt;&lt;P&gt;const assetsDirectory = "assets/3D_Text/" + Font + "/"&lt;/P&gt;&lt;P&gt;const assetsDirectoryLower = assetsDirectory + "Lower/"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY", 10) @Order(10)&lt;/P&gt;&lt;P&gt;@Order(1)&lt;/P&gt;&lt;P&gt;attr Text = "Floating;3D TEXT;is Cool"&lt;/P&gt;&lt;P&gt;#attr Text = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.'[]{}~!@#$%^&amp;amp;()-_=+*:&amp;gt;&amp;lt;|?/"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY") @Order(20)&lt;/P&gt;&lt;P&gt;@Color&lt;/P&gt;&lt;P&gt;attr Color = "#00FF00"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY") @Order(30)&lt;/P&gt;&lt;P&gt;attr White_Underlay = false&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY") @Order(40)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Transparency = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("DISPLAY") @Order(50)&lt;/P&gt;&lt;P&gt;@Range("Arial")&lt;/P&gt;&lt;P&gt;attr Font = "Arial"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE", 20) @Order(10)&lt;/P&gt;&lt;P&gt;@Range(0,200)&lt;/P&gt;&lt;P&gt;attr Elevation = 0.2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE") @Order(20)&lt;/P&gt;&lt;P&gt;@Range(1,5)&lt;/P&gt;&lt;P&gt;attr Font_Height = 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE") @Order(30)&lt;/P&gt;&lt;P&gt;@Range(0,100)&lt;/P&gt;&lt;P&gt;attr Font_Depth = 0.2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE") @Order(40)&lt;/P&gt;&lt;P&gt;@Range(-180,180)&lt;/P&gt;&lt;P&gt;attr Rotation_Y = 90&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("POSITION &amp;amp; SIZE") @Order(50)&lt;/P&gt;&lt;P&gt;@Range(-90,90)&lt;/P&gt;&lt;P&gt;attr Tilt = 90&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("RELATIVE SIZE", 30) @Order(60)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Kerning = 0.15&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("RELATIVE SIZE") @Order(70)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Stretch_Horizontal = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("RELATIVE SIZE") @Order(80)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Line_Spacing = 0.5&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Group("RELATIVE SIZE") @Order(90)&lt;/P&gt;&lt;P&gt;@Range(0,1)&lt;/P&gt;&lt;P&gt;attr Space_Size = 0.3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@StartRule&lt;/P&gt;&lt;P&gt;Generate --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color(Color)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity, 1 - Transparency)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alignScopeToAxes(y)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # XX Is Tilt tilting around the right Z axis?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; r(-Tilt, Rotation_Y, 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; translate(rel, world, 3, Elevation, -1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLines(Text, 1)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Hidden&lt;/P&gt;&lt;P&gt;attr Line = ""&lt;/P&gt;&lt;P&gt;@Hidden&lt;/P&gt;&lt;P&gt;attr ReturnAt = 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;const Max_Lines = 20&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# FIXME: multiple semi-colons in a row just make spaces. Not sure why. Not important for now.&lt;/P&gt;&lt;P&gt;PrintLines(myString, lineIndex) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case len(myString) &amp;lt;= 0 || lineIndex &amp;gt; Max_Lines:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NIL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case find(myString, ";", 2) &amp;gt; 0:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set(ReturnAt, find(myString, ";", 0))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetters(substring(myString, 0, ReturnAt))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t(0, -(Font_Height * (1 + Line_Spacing)), 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r(0,0,0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t(0,0,0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLines(substring(myString, ReturnAt + 1, Max_String_Length), lineIndex + 1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetters(substring(myString, 0, Max_String_Length))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NIL&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Used during recursion on Text:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;@Hidden&lt;/P&gt;&lt;P&gt;attr Letter = ""&lt;/P&gt;&lt;P&gt;@Hidden&lt;/P&gt;&lt;P&gt;attr Asset = ""&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;const Max_String_Length = 1000&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PrintLetters(myString) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetters(myString, len(myString))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;PrintLetters(myString, n) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case n &amp;gt; 0:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set(Letter, substring(myString, 0, 1))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set(Asset, getLetterAsset(Letter))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersHandleCursorMoves(myString, n)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NIL&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PrintLettersHandleCursorMoves(myString, n) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case Letter == " ":&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Printing a space only moves the cursor. No asset used.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersRecurse(myString, n)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersAssetSetup(myString, n)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;PrintLettersAssetSetup(myString, n) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case !fileExists(Asset):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print("Error: No file for asset='"+Asset+"'")&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersRecurse(myString, n)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # This one letter is printed in a separate branch.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetter&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLettersRecurse(myString, n)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PrintLettersRecurse(myString, n) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t((_assetSizeX&amp;nbsp; + Kerning + Stretch_Horizontal) * Font_Height, 0, 0)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PrintLetters(substring(myString, 1, Max_String_Length), n - 1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;_assetSizeX = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case Letter == " ":&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Space_Size&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sx(Asset)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PrintLetter --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s(0,0,0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; insert(Asset, Font_Height)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;insert(a, scalar) --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i(a)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s(scalar * sx(a), scalar * sy(a), scalar * sz(a))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t((scalar * tx(a)) - tx(a),(scalar * ty(a)) - ty(a),(scalar * tz(a)) - tz(a))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s('(1 + Stretch_Horizontal),'1,0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; WhiteUnderlay&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;sx(asset) = assetInfo(asset, sx) &lt;/P&gt;&lt;P&gt;sy(asset) = assetInfo(asset, sy) &lt;/P&gt;&lt;P&gt;sz(asset) = assetInfo(asset, sz) &lt;/P&gt;&lt;P&gt;tx(asset) = assetInfo(asset, tx) &lt;/P&gt;&lt;P&gt;ty(asset) = assetInfo(asset, ty) &lt;/P&gt;&lt;P&gt;tz(asset) = assetInfo(asset, tz) &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;WhiteUnderlay --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case White_Underlay:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Weird push/pop notation that I've never seen anyone use:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; color(1,1,1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extrude(underlayDepth)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t(0, 0, underlayDepth)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extrude(overlayDepth)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; X.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extrude(Font_Depth_Non_Zero)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;const flatUnderlayPercent = 0.05&lt;/P&gt;&lt;P&gt;const underlayDepth = Font_Depth_Non_Zero * (1 - flatUnderlayPercent)&lt;/P&gt;&lt;P&gt;const overlayDepth = Font_Depth_Non_Zero * (flatUnderlayPercent)&lt;/P&gt;&lt;P&gt;const Font_Depth_Non_Zero = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case Font_Depth &amp;lt;= 0: &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Font_Height * 0.05&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: Font_Depth&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#######################################&lt;/P&gt;&lt;P&gt;# Letter Assets - this finds the OBJ file for each letter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;getLetterAsset(letter) = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # These characters cannot be used for filenames:&amp;nbsp; *!:&amp;gt;&amp;lt;|?/\&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Below case structure relates those characters to specially named assets.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # The else case is for all other characters.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == " " : ""&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "*" : getAssetPath(letter) + "_asterisk.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "!" : getAssetPath(letter) + "_bang.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == ":" : getAssetPath(letter) + "_colon.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "&amp;gt;" : getAssetPath(letter) + "_greaterthan.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "&amp;lt;" : getAssetPath(letter) + "_lessthan.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "|" : getAssetPath(letter) + "_pipe.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "?" : getAssetPath(letter) + "_question.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "/" : getAssetPath(letter) + "_slash.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "\\" : getAssetPath(letter) + "_backslash.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "\"" : getAssetPath(letter) + "_quote.obj"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: getAssetPath(letter) + letter + ".obj"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;getAssetPath(letter) = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case isLowercase(letter): assetsDirectoryLower&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: assetsDirectory&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;isLowercase(letter) = &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "a" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "b" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "c" : true &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "d" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "e" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "f" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "g" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "h" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "i" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "j" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "k" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "l" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "m" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "n" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "o" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "p" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "q" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "r" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "s" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "t" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "u" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "v" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "w" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "x" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "y" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case letter == "z" : true&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else: false&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 30 Jun 2015 04:21:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751574#M9897</guid>
      <dc:creator>LukeCzar</dc:creator>
      <dc:date>2015-06-30T04:21:27Z</dc:date>
    </item>
    <item>
      <title>Re: CityEngine Text Attribute Rule</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751575#M9898</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You would need to import the 3D text rule into your room rule, then try different ways of scaling a start shape for the text rule, probably deriving it from the floor of the room. There are numerous attributes to control the text size and whatnot, and you would want to set those based on the length of the string to display (use len() CGA function for that). I haven't used the rule in a while, so I don't know it off the top of my head.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note: The rule uses OBJ models for each letter, and are very heavy in poly count. (might slow down your scene)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 30 Jun 2015 17:38:34 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751575#M9898</guid>
      <dc:creator>Anonymous User</dc:creator>
      <dc:date>2015-06-30T17:38:34Z</dc:date>
    </item>
    <item>
      <title>Re: CityEngine Text Attribute Rule</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751576#M9899</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you Chris,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do you know if CItyEngine 2015 supports labels?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Lukasz&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Jul 2015 03:00:32 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751576#M9899</guid>
      <dc:creator>LukeCzar</dc:creator>
      <dc:date>2015-07-01T03:00:32Z</dc:date>
    </item>
    <item>
      <title>Re: CityEngine Text Attribute Rule</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751577#M9900</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It does not support labels.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 01 Jul 2015 03:12:15 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751577#M9900</guid>
      <dc:creator>Anonymous User</dc:creator>
      <dc:date>2015-07-01T03:12:15Z</dc:date>
    </item>
    <item>
      <title>Re: CityEngine Text Attribute Rule</title>
      <link>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751578#M9901</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Chris &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can you help me modify the Rule, so the labels are horizontal and in the center of each room?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think it is your Rule (3d text)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Generate --&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; color(Color)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set(material.opacity, 1 - Transparency)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alignScopeToAxes(y)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # XX Is Tilt tilting around the right Z axis?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; r(-Tilt, Rotation_Y, 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; center(xy) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; translate(rel, world, 0, Elevation, -4)&lt;IMG alt="prob.png" class="image-1 jive-image" src="https://community.esri.com/legacyfs/online/115331_prob.png" style="width: 620px; height: 490px;" /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 03 Jul 2015 01:31:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-cityengine-questions/cityengine-text-attribute-rule/m-p/751578#M9901</guid>
      <dc:creator>LukeCzar</dc:creator>
      <dc:date>2015-07-03T01:31:01Z</dc:date>
    </item>
  </channel>
</rss>

