Virtual Lego Block
The concept of a block is to be a virtual lego block -
with a specified size such as 2x4 or 1x8, etc. Scenes and animation are built from blocks and frames.
Blocks have Block Children
Block Children have Frames
Blocks must be created before creating Block Children
Block Children must be created before creating Frames
Blocks are containers holding members in the form of meshes, shapes and other blocks. Blocks are rendered as a box mesh containing all of the child elements. The isVisible of the box is set to false, leaving the child elements visible, but not
the block wrapper. Scaling, position and rotation are fully animatable features of a block - not color, visibility though. While materials can be applied to an entire block, animating the materials is not possible.
The block root contains frames, when it's a child you can choose either to these frames, or override (default) them with new ones.
In many ways a block is similar to a DIV element in HTML. Blocks can be used to
carry data in the field genericBlockData and marked for special purposes using the blockFlag field.
- [parent] relates to title of parent block, parent must exist
[materialname] = 'inherit' sets (inheritMaterial) = true
[childtype](childType) - shape, mesh, camera, light, block
[childname](childName) - title/name of Linked Asset - linked asset can be created later
More on Frames
Blocks contain a number of features that only apply when they are the root block in a project.
When a block is used as a root block it will generate a default camera and light - which can be specified.
Audio, video and animation length are some of the scene level settings a block can contain.
More on Scene Blocks
More on Cameras
More on Lights
These are to support flow charting and diagramming pursuits.
More on Diagram Blocks
These support product positioning and picking.
More on Display Blocks
Special Purpose Fields
(block::blockFlag) = "scene" - root block for the generated scene and assets/links
(block::blockFlag) = "basket" - selected item basket block
(block::blockFlag) = "displaypositions" - preset list of positions for items; genericblockdata = "x1||y1||z1||rx1||ry1||rz1||x2||y2..."
(block::blockFlag) = "displayfieldedits" - override fields in the layout/scene template; genericblockdata = "displaytitle||$template|| $assetName||$assetType|| $fieldname1:$fieldtype1|| $fieldname2:$fieldtype2..."
$template - layout/product/asset; $assetName - [name]; $assetType - [asset]; $fieldtype - [csv column name]; $fieldtype - display type (image,num)
(block::blockFlag) = "displayblock" - tags block for matching to sku/itemid based items
(block::supportvr) = "1" - enables webXR support for headsets - buggy browsers - works on Quest 2 for sure
asset = block
row for a block asset
basic fields - [materialname], [height], [width], [depth]
[blockcode] (blockCode) - lookup field (legacy field, blockFlag should be used now)
[blockflag] (blockFlag) - field flagging block as special case
[genericblockdata] (genericblockdata) - import data (i.e. hashed position list)
Other Macro Blocks
a row for texture and shape (plane) assets showing fitted/sized 2D text
[width, height, depth] - determine size
[texturetext, texturetext2] - line 1 and 2 of text
[textfontfamily, textfontcolor, textfontsize, textfontweight] - html/css font fields
[texturetextrendersize] - 512 by default - the width of the container the text is rendered in
document csv import object overwrite by name/title - todo on block - when overwriting a block also delete the block children and frames which are orphaned
should be low usage - so orphans should be of min concern, and they should be very small in size