# Writing VTFx Files

First one creates a `File` object. Call the `File::create()` method to create the new VTFx file, specifying the file name and file settings using `FileSettings`:

- binary - true for binary data files or false for text data files. Text files are good for debugging while binary files highly increases the file load time.
- createDigitalSignature - true to store a digital signature in the VTFx file. The signature allows to detect and thus avoid changes made to the VTFx file by third parties.
- compressionLevel - 0: no compression, 1..9: minimal to maximal compression, default is 5.
- vendorName - Vendor name, typically your company name.
- applicationName - Application name.
- password - Optional password for the VTFx file, digits and latin characters are allowed, encryption method is AES-256, supply NULL to disable encryption.

At least one database is required for a VTFx file. The class `Database` abstracts databases and its instances are used to register databases in the supplied `File` object. Note that every database within a VTFx file requires a unique id. To define the geometry data in a database you need to create at least one node block (`NodeBlock`), one element block (`ElementBlock`), and a geometry block (`GeometryBlock`) with a corresponding info block (`GeometryInfoBlock`).

An example for handling a node block: you add nodes to the node block and after the node block is complete, you write the node block to a database using `Database::writeBlock()`. Only write a block once to a database, and do not reuse the block for additional writing operations. Similar approach for the element block: reference the node block, add elements, and write the block to the database. Then, create a geometry block referring the element block and write it to the database. The methods of `GeometryBlock` either use no state id parameter to define static geometry, or use a state id parameter to define adaptive geometry. If no state id is used, then the default state id is 1. The `GeometryInfoBlock` contains part info for element blocks used in the `GeometryBlock`.

The last block type needed for a minimal database is `StateInfoBlock`. Every state needs a unique state id, and for every state id one has to add a corresponding entry to this block. The state info block allows defining state meta data, such as name, state type, time, frequency, and so forth. This depends on the type of simulation results one writes to the database, i.e. load cases, modal frequencies, time steps, etc.

Once the database is fully specified, one creates a case (`Case`), which is the second important element of a VTFx file. A case defines a visualization configuration of database contents. The visualization configuration is defined by adding properties to the case. Every property block defines a specific aspect of the visualization, such as states shown for an animation, part colors, mapped scalars and vectors, part draw styles, and much more. It is best practice to have a look at the examples provided with VTFx Component) to see the potential and use of properties. Note that properties must be written to cases, not to databases.

A VTFx file may contain many cases, thus you may define several visualization configurations of one database within a single VTFx file.

Most methods return true/false to indicate success or failure. If an error occurred, a message will be logged to the HOOPS Envision for Desktop logging system. Enabling logging is good practice and a great help identifying problems.

Once the databases and cases are finished, one closes the VTFx file using `File::close()`.

The file is now ready to be opened in any of Envisions’s products. You can install our free viewers, for instance; HOOPS Envision Demo. The generated VTFx file can also be added to the Ceetron Cloud (https://cloud.ceetron.com) for easily sharing it without the need for installed software. See Ceetron Cloud: Add a Send-To-Cloud Button to Your App.

Since a VTFx file may contain several databases and cases, one can open and append databases, cases or blocks to an existing VTFx file. To open a VTFx file for appending, use `File::openForAppend()` and proceed as usual to add new databases, cases or blocks.

Minimal Example

| Tutorial: My First VTFx This example shows how to create a minimal VTFx file with a simple part consisting of just one hexahedron element. The VTFx file has only one state, no results of any kind nor any properties.

Conversation saved
HOOPSY BETA

### Hello! I'm HOOPSY

Your multilingual generative AI assistant for documentation. Ask me anything about HOOPS Envision for Desktop in your own language, or choose a sample question below to start a conversation:

What is HOOPS Envision for Desktop?
What are the latest release notes for HOOPS Envision for Desktop?
How do I start evaluating HOOPS Envision for Desktop?
How do I write my first sample application?
How can I get assistance?

HOOPSY may store conversations according to OpenAI's policy. Responses may not always be accurate.

HOOPSY is thinking...