import keyword

概要

  • 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”()

规则文件可以通过“ import ” 导入现有规则文件中的规则,属性和函数。导入规则文件会使导入的规则文件的所有规则,属性和功能都以“ id ” 为前缀。如果导入的规则文件包含多个样式,则默认情况下,所有样式都将导入并在样式管理器中可见。为了限制导入规则文件中可用的样式,可以通过在导入标识后的括号中枚举导入的样式来指定导入样式集,如使用“ style-id1,… ”的import语句的第二种形式。 ,style-id_n “。

默认情况下,(例如,“从进口规则文件属性值的”“ main.cga ”下文)传播到导入规则文件(例如,“ 高度 ”,在“ structure.cga ”需要从“它的价值的高度在”“ main.cga “下面)。为了禁用此默认行为(例如,因为导入的规​​则文件中的属性具有相同的名称但具有不同的语义,因此不应被覆盖),导入的规则文件中的属性可以通过在规则文件之后枚举它们来保护如在import语句的第三个变体中(“ attribute_1,…,attribute_n“)。属性不仅可以受到保护,而且导入规则文件还可以通过使用表达式重新定义属性来为属性指定新值,如第四种形式的import语句(” attribute_1 = value,…,attribute_n“ = value “)其中右侧表达式在导入规则文件的范围内计算。

使用空的parantheses保护所有导入的属性。

将检查器中导入的属性的属性源设置为“规则定义的值”之外的其他内容将完全禁用该属性的此行为,而值将从指定的源中获取。

可以注释导入以在检查器中控制其属性表示。请参阅注释

例子

将两个立面与结构相结合

# -- 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

Was this article helpful?