import keyword

Synopsis

  • import id : "file cga"
  • import id( style-id_1, ... , style-id_n ) : "file.cga"
  • import id : "file cga" ( attribute_1, ... , attribute_n )
  • import id : "file cga" ( attribute_1 = value, ... , attribute_n = value )
  • import id : "file cga" ()

Rules, attributes and functions from an existing rule file can be imported by a rule file through "import". Importing a rule file makes all rules, attributes and functions of the imported rule file available prefixed by "id". If the imported rule file contains multiple styles, by default all styles are imported and visible in the style manager. In order to limit the styles available in an importing rule file, the set of imported styles can be specified by enumerating the imported styles in parenthesis after the import id as in the second form of the import statement with "style-id1, ..., style-id_n".

By default, attribute values from an importing rule file (e.g. "height" in "main.cga" below) are propagated to the imported rule file (e.g. "height" in "structure.cga" takes its value from "height" in "main.cga" below). In order to disable this default behavior (e.g. because an attribute in an imported rule file has the same name but a different semantic and should therefore not be overwritten), the attributes in an imported rule file can be protected by enumerating them after the rule file as in the third variant of the import statement ("attribute_1, ..., attribute_n"). Attributes can not only be protected but an importing rule file can additionally specify a new value for the attribute by redefining an attribute with an expression as in the fourth form of the import statement ("attribute_1 = value, ... , attribute_n = value") where the right hand side expression is evaluated in the scope of the importing rule file.

Using empty parantheses protects all imported attributes.

Setting the attribute source of an imported attribute in the inspector to something else than "Rule-defined value" will disable this behavior for that attribute completely and the value will be taken from the designated source instead.

Imports can be annotated to control their attribute presentation in the inspector. See Annotations.

Examples

Combining two facades with a structure

# -- facade1.cga

actualFloorHeight = scope.sy/rint(scope.sy/4)
actualTileWidth   = scope.sx/rint(scope.sx/4)
	
Facade -->
	setupUV(0, 8*actualTileWidth, 8*actualFloorHeight)
	set(material.colormap, "f1.tif")
	bakeUV(0) 
# -- facade2.cga

actualFloorHeight = scope.sy/rint(scope.sy/6)
actualTileWidth   = scope.sx/rint(scope.sx/4)
	
Facade -->
	setupUV(0, 8*actualTileWidth, 8*actualFloorHeight)
	set(material.colormap, "f2.tif")
	bakeUV(0) 
# -- structure.cga

// the attribute height will be overridden by the
// attribute height from "main.cga" if this rule
// file is included. Thus if this rule file is
// used standalone, the buildings will be of height
// 100, if this rule file is included by "main.cga",
// the buildings will be of height 200.
attr height = 100

Lot-->extrude(height) Mass

Mass-->comp(f){ side: Facade | top: Roof } 
# -- main.cga

// define an attribute "height", potentially
// overriding the same attribute in imported
// rule files.

attr height = 200

// import facades
import f1 : "facade1.cga"
import f2 : "facade2.cga"

// import structure
import st : "structure.cga"

Lot-->
 	// reference rule "Lot" in structure.cga
	st.Lot

// define rule "Facade" for structure.cga
st.Facade-->
	// reference rule "Facade" in facade1.cga
	50%  : f1.Facade  
	// reference rule "Facade" in facade2.cga
	else : f2.Facade

In this topic