This content has been marked as final. Show 3 replies
print ce.getAttribute(ce.selection(), '/ce/rule/userModel')
This command returns the USER value of the rule attribute named userModel. (The user value is set when a rule attribute is manually set in the inspector, and is displayed bold)
It does not return the Rule value. (The rule value is suffixed with (Rule) in the Inspector.)
Rule values can not be queried with Python atm.
To figure out if a rule attribute is user-set, you can query its source
DEFAULT -> value is set from rule
USER -> value is set by user
Object Attributes (found the Object Atttributes pane of the Inspector) are queried without prefix:
print ce.getAttribute(ce.selection(), 'myObjectAttribute')
Is this still the case in CityEngine 2012.1?
I'm trying to something similar, I have this CGA rule applied to a shape:
version "2012.1" attr MyAttribute = true Lot --> BuildingMass LotInner --> BuildingMass BuildingMass --> extrude(20) Building Building --> set(MyAttribute, true) color(1,1,0)
Then I have generated the shape. I then have this python script to interrogate it:
from scripting import * ce = CE() def main(): print shapes = ce.getObjectsFrom(ce.selection) for shape in shapes: print print shape print ce.getAttributeList(shape) print ce.getAttributeSource(shape, "/ce/rule/MyAttribute" ) print ce.getAttribute(shape, "/ce/rule/MyAttribute" ) if __name__ == '__main__': main()
When I select the generated object, I get this output:
Shape:MyBuilding.cga:Lot  None None
When I delete the generated object, and just select the lot shape, I get this output:
Shape ['/ce/name', '/ce/rule/randomSeed', '/ce/rule/ruleFile', '/ce/rule/startRule', '0streetWidth\x00', '1streetWidth\x00', '2streetWidth\x00', '3streetWidth\x00', '4streetWidth\x00', 'shapeType'] DEFAULT None
My questions is, within CE 2012.1, is there a way to mark certain geometry from CGA rules and access it from python? My end goal is to mark certain geometry and then allow my python exporter to distinguish between the different geometries so it can export them into a different model file.
This is something that you would do via the reporting mechanism.
Then use python to process the reported data.