CGA Changelog

City Engine version (= CGA version) Changes
2017.0
CGAC 1.8
New operations: New functions: Changes to existing features:
  • primitiveQuad, primitiveDisk, primitiveCube operation: Removed vertex normals because they do not influence shading. Vertex normals can still be created using setNormals or softenNormals operation.
  • CGA compiler: Improved compile time in case of errors due to naming conflicts, especially when rules with many parameters are present.
  • comp operation: New component selectors g for groups, m for materials and h for holes.
  • inside, overlaps and touches functions:
    • New optional label identifier for performing occlusion queries on labeled occluder shapes.
    • Geometries only slightly lying outside an occluder shape are considered inside (adjusted threshold behavior due to floating point limitations).
    • Surfaces touch also when normals point in same direction.
  • Support shapes consisting of vertices or edges (coming from comp or scatter operation):
Bugfixes:
  • setback operation: In some cases self-intersecting faces on concave shapes were created. That could lead to a failure of subsequent operations.
  • comp operation:
    • Combined (=) face component split now respects per-face materials.
    • Fixed wrong edge component split for edges with opposing adjacent faces.
    • Fixed wrong result of combined (=) vertex and edge component split.
    • Fixed (deprecated) noStreetSide comp split selector handling.
  • geometry.area and geometry.isOriented function: Corrected scope selectors for negative scope sizes (e.g. front becomes back if scope.sz is < 0).
  • alignScopeToGeometry operation: zUp mode: Fixed wrong pivot for meshes that only consist of vertices (for example from vertex splits or scatter).
  • CGA compiler:
    • Overriding of const is avoided or gives error.
    • Fixed missing rule line reference of incompatible version warnings.
    • Fixed an issue where a rule file could not be recompiled correctly after fixing errors.
    • Fixed wrong rule line references of compile errors.
  • inside, overlaps and touches functions:
    • Fixed a bug where a closed shape were not touching and not overlapping another geometry that lied inside.
    • Intra-occlusion: Fixed a bug where component split shapes which are children of the current shape were considered for occlusion.
    • Inter-occlusion: Fixed a bug where occlusion-queries were not considered when defined in consts or functions.
    • Fixed a bug that mistakenly returned true in rare situations due to near zero-area triangles.
    • Inter-ccclusion: Fixed a bug that created an occluder shape by a component split or offset operation during the intra ghost tree generation which was then mistakenly considered also for inter occlusion.
    • Fixed correct behavior in exports.
  • set operation: fixed a bug: trying to set the initialShape.pz attribute resulted in inconsistent behaviour (mismatch with initialShape.pa).
  • alignScopeToAxes, rotateScope, mirrorScope, setPivot, cleanupGeometry, reduceGeometry, convexify, split operations: Correctly consider a non-adjusted scope coming from a split operation.
  • offset operation: Now keeps asset materials and groups.
  • scatter operation: Issue warning for negative or zero number of points.
  • inside, overlaps, touches, geometry.angle functions, alignScopeToGeometry, alignScopeToAxes operations: Fixed for shapes consisting of vertices or edges (coming from comp or scatter operation).
  • assetApproxRatio, assetApproxSize, assetBestRatio, assetBestSize, assetFitSize, fileRandom, imageApproxRatio, imageBestRatio, fileSearch functions: Fixed a bug which led to wrong asset lookups if used in RPKs.
2016.1
CGAC 1.7
Changes to existing features:
  • innerRectangle operation:
    • Enhanced overall performance.
    • Correct largest rectangle is now also found for large concave polygons with high vertex count.
    • The edge mode does not consider negligible short edges.
    • More accurate consideration of near collinear edges.
    • Very thin remainder faces are prevented.
Bugfixes:
  • trim, i operation: Fixed various issues for trim planes on concave faces:
    • Fixed issues where parts of a mesh are not trimmed away.
    • Fixed an issue where the trimmed mesh contained unnecessary edges.
    • Fixed an issue where the trimmed mesh on a roof face contained holes.
  • cleanupGeometry, reduceGeometry operation: Fixed wrong result if scope contained rotational part.
  • cleanupGeometry operation: Fixed a bug that led to inconsistent meshes which could led to a crash on some subsequent operations, e.g. setNormals(soft) or softenNormals.
  • offset operation: Fixed undefined behaviour for negative offsets on polygons with holes.
  • envelope operation: Fixed a bug that could led to a crash when vertices were collinear.
  • getGeoCoord function: X, Y selectors: Fixed to-meter conversion for non-metrical coordinate systems.
  • innerRectangle operation:
    • Improved stability in remainder computation.
    • Fixed failing remainder computation when rectangle edge coincided with collinear vertices of the face.
    • Fixed errors and wrong largest rectangles on very small faces.
    • Improved accuracy of rectangle alignment in edge mode.
  • roofHip, roofGable operation:
    • Solved issues that led to wrong results on exact square lots as well as exact rectangular lots with collinear vertices.
    • Solved an issue on roofs with overhangs and small pediments where trim planes were missing and scopes of face components were wrong.
  • comp operation: Fixed wrong edge component split when adjacent faces were non-planar.
  • CGA compiler: Fixed several issues related to attribute propagation/overwriting using import:
    • Importing a rule that in turn imports another rule and propagates attributes now works correctly.
    • Fixed an issue where attributes from 2nd (and higher) level imports were overwritten although not defined in 1st level import.
    • Fixed an issue where the specification of a new attribute value of a 2nd (and higher) level import was not working although not defined in 1st level import.
    • Fixed an issue where an attribute was not propagated to 1st level import where it was used to overwrite another attribute in 2nd (and higher) level import.
  • Fixed a CGB decoder initialization problem on Linux and OSX.
2016.0
CGAC 1.6
New operations: Changes to existing features:
  • setNormals operation:
    • New mode auto that uses softenNormals functionality.
    • New mode conform that computes consistent normals.
  • The innerRect operation is deprecated. Use innerRectangle operation instead.
  • cleanupGeometry operation: Mode all/faces: All duplicate/inverse faces are removed except one (independent from orientation).
  • i operation:
    • New parameter upAxisOfGeometry that specifies the up axis of the geometry.
    • New parameter insertMode that specifies the alignment and positioning of the geometry in the scope. The option keepSizeAndPosition is the same as using s(0,0,0).
  • "builtin:cube" and "builtin:cube:notex" are deprecated. Use primitiveCube instead.
  • extrude operation:
    • The paramater axisWorld is deprecated and changed to a parameter extrusionType.
    • New types face.normal, vertex.normal, world.up and world.up.flatTop.
    • The axes x, y, z, world.x, world.y and world.z are deprecated. Use type world.up instead of axis world.y.
  • roofGable, roofHip, roofPyramid and roofShed operation:
    • Roofs can be generated wrt. a given height.
    • New parameter valueType to switch beetween a roof generation byAngle or byHeight.
  • roofShed operation: For shed roofs on shapes with one face no horizontal trim planes, hip, valley and ridge edges are generated. This was already the case for shapes with more than one face.
Bugfixes:
  • split, trim and i operation: Fixed a bug that led to wrong results when vertices or edges lie in the respective split/trim plane.
  • geometry.isInstanced function: Fixed for builtin primitives ("builtin:cube" and "builtin:cube:notex"). Also supports primitiveQuad, primitiveDisk, primitiveCube, primitiveSphere, primitiveCylinder and primitiveCone.
  • roofHip, roofGable operation: Fixed a bug that occured on rectangular shapes and led to a wrong shading due to double vertices.
  • roofShed operation: Fixed a bug that generated wrong shed roofs for shapes with more than one face, at least one hole and a non-zero edge index set.
  • cleanupGeometry operation: Fixed an issue that prevented vertices to merge when they were the first vertex in a face.
  • geometry.area and normal calculation became more accurate; floating point precision got improved in general.
2015.2
CGAC 1.5
bugfixes:
  • getGeoCoord function: fixed a bug where selectors lat, lon did not return the correct WGS84 coordinates for some coordinate systems.
2015.1
CGAC 1.5
new features:
  • Support for reading FBX assets.
bugfixes:
  • comp operation: fixed a numerical issue which led to missaligned faces after comp(f).
  • cleanupGeometry operation: made it behave the same on edge cleanup for geometries with per-mesh-materials and per-face-materials.
2015.0
CGAC 1.5
new functions: changes to existing features:
  • split operations:
    • missing sizes are not allowed any longer. For instance, split(x) { A } does not compile anymore. The correct equivalent is split(x) { ~1: A }.
    • functions in size expression do not need extra parantheses anymore.
  • @Hidden annotation: changed propagation across imports. A hidden import hides all its imports recursively.
  • uid shape attribute deprecated. Use the getTreeKey function instead.
bugfixes:
  • Fixed a bug in the cgb decoder which failed to read compiled cga files with a large number of attributes/rules/splits.
  • Vertexmerger: fixed a bug which prevented hole vertices to be merged with vertices of other faces.
  • float() function: made string-to-float conversion independent of locale.
  • split operations: intensified internal mesh cleanup to reduce memory load, fixed a bug which led to undesired vertex-merges.
  • roofHip operation: avoid duplicate vertices.
  • offset, roofGable and roofHip operations: made offset / roof construction more stable on polygons with co-linear vertices and fixed a memory explosion bug.
  • cleanupGeometry operation: fixed bug which led to illegal material assignements ("filled holes rendering bug") on edge cleanup for geometries with per-face-materials.
  • Fixed undefined behaviour if the same name was used for a scalar attr and a map attr.
  • CGA compiler: Parameteric rules and functions with a large number of parameters do not hang the compiler / CityEngine anymore.
2014.1 QF1
CGAC 1.4
bugfixes:
  • CGA compiler: Fixed a bug in code generation for styles which led to mixed-up styles in the .cgb files.
  • offset, roofGable, roofHip and roofShed operations: made polygons with holes handling more stable for illegal holes (hole vertices identical to vertices of enclosing polygon - hangers).
2014.1
CGAC 1.3
new operations: new functions: new CGA Utility Library functions: new features:

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).
bugfixes:
  • extrude operation: fixed polygon with holes handling.
  • convexify operation: fixed face consistency if several edges have identical length.
  • envelope operation: fixed border cases which led to "open volumes".
  • alignScopeToGeometry operation: fixed points/edge shapes support: scope size was set to 1 rather than 0, pivot orientation was not set to vertex/edge normal, fixed a crash if illegal edge index was used on edge geometry.
  • setback and shape{L|U|O} operations: fixed memory leak.
  • split operations: fixed hole handling (produced illegal holes in certain cases).
  • offset, roofGable, roofHip and roofShed operations: made polygons with holes handling more stable for illegal holes (hangers).
  • assetInfo, assetsSortRatio and assetsSortSize functions: fixed behaviour for unknown/unloadable assets.
  • material shape attribute: material.XXXmap returns "builtin:unknowntexture.png" if texture not found.
  • Fixed (deprecated) noStreetSide comp split selector handling.
  • Fixed a bug regarding edge/point geometry normals (CityEngine rendering only).
  • Fixed a bug in handling edges in empty geometries.
  • i operation: fixed a race condition in handling unknown assets which led to a crash.
  • Fixed an internal illegal pointer access which led to a crash.
  • print, report, set operations: fixed nan handling (avoid checks) and removed excess newline (bool).
  • str function: fixed inf/nan handling.
  • listRange function: fixed a bug reading (illegal) non-´;´-terminated string list handling.
  • improved internal rad-to-degree conversion precision.
  • AssetErrors: report warnings from geometry conversion of inserted assets.
  • Fixed a vertex merge issue in trim/split (identical vertices were not merged).
  • CGA compiler:
    • Fixed a bug in extends (attribute values were not always propagated).
    • Fixed bugs in import (wrong attributes copied, protecting selected attributes did protect all attributes).
    • Fixed a bug which led to a compile error if a rule had the same name as a CGA Utility Library function.
2014.0
CGAC 1.2
new features:
  • offset, roofGable, roofHip, roofShed operations: holes in polygons are now supported.
  • setback operation: new syntax for selecting uv sets and new uv-based selectors uv.left, uv.right, uv.bottom, uv.top; uv coordinates and vertex normals are not deleted anymore but interpolated for new inner vertices.
  • tileUV operation: using 0 for the textureWidth or the textureHeight parameter protects that coordinate from beeing touched.

changes to existing features:

  • import: attr value propagation logic was simplified.
bugfixes:
  • import: resolving assets from cross-project imports failed in some cases (imports which imported a cga file from the same directory). This was fixed in the cga compiler (CGAC), so existing rpks should be updated.
  • assetApproxRatio, assetApproxSize, assetBestRatio, assetBestSize, assetFitSize, fileRandom, imageApproxRatio, imageBestRatio functions: fixed a bug which led to wrong asset lookups if imported from a different project.
  • geometry.angle function: fixed a bug which led to wrong results.
  • fileSearch function:
    • hits in the current project were reported in relative path notation; this got changed to absolute workspace paths again.
    • crash fixed if illegal regexps were used in attr initialization
    • spaces within qoutes were broken
  • initialShape attributes returned wrong values if used in const / attr functions.
  • comp operation: for polygons with holes, the border, insider selectors and the = operator were buggy.
  • imageInfo function: does not crash anymore on empty filename.
  • imagesSortRatio function: does not crash anymore on empty fileList.
  • split operation: fixed a bug which led to deletion of the last leaf of a uv-split in some cases.
  • inside function: fixed a bug which led to wrong results.
  • Fixed a bug connected to inter-model occlusion of vertically distant initial shapes: ignore neighborhood distance on y-axis for finding potential occlusions.
2013.1
CGAC 1.1
changed fundamental behaviour:
  • attr/const functions evaluation order: In previous CGA versions, attr and const functions were evaluated lazily, i.e. when they were used for the first time. Remember that attr and const functions are evaluated only once. This approach gave rise to the non-intuitive behaviour that changing the code of some rule potentially changed the value of an attr. Keep in mind that some functions (and obviously shape attributes) depend on the current shape's geometry, and some even change the state of the current shape (e.g. rand). Therefore (non-)evaluation of a const function cold have an influence on rule execution.
    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.
  • inf/nan checks: In previous CGA versions, a number of operation and function float parameters were tested for not-a-number / infinity (nan/inf) values at runtime. In most cases, such values were replaced with 0 and a warning was issued. In others, the operation was aborted.
    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.
  • Intra-occlusion and reports, print output, CGA error reporting: During resolving inta-occlusion-queries, some shapes and sub-shapetrees get deleted (and re-evaluated). The reports issued by report operations by the rule of that shapes (and the output of print operations and functions plus all CGA errors/warnings) are deleted along with those shapes.
    While the new behaviour makes more sense (each report/print-output/error has associated a shape in the model hierarchy), it is different than in previous versions.
new CGA Utility Library functions: new features:

changes to existing features:

  • report operation: available with all licenses.
  • reduceGeometry operation: new, more efficient implementation - resulting geometry might differ to previous version.
  • fileExists function: now returns true fo all builtins.
  • material.color.rgb attribute: return a hex string (see color operation) rather than a three-floats-in -[0,1]-string.
  • listClean utility function: empty entries are filtered now.
  • listIndex utility function: support for wildcards.
  • envelope operation: deprecated signatures without direction parameter.
bugfixes:
  • alignScopeToGeometry operation: more robust regarding bad geometry (fixes a crash) and better face material support.
  • assetsSortRatio function: fixed axisSelectorRatio parameter (crashed if yz was used).
  • assetsSortSize function: fixed axisSelectorSize parameter (yz was ignored).
  • envelope operation:
    • fixed missing top faces if one some of the baseHeights were equal to maxHeight.
    • support for non-planar polygons.
    • fixed several numerical issues (crashes, incorrect geometry).
  • i operation and initial shape handling: added zero-angle removal and better face material support.
  • print function: a newline is added after each invocation (like in the print operation.
  • comp, envelope setback, geometry.area, and geometry.isOriented operations/functions: street.xxx selectors: do not fallback to object.xxx selectors if streetWith sttribute is not defined for index 0 but for other indics.
  • Vertex meger (export + internal to a number of operations): more robust regarding bad geometry (fixes a crash).
  • Triangulator (export, rendering and internal to a number of operations): correctly handle near-identical vertices (led to inconsistent geometry and crashes).
  • Fixed a number of compiler bugs related to import, most important a bug which prevented setting of imported generic attributes.
2012.1 new operations: new functions: new attributes:
  • uid attribute
new CGA Utility Library functions: new features:

changes to existing features:

bugfixes:
  • comp operation: using the combine (=) operator in conjunction with edges and vertices (e|v) led to undefined behaviour. fixed.
  • geometry.isOriented operation: world.x selectors were inverted. fixed.
  • i (trimming) and split operations: fixed some bugs which led to inconsistent geometry and increased performance for large geometries. This also speeds up export if vertex merger is on.
  • alignScopeToAxes operation: works now also if the current shapes' geometry is empty (e.g. after a scatter or comp(e|v) operation), and multi-mesh geometries do not loose materials anymore.
2011.1 new functions: new attributes: new features:
  • Added support for generic shape attributes: each shape can have its own copy of an attribute, and the value is passed on to the successors. Values can be set with the set operation.
  • Added support for styles: Rules and attributes can be bundled and named to form a style. All styles derive from the default style. This is somewhat similar to inheritance in OOP.
  • On import of a rule file, attributes can now be protected and styles can be chosen.
  • color operation: added an overload which takes a float tripple.
  • geometry.area function: added object.front, streetSide and noStreedSide selectors.
  • case blocks can now be used between push [ and pop ] operations, i.e. a new scope can be conditional.
  • CGA executen trace for debugging, see Grammarcore Preferences.
  • alignScopeToAxes operation: added x and z selectors.

changes to existing features:

  • material attributes:
    • if the shape material attribute is not modified: return attribute from first geometry asset mesh material (i.e. always return the current value; on older versions, always the shape material value was returned)
    • removed material.ambient.a attribute
    • deprecated material.color.a (replaced by material.opacity) and material.map{3,4,5} (replaced by material.specularmap, material.opacitymap, material.normalmap) attributes
    • changed material.bump to material.bumpValue
    • fundamental changes to transparency handling: the alpha channel of material.colormap is always ignored now; alpha-maps must be set using the material.opacitymap texture layer; similarly, material.opacity must be used instead of material.color.a; rendering: CityEngine's GL preview now drops fragments with alpha < 0.1, that used to be 0.3. note: all materials with opacity are rendered after all other materials.
    • textures can be disabled by setting the filename to the empty string (i.e. texture("") or set(material.opacitymap, "")); in previous versions, this led to usage of "builtin:unknowntexture.png"; the default materials's textures are set to the empty string instead of "not available".
    • If a texture can not be found, the texture name is always set to "builtin:unknowntexture.png". This is also the case for misspelled "builtin:XXX" textures (which were set to "builtin:default" in previous versions).
  • "builtin:cube" now has texture coordinates for uv-set 0 (colormap) only (was 3: uv-sets 0, 1, 2 in previous versions).
  • For rendering and export, undefined uv-sets default to set 0 now (if 0 is defined), i.e. if e.g. material.opacitymap is set to a valid texture, but uv-set 3 is undefined, the coordinates form uv-set 0 are re-used. This was only the case for specular map before. See also Texturing: Essential Knowledge.
  • fileSearch function (and all related functions in the Utility Library) got reworked:
    • search logic is more strict now (if searchQuery is not an absolute workspace path, match relative to assets and root folders of current project (in old versions, it was tried to match all folders and subfolders)
    • better performance
  • Geometry asset readers: extended consistency checks to handle polygons with collapsed edges and dropped checking for non-planar faces.
  • Removed "drop shapes fully trimmed away" optimization in createShape operation: in older versions, new shapes were not created if they would be completly behind an enabled trimplane.
bugfixes:
  • scatter operation: gaussian distribution: fixed wrong mean calculation for right / bottom cases; led to endless loops in certain cases.
  • vertex merger now respects topology (i.e. export with vertex merging option and all cga-operations are o-shape safe).
  • The setback, shapeL, shapeU and shapeO operations received a facelift, fixing many issues. Notably shapeO is much more stable now.
  • Fixed a fatal recursion-not-detected error in user-defined functions with arguments.
  • uv split operation:
    • fixed crash on geometries w/o uvsets.
    • fixed a precision bug.
  • innerRect operation: fixed shape placement if scope contains rotation.
  • Self-intersecting polygons are handled properly now (scatter, uv split operations and rendering).
  • roofHip operation: fixed a crash in a specific situation (with overhang, on collinear vertices).
  • fixed comp.sel (only contained last word, e.g "front" instead of "object.front").
  • fixed a bug in convexify: check resulting polys for zero area, remove degenerate ones - led to crashes in follow-op operations in some cases.
  • rotate operation: fixed a bug in scope case (was rotated around pivot, not scope).
  • convert function: fixed a bug in convert((x|y|z), scope, pivot, orient, x, y, z) (was size-sensitive).
  • material-per-face assets: improved support, material now survives deletion of zero-area faces.
  • split / trim fix: cut-exactly-throug-edges situations with >1 points (o-shapes etc.).
  • fixed a bug in intra-occlusion geometry caching (led to wrong results).
  • Collada reader:
    • lines and points are ignored now (they were treaten as polygons in older versions)
    • meshes consisting of textured and non-textured polygons are handled better now (non-textured polygons receive (0,0) uvs on all vertices).
  • Image reader handles 16bit grayscale textures properly now.
  • faster and more stable geometry.area.
2010.3 new operations: new features:
  • comp operation: added world.xxx, object.xxx and streetSide selectors.
  • geometry.area() function now supports component split-style selectors to calculate area of only a subset of the geometry's faces.

changes to existing features:

  • extrude and taper operation: negative heights do not change the pivot anymore but result in negative scope size.
bugfixes:
  • Fixed a bug in trimming a negative sized scope.
  • color does not touch alpha (used to set it to 1.0).
  • comp operation: corrected scope selectors for negative scope sizes (e.g. front becomes back if scope.sz is < 0).
  • convexify and innerRect operations: fixed a numerical problem concerning collinear vertices: remove'em before the operations.
  • mirrorScope operation: fixed a bug which resulted in wrong translations.
  • roofShed operation: fixed vertex indices for shed roofs on multi-face shapes.
  • offset operation: fixed a bug in the case where no inside/border geometry was generated (due to a too large offset) and the according selector was used.
  • Fixed a compiler bug: functions beginning with &const& or &attr& (eg. construction) were parsed wrongly.
2010.2 new operations: new functions: new features:
  • split operation now supports splits in the uv (texture coordinates) domain including support for the "unwarped" domain (unitSpace surface parameterization).
  • offset operation: a new overload allows for keeping only inside or border faces.
  • setupProjection operation: a new overload allows for adding a translation offset to the setup scope.

changes to existing features:

  • extrude and taper operations now keep texture coordinates.
  • extrude, taper, roofGable, roofHip, roofPyramid and roofShed operations do net set the pivot anymore and try to maintain the scope's x-axis orientation as much as possible (i.e. the scope and pivot orientation is different now).
  • alignScopeToGeometry operation: negative indices are supported now (modulo, i.e. -1 is the last face/edge; was unspecified behaviour before).
  • comp(e) operation: edges have now a defined index, i.e. edge 0 is always guaranteed to be the first edge of the first face.
  • roofGable, roofHip and roofShed operations are now guaranteed to put first roof face on first edge of input face in all cases and to put all roof faces on corresponding edge if current geometry consists of one face only.
  • setupProjection operation: deprecated

    setupProjection(uvSet, axesSelector, width, height, uwFactor)

    overload .
  • changed recursion detection: control shape tree width rather than active nodes

bugfixes:

  • Recursive functions did not compile if the arguments were not float.
  • replace function: did replace only the first occurrence, now replaces all occurrences.
  • split and trim operations:
    • now handle concave polygons.
    • now handle negative-sized scopes.
  • Fixed a bug in intra-occlusion (in some cases wrong pre-component-split volume was taken to check against).
  • geometry.isPlanar function: in case of collinear edges nonplanarity was reported.
  • innerRect, convexify, roofGable, roofHip, roofPyramidoperations and roofShed operations: fixed a numerical issue.
  • alignScopeToGeometry operation: world.lowest selector: if all vertices had y-coordinate exactly on 0.0 result was random.
  • comp operation: if the "=" operator was used in conjunction with a rotated scope, the resulting shape had wrong scope and pivot position.
  • center operation: did not work properly if scope was rotated.
2010.1 SR1 new functions:

SR1 changes to existing features:

  • fixed signature matching bug (false syntax errors, eg. with alignScopeToGeometry)
  • fixed wrong asset search path in imported rule files
  • fixed cgalib replace() issue
  • fixed a bug in translate(rel, object, ...) operation
  • fixed a bug which led to unreferenced vertices in extrude and roofXXX operations (connected to very thin features).
  • fixed a bug in multi-face-extrude: in special cases some faces got deleted
new operations: new functions: new features:

changes to existing features:

  • initialShape.startRule is new and replaces the deprecated initialShape.symbol.
  • Asset and texture search: Now the search for an inserted asset (or texture) is always relative to the rule file and the search locations changed. No search heuristcs are applied anymore, so for instance the asset "assets/windows/window1.obj" must be inserted as i("windows/window1.obj"); in older versions, i("window1.obj") would have found the file (but maybe another one instead, with the same file name, but at a different location in the workspace).
  • s operation: a negative size now leads to a mirrored geometry (with reversed normals) rather than to an implicit translation. Converting rules which used negative sizes is straight-forward: use the posive value and add a t operation, for example this cga code s('1,'1,-1.2) OpeningWall("door") Door has to be converted to this: s('1,'1,1.2) t(0,0,-1.2) OpeningWall("door") Door
  • fixed reverse face and mesh order of inserted obj assets - face ids are reversed (comp split!)
  • initialShape.symbol attribute: the signature string (''${}'') was dropped
  • alignScopeToGeometry: (a) New face selectors world.lowest, largest, any. (b) New edge selectors world.lowest, largest and new syntax (combinations of face and edge selectors and indices). (c) Deprecated alignScopeToGeometry(upAxis, faceIndex) and alignScopeToGeometry(upAxis, auto).
  • innerRect operation:(a) Now operates on each face of the geometry (instead of just the first face). (b) Concave faces are handled (they get convexified first and the innerRect is computed on the largest rectangle). (c) Only keeps rectangular faces if they are aligned to x-axis.
  • It is not possible to use the ~ operator anymore in the s, r, t operations - it did not do anything anyway.
  • setupProjection operators ~ and ' can now be used.
  • setPivot: no support anymore for "yUp" and "zUp" selectors (use xyz and yzx).

bugfixes:

  • Occlusion: (a) fixed a bug which led to wrong results (b) fixed an intra-occlusion memory leak (c) fixed a bug which could have led to inconsitencies in the exported models.
  • geometry.isConcave function: fixed a numerical issue which led to wrong results.
  • changed const expression evaluation - they are always evaluated → numbers are consistent, also if overriden by inspector value
  • Component split: fixed a bug which led to lost materials if asset contained more than one mesh / material
  • innerRect operation: fixed some numerical issues which led to wrong results.
  • The obj asset reader now handles negative indices (max files)
  • color does not touch alpha (used to set it to 1.0).
  • Better name clashes handling of imported rule files.
  • Stricter type handling, some errors which were only detected during generation before are now detected at complie time.
  • split operation: in some cases (extruded geometry), texture coordinates were repeated rather than split.
2009.3 new features: changes to existing features:
  • Support for trim-planes along concave faces. Trim planes are not infinite anymore, their extent can be controlled in the Grammarcore preferences.
  • roof operation deprecated.
  • offsetUV operation deprecated (is now translateUV).
  • setupUV, bakeUV deprecated (use setupProjection and projectUV operations instead).
  • extrude, roofGable, roofHip and roofShed now handle multi-face initial shapes.
  • inside, overlaps, touches functions: (1) added inter, intra, all selectors. (2) A special configuration (''face is completely covered by a side of a volume'') is now included in the inside case.
  • New settings to control endless recursion detection: (1) limit function call depth, (2) limit nr. of active shapes (detect shapetrees-breadth-explosion), see Grammarcore preferences.
bugfixes:
  • alignScopeToAxes() (only the no-selector default case) did not work properly, fixed.
  • Non-boolean expressions are no longer valid in case statements (led to a run-time error before).
  • Fixed a bug connected to usage of convert() in imported cga files.
  • Using alignScopeToAxes() or alignScopeToGeometry() between setupUV() and bakeUV() resulted in incorrect texture coordinates, fixed with new operations.
  • Fixed a bug in euler angle extraction which sabotaged e.g. convert().
  • extrude operation: fixed indexing of first face.
  • convert function: convert(orient, scope, world | object, ...) did not work correctly
  • Component split: (1) using indices on an empty selection no longer crashes. (2) interleaved edge/vertex-comp-splits did not work (resulted in empty selection), fixed
  • inside, overlaps, touches functions: fixed several bugs (dislocated intersection volumes, wrong touches results, lost inter-occluders).
2009.2 new features: changes to existing features:
  • object coordinate system: a shape's pivot is now relative to initialShape.origin and not relative to the world coordinate system anymore.
  • extrude(axis, h): axis selectors (x | y | z) deprecated; new selectors (world.x | world.y | world.z) change pivot orientation after operation to be the same as after extrude(h).
  • alignScopeToGeometry: "auto" mode: (1) if all edges are on the same y-coordinate, the longest edge is taken and (2) fixed a bug which led to undefined behaviour in rare cases.
2009.1 and older (keyword version not supported) -

Copyright ©2008-2017 Esri R&D Center Zurich. All rights reserved.