# Visualization: Draw Bounding Box Using Markup Model

The MarkupModel enables the user to draw custom markup figures and texts into the model. Markup can, for instance, be used to:

- Draw measure lines (distance/angle/…)
- Add annotations as labels
- Position 2D symbols in the model

This example loads the demo file and draws the models bounding box as a markup model in the view. The bounding box is draw as yellow lines.

    void TutorialRunnerMainWindow::createMarkup()
    {
        //--------------------------------------------------------------------------
        // Load an UnstructGridModel from file and draw a bounding box
        //--------------------------------------------------------------------------

        cee::vis::View* gcView = getTutorialView();

        // Create the model and data source
        cee::PtrRef<cee::ug::UnstructGridModel> ugModel = new cee::ug::UnstructGridModel();
        gcView->setModelOpenGLCapabilitiesFromView(ugModel.get());

        cee::PtrRef<cee::ug::DataSourceVTFx> source = new cee::ug::DataSourceVTFx(42);

        // Open the vtfx file
        cee::Str vtfxFile = TutorialUtils::testDataDir() + "scoobs.vtfx";
        if (!source->open(vtfxFile))
        {
            // VTFx file not found
            return;
        }

        // Add the data source to the model
        ugModel->setDataSource(source.get());

        // Set the last state as current
        std::vector<cee::ug::StateInfo> stateInfos = source->directory()->stateInfos();
        if (stateInfos.size() > 0)
        {
            int lastStateId = stateInfos[stateInfos.size() - 1].id();
            ugModel->modelSpec().setStateId(lastStateId);
        }

        // Add model to view. Ensure that old models are removed first
        gcView->removeAllModels();
        gcView->addModel(ugModel.get());

        ugModel->updateVisualization();

        // Create createMarkup model for drawing the bounding box
        cee::PtrRef<cee::vis::MarkupModel> markupModel = new cee::vis::MarkupModel();
        gcView->setModelOpenGLCapabilitiesFromView(markupModel.get());

        // Get all corner points of the bounding box
        cee::BoundingBox bb = gcView->boundingBox();
        cee::Vec3d p1(bb.minimum().x(), bb.minimum().y(), bb.minimum().z());
        cee::Vec3d p2(bb.minimum().x(), bb.maximum().y(), bb.minimum().z());
        cee::Vec3d p3(bb.minimum().x(), bb.maximum().y(), bb.maximum().z());
        cee::Vec3d p4(bb.minimum().x(), bb.minimum().y(), bb.maximum().z());
        cee::Vec3d p5(bb.maximum().x(), bb.minimum().y(), bb.minimum().z());
        cee::Vec3d p6(bb.maximum().x(), bb.maximum().y(), bb.minimum().z());
        cee::Vec3d p7(bb.maximum().x(), bb.maximum().y(), bb.maximum().z());
        cee::Vec3d p8(bb.maximum().x(), bb.minimum().y(), bb.maximum().z());

        // All all lines needed for visualizing the box
        cee::PtrRef<cee::vis::MarkupPartLines> part = new cee::vis::MarkupPartLines(cee::Color3f(1.0, 1.0, 0.0), 3, true, 0.0);
        part->add(p1, p2);
        part->add(p2, p3);
        part->add(p3, p4);
        part->add(p4, p1);
        part->add(p1, p5);
        part->add(p2, p6);
        part->add(p3, p7);
        part->add(p4, p8);
        part->add(p5, p6);
        part->add(p6, p7);
        part->add(p7, p8);
        part->add(p8, p5);
        markupModel->addPart(part.get());

        // Add the box to the view
        gcView->addModel(markupModel.get());

        gcView->camera().fitView(bb, cee::Vec3d(0, 0, -1), cee::Vec3d(0, 1, 0));
        gcView->camera().inputHandler()->setRotationPoint(bb.center());

        gcView->requestRedraw();
    }

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