============ Model import ============ Now that the HOOPS Native Platform application is running, we can import a model. For this project, we'll use the "Aquo Bottle" demo model which can be found `here `. In the tutorial source, *hps_basic.cpp*, you'll find ``ImportModel``, which handles the import process: .. literalinclude:: code/hps_basic.cpp :language: cpp :start-after: //! [import_model] :end-before: //! [import_model] Like we did when creating the stand-alone window, we use an options kit to set up the file import. For loading a file using HOOPS Exchange, an ``Exchange::ImportOptionsKit`` needs to be used. Using the kit, the filename is set and a few other settings are configured which dictate how the model is to be imported. In this case, we are setting the filename and one other field, which is the BRep mode, ``Exchange::BRepMode::BRepAndTessellation``. This means that both the model's BRep and tessellation data will be imported. Next, we call ``Exchange::File::Import`` using the file name and options kit as parameters. This is where the model is actually being read. Any file type supported by Exchange can be read by this function, as long as the options kit is set correctly. For other supported file types, such as HSF (HOOPS Stream File), or 2D images, the process is similar, but you would use ``HPS::File::Import`` with its appropriate import options kit. For very large models, the load process can take some time. For this reason, we encourage you to set up your application so that it happens as gracefully as possible. An ``Exchange::ImportNotifier`` object is immediately returned from ``Import`` and the load process begins on a separate thread. The notifier object can be queried for status updates. In our case, we are simply waiting for the import process to complete by calling ``Wait()``. This is important because if you try to use the notifier before the import is complete, you will get undefined behavior. Once ``Wait()`` returns, we can get a reference to the loaded model by calling ``GetCADModel()`` on the notifier. This will be explained further in the following section. If you attempt to reference the model before Wait() completes, you will encounter unpredictable behavior. It is imperative to ensure the model is fully loaded before any interaction. Additionally, the import process can throw an ``HPS::IOException``, so always be prepared to always handle it in your application.