Hello Guys!
I was wondering if there is a way to profile our CGA code, is there a way to determine the number of calls for specific function, time spent in each function, etc.
For example:
Also I came across something that I am not sure if the call is being done one or three time
getScopeInWorld =
[ convert( x, scope, world, pos, 0,0,0 ) ,
convert( y, scope, world, pos, 0,0,0 ) ,
convert( z, scope, world, pos, 0,0,0 ) ]
print( [ getScopeInWorld[0], getScopeInWorld[1], getScopeInWorld[2] ] )
is getScopeInWorld evaluated three time or one time?
No, sorry, we don't have any built-in profiling tools for cga.
In your particular example, getScopeInWorld is considered a function, which is evaluated in every call. So, it is evaluated 3 times, meaning convert is evaluated 9 times. Putting a const in front of it will ensure that it is only evaluated once.
CGA functions—ArcGIS CityEngine Resources | Documentation
const keyword—ArcGIS CityEngine Resources | Documentation
Debugging tip: You can put a print statement around the array in the getScopeInWorld definition, and you will see it is printed 3 times (plus a fourth time for the final print statement in your code above).
getScopeInWorld =
print(
[convert(x, scope, world, pos, 0, 0, 0),
convert(y, scope, world, pos, 0, 0, 0),
convert(z, scope, world, pos, 0, 0, 0)]
)
print( [getScopeInWorld[0], getScopeInWorld[1], getScopeInWorld[2]] )
Tx!
Using a const might help indeed, however will it be constant per shape or for the entire rule evaluation? I guess I should be able to test this myself know that I know that I can put a print statement in a function.
will test and let you know.
somehow the const statement prevents print statement...
getScopeInWorld =
print(
[convert(x, scope, world, pos, 0, 0, 0),
convert(y, scope, world, pos, 0, 0, 0),
convert(z, scope, world, pos, 0, 0, 0)]
)const getConstScopeInWorld =
print(
[convert(x, scope, world, pos, 0, 0, 0),
convert(y, scope, world, pos, 0, 0, 0),
convert(z, scope, world, pos, 0, 0, 0)]
)SplitXZ-->
alignScopeToAxes(y)
split( x, noAdjust ){ 10 : SplitZ }*
SplitZ-->
split( z, noAdjust ){ 10 : Cell( getConstScopeInWorld ) }*Cell( point )-->
point
color( rand(), rand(), rand() )
X.
In a future release (2020.1), printing a const will work, but it doesn't work yet in 2020.0.