Flex Language

From Navigram Documentation
Jump to: navigation, search

Note: this project is still under development and therefore the information on this page might change over time

Goal

Having a simple to use communication-language to describe configurable or animatable 3d-objects.
This can be used by Imos to speedup the configuring experience within the ImosNet and to add animation to the Imos-objects within the ImosNet.
For Navigram it can be used to add more dynamic 3d-object to the catalog-tool (alias: NetCatalog or OCC)

Explanation

A text-file or several text-files will describe the complete 3d-object or a part of it.
The text-file contains a summary of objects-declarations which are instances of a predefined object.
A predefined object can have properties or variables that can be set while creating the instance and every predefined object can have a behavior towards its content.
By building a tree-structure of instances and setting the variables a configurable 3d object will be created.
For example: by making a instance of shape() and using it in a instance of size() you can have a scale-able 3d-geometry.
When setting the variables it is not necessary to set all variables since there is always a default, but the order is important. So if you want to set e4, e1 till e3 need to be set too.

Predefined objects

list(e1,e2,e3,e4,e5,e6) This object will organize a 1 to many objects in a row

 - e1: contained object.
 - e2: orientation 1=x, 2=y(not implemented yet), 3=z(not implemented yet)
 - e3: align
 - e4: fill
 - e5: minimum amount of objects contained
 - e6: maximum amount of objects contained

configurator(e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11)

 - e1: contained object.
 - e2: public property with default value.
 - e3: public property with default value.
 - e4: public property with default value.
 - e5: public property with default value.
 - e6: public property with default value.
 - e7: public property with default value.
 - e8: public property with default value.
 - e9: public property with default value.
 - e10: public property with default value.
 - e11: public property with default value.

split(e1,e2,e3,e4,e5,e6) This object divide its space/size in to e4+e5 and the rest and then sets the size of its containing objects

 - e1: contained object 1.
 - e2: contained object 2.
 - e3: orientation
 - e4: size in meters
 - e5: size in percentages
 - e6: for which object (1 or 2) gets the given size

shape() emptyspace() offset() animate(e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12) Moves and/or rotates a certain distance or angle over a given amount of frames. This way the content will move with it. Later on this should be time not frames.

 - e1: contained object.
 - e2: Movement x
 - e3: Movement y
 - e4: Movement z
 - e5: Rotation around z
 - e6: Rotation around x
 - e7: Rotation around y
 - e8: 
 - e9: Frames
 - e10: .
 - e11: .
 - e12: Use sinus movement (will be different)

mirror() Mirrors its content. rotate() Rotates its content. container(e1,e2,e3,e4,e5,e6,e7)

 - e1: contained object.
 - e2: .
 - e3: .
 - e4: .
 - e5: .
 - e6: .
 - e7: .

skew() size() Sets the size of its content subsribe() Subscribes a object-variable to a public property in configurator() combine() Combines to objects geometry() Loads a 3d-geometry for use in shape() texture() Loads a texture for use in shape() position() Sets the position of its content split3() Spits its space/size into 3 parts and sets the size of its content to fit the part. default() interact() connector() require() Insert a different text file into this one. This way you can re-use different parts.

Example

wood=shape(16777215);
door1=shape(978543);
door2=animate(door1,0,0,0,90,0,0,0,0.05,0.3);
frameM=split3(wood,door2,wood,x,0.08,0);
frame=split3(wood,frameM,wood,z,0.05,0);
door=size(frame,1,0.05,2);
door2=animate(door1,0,1.8,-0.5,0,90,0,0,0.05,0.3);
RESULT=configurator(door,siz:0.17);
PROP=subscribe(siz,frameM.siz);