diff --git a/Arrangement_on_surface_2/demo/globus/CMakeLists.txt b/Arrangement_on_surface_2/demo/globus/CMakeLists.txt
new file mode 100644
index 00000000000..26c51f376b4
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/CMakeLists.txt
@@ -0,0 +1,98 @@
+# This is the CMake script for compiling a CGAL application.
+
+cmake_minimum_required(VERSION 3.1...3.23)
+project(Globus_demo)
+
+if(NOT POLICY CMP0070 AND POLICY CMP0053)
+ # Only set CMP0053 to OLD with CMake<3.10, otherwise there is a warning.
+ cmake_policy(SET CMP0053 OLD)
+endif()
+
+if(POLICY CMP0071)
+ cmake_policy(SET CMP0071 NEW)
+endif()
+
+# General
+set(GLOBUS_MODULES_REL_DIR cmake/modules)
+set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/${GLOBUS_MODULES_REL_DIR})
+
+find_package(CGAL QUIET COMPONENTS Qt5 OPTIONAL_COMPONENTS Core)
+find_package(Qt5 QUIET COMPONENTS Gui Widgets)
+find_package(FileGDBAPI REQUIRED)
+
+if (CGAL_FOUND AND CGAL_Qt5_FOUND AND Qt5_FOUND)
+ include(${CGAL_USE_FILE})
+ add_compile_definitions(QT_NO_KEYWORDS)
+ include_directories( BEFORE ./ )
+ include_directories(${FileGDBAPI_INCLUDE_DIR})
+
+ # Arrangement package includes
+ add_definitions(-DQT_NO_KEYWORDS)
+ option(COMPILE_UTILS_INCREMENTALLY
+ "Compile files in Utils directory incrementally, or compile them all as a unit. \
+ Incremental compilation will be better for development and consume less \
+ memory while compiling but will take longer to compile."
+ OFF)
+
+ set(UTILS_SOURCE_FILES "")
+
+ if (COMPILE_UTILS_INCREMENTALLY)
+ set(UTILS_COMPILE_FILES ${UTILS_SOURCE_FILES})
+ else()
+ set(UTILS_CPP_FILES_INCLUDES "")
+ foreach(utils_src IN LISTS UTILS_SOURCE_FILES)
+ string(APPEND UTILS_CPP_FILES_INCLUDES "#include \"${utils_src}\"\n")
+ endforeach()
+ file(WRITE "${CMAKE_BINARY_DIR}/CombinedUtils.cpp" ${UTILS_CPP_FILES_INCLUDES})
+ set(UTILS_COMPILE_FILES "${CMAKE_BINARY_DIR}/CombinedUtils.cpp")
+ endif()
+
+
+ qt5_wrap_ui(globus_uis
+ Globus_window.ui)
+
+ qt5_wrap_cpp(CGAL_Qt5_MOC_FILES
+ Globus_window.h)
+
+ qt5_add_resources(CGAL_Qt5_RESOURCE_FILES Globus.qrc)
+
+ add_executable(globus
+ globus.cpp
+ Globus_window.cpp
+ ${UTILS_COMPILE_FILES}
+ ${globus_uis}
+ ${CGAL_Qt5_RESOURCE_FILES}
+ ${CGAL_Qt5_MOC_FILES})
+
+ target_link_libraries(globus ${FileGDBAPI_LIBRARY})
+ target_link_libraries(globus Qt5::Core Qt5::Gui Qt5::Widgets)
+ target_link_libraries(globus CGAL::CGAL CGAL::CGAL_Qt5)
+ if(CGAL_Core_FOUND)
+ target_link_libraries(globus CGAL::CGAL_Core)
+ endif()
+
+ add_to_cached_list(CGAL_EXECUTABLE_TARGETS globus)
+
+ include(${CGAL_MODULES_DIR}/CGAL_add_test.cmake)
+ cgal_add_compilation_test(globus)
+
+ set_property(TARGET globus PROPERTY INSTALL_RPATH "${FileGDBAPI_LIBRARY_DIR}")
+ set_property(TARGET globus PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
+
+ set_target_properties(globus PROPERTIES LINK_FLAGS "-Wl,--disable-new-dtags")
+
+else()
+ set(MISSING_DEPS "")
+
+ if(NOT CGAL_FOUND)
+ set(MISSING_DEPS "CGAL, ${MISSING_DEPS}")
+ endif()
+ if(NOT CGAL_Qt5_FOUND)
+ set(MISSING_DEPS "the CGAL Qt5 library, ${MISSING_DEPS}")
+ endif()
+ if(NOT Qt5_FOUND)
+ set(MISSING_DEPS "Qt5, ${MISSING_DEPS}")
+ endif()
+ message(STATUS
+ "NOTICE: This demo requires ${MISSING_DEPS} and will not be compiled.")
+endif()
diff --git a/Arrangement_on_surface_2/demo/globus/CombinedUtils.cpp b/Arrangement_on_surface_2/demo/globus/CombinedUtils.cpp
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/Arrangement_on_surface_2/demo/globus/Globus.qrc b/Arrangement_on_surface_2/demo/globus/Globus.qrc
new file mode 100644
index 00000000000..21763837336
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/Globus.qrc
@@ -0,0 +1,18 @@
+
+
+ resources/icons/zoomin.xpm
+ resources/icons/zoomout.xpm
+ resources/icons/zoomreset.xpm
+ resources/icons/yellow_icon.xpm
+ resources/icons/red_icon.xpm
+ resources/icons/green_icon.xpm
+ resources/icons/blue_icon.xpm
+ resources/icons/pink_icon.xpm
+ resources/icons/hand.xpm
+
+resources/icons/delete.xpm
+
+
+ resources/about.html
+
+
diff --git a/Arrangement_on_surface_2/demo/globus/Globus_window.cpp b/Arrangement_on_surface_2/demo/globus/Globus_window.cpp
new file mode 100644
index 00000000000..e3b83a1c853
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/Globus_window.cpp
@@ -0,0 +1,166 @@
+// Copyright (c) 2022 Tel-Aviv University (Israel).
+// All rights reserved.
+//
+// This file is part of CGAL (www.cgal.org).
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
+//
+// Author(s): Efi Fogel
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#include "Globus_window.h"
+#include "ui_Globus_window.h"
+
+//! \brief constructs
+Globus_window::Globus_window(QWidget* parent) :
+ CGAL::Qt::DemosMainWindow(parent), ui(new Ui::Globus_window) {
+ this->setup_ui();
+ // this->setupStatusBar();
+ // this->setupOptionsMenu();
+ this->addAboutDemo(":/cgal/Arrangement_on_surface_2/about.html");
+ this->addAboutCGAL();
+}
+
+//! \brief destructs
+Globus_window::~Globus_window() {}
+
+//! \brief
+void Globus_window::setup_ui() {
+ this->ui->setupUi(this);
+
+ this->mode_group = new QActionGroup(this);
+ this->mode_group->addAction(this->ui->action_drag);
+}
+
+//! \brief
+// void Globus_window::resetActionGroups(ArrangementDemoTab* tab, TraitsType tt) {
+// this->hideInsertMethods();
+// this->ui->actionInsert->setChecked(false);
+// this->ui->actionDrag->setChecked(false);
+// this->ui->actionLowerEnvelope->setChecked(false);
+// this->ui->actionUpperEnvelope->setChecked(false);
+// this->ui->actionShowGrid->setChecked(tab->isGridVisible());
+// this->ui->actionGridSnapMode->setChecked(tab->isSnapToGridEnabled());
+// this->ui->actionArrangementSnapMode->setChecked(
+// tab->isSnapToArrangementEnabled());
+// this->ui->actionLowerEnvelope->setChecked(tab->isLowerEnvelopeShown());
+// this->ui->actionUpperEnvelope->setChecked(tab->isUpperEnvelopeShown());
+
+// if (
+// tt != TraitsType::SEGMENT_TRAITS && tt != TraitsType::POLYLINE_TRAITS &&
+// tt != TraitsType::LINEAR_TRAITS)
+// this->ui->actionArrangementSnapMode->setVisible(false);
+// else
+// this->ui->actionArrangementSnapMode->setVisible(true);
+
+// // default action group is scrolling
+// this->ui->actionDrag->activate(QAction::Trigger);
+// }
+
+//! \brief
+// void Globus_window::reset_callback_state(ArrangementDemoTab* tab) {
+// if (tab) {
+// tab->getView()->setDragMode(QGraphicsView::NoDrag);
+// tab->unhookCallbacks();
+// }
+// }
+
+//! \brief
+void Globus_window::on_action_quit_triggered() { qApp->exit(); }
+
+//! \brief
+void Globus_window::on_action_open_triggered() {
+ const QString filename =
+ QFileDialog::getOpenFileName(this, tr("Open file"), "",
+ "Globus files (*.gdb)");
+ if (filename.isNull()) return;
+
+ if (filename.endsWith(".gdb")) {
+ QMessageBox::information(this, "Oops", "Not implemented yet");
+ // auto tab = this->openArrFile(filename);
+ // if (tab) {
+ // tab->setParent(this);
+ // this->addTab(tab, this->makeTabLabel(tab->traitsType()));
+ // tab->adjustViewport();
+ // }
+ }
+ else {
+ QMessageBox::information(this, "Oops", "Unsupported file format");
+ }
+}
+
+//! \brief
+void Globus_window::on_action_preferences_triggered() {
+ // ArrangementDemoPropertiesDialog dialog{this};
+
+ // if (dialog.exec() == QDialog::Accepted) {
+ // typedef ArrangementDemoPropertiesDialog Dialog;
+ // ArrangementDemoTab::Preferences pref;
+
+ // pref.edgeColor = dialog.property(Dialog::EDGE_COLOR_KEY).value();
+ // pref.edgeWidth =
+ // dialog.property(Dialog::EDGE_WIDTH_KEY).value();
+ // pref.vertexColor =
+ // dialog.property(Dialog::VERTEX_COLOR_KEY).value();
+ // pref.vertexRadius =
+ // dialog.property(Dialog::VERTEX_RADIUS_KEY).value();
+ // pref.envelopeEdgeColor =
+ // dialog.property(Dialog::ENVELOPE_EDGE_COLOR_KEY).value();
+ // pref.envelopeEdgeWidth =
+ // dialog.property(Dialog::ENVELOPE_EDGE_WIDTH_KEY).value();
+ // pref.envelopeVertexColor =
+ // dialog.property(Dialog::ENVELOPE_VERTEX_COLOR_KEY).value();
+ // pref.envelopeVertexRadius =
+ // dialog.property(Dialog::ENVELOPE_VERTEX_RADIUS_KEY).value();
+ // pref.verticalRayEdgeColor =
+ // dialog.property(Dialog::VERTICAL_RAY_EDGE_COLOR_KEY).value();
+ // pref.verticalRayEdgeWidth =
+ // dialog.property(Dialog::VERTICAL_RAY_EDGE_WIDTH_KEY)
+ // .value();
+ // pref.axesColor = dialog.property(Dialog::GRID_COLOR_KEY).value();
+ // pref.gridColor = pref.axesColor;
+ // pref.gridColor.setAlphaF(0.5);
+ // currentTab->updatePreferences(pref);
+ // }
+}
+
+//! \brief
+void Globus_window::on_action_save_as_triggered() {
+ QMessageBox::information(this, "Save as", "Not implemented yet");
+}
+
+//! \brief
+void Globus_window::on_action_zoom_in_triggered() {
+ // QGraphicsView* view = currentTab->getView();
+ // view->scale(2.0, 2.0);
+}
+
+//! \brief
+void Globus_window::on_action_zoom_out_triggered() {
+ // QGraphicsView* view = currentTab->getView();
+ // view->scale(0.5, 0.5);
+}
+
+//! \brief
+void Globus_window::on_action_zoom_reset_triggered() {
+ // currentTab->adjustViewport();
+}
+
+void Globus_window::on_action_drag_toggled(bool checked) {
+ // TODO: Move this to DemoTab
+ // QGraphicsView* activeView = currentTab->getView();
+ // if (!checked)
+ // activeView->setDragMode(QGraphicsView::NoDrag);
+ // else
+ // activeView->setDragMode(QGraphicsView::ScrollHandDrag);
+}
diff --git a/Arrangement_on_surface_2/demo/globus/Globus_window.h b/Arrangement_on_surface_2/demo/globus/Globus_window.h
new file mode 100644
index 00000000000..5670ef0f9c4
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/Globus_window.h
@@ -0,0 +1,59 @@
+// Copyright (c) 2022 Tel-Aviv University (Israel).
+// All rights reserved.
+//
+// This file is part of CGAL (www.cgal.org).
+//
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
+//
+// Author(s): Efi Fogel
+
+#ifndef GLOBUS_WINDOW_H
+#define GLOBUS_WINDOW_H
+
+#include
+#include
+
+#include
+
+#include
+#include
+
+namespace Ui { class Globus_window; }
+
+namespace CGAL {
+class Object;
+namespace Qt {
+class GraphicsViewNavigation;
+}
+}
+
+class QActionGroup;
+
+class Globus_window : public CGAL::Qt::DemosMainWindow {
+ Q_OBJECT
+
+public:
+ Globus_window(QWidget* parent = nullptr);
+ ~Globus_window();
+
+public Q_SLOTS:
+ void on_action_quit_triggered();
+ void on_action_open_triggered();
+ void on_action_save_as_triggered();
+ void on_action_preferences_triggered();
+ void on_action_zoom_in_triggered();
+ void on_action_zoom_out_triggered();
+ void on_action_zoom_reset_triggered();
+ void on_action_drag_toggled(bool);
+
+Q_SIGNALS:
+
+protected:
+ void setup_ui();
+
+private:
+ Ui::Globus_window* ui;
+ QActionGroup* mode_group;
+};
+
+#endif
diff --git a/Arrangement_on_surface_2/demo/globus/Globus_window.ui b/Arrangement_on_surface_2/demo/globus/Globus_window.ui
new file mode 100644
index 00000000000..ea9091a857b
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/Globus_window.ui
@@ -0,0 +1,152 @@
+
+
+ Globus_window
+
+
+
+ 0
+ 0
+ 946
+ 600
+
+
+
+ Globus
+
+
+
+
+ toolBar
+
+
+ TopToolBarArea
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+ &Quit
+
+
+
+
+ true
+
+
+
+ :/cgal/icons/hand.xpm:/cgal/icons/hand.xpm
+
+
+ Drag
+
+
+
+
+ &Preferences...
+
+
+
+
+ Save As...
+
+
+ Ctrl+S
+
+
+
+
+ Open...
+
+
+ Ctrl+O
+
+
+
+
+
+ :/cgal/icons/zoomin.xpm:/cgal/icons/zoomin.xpm
+
+
+ Zoom In
+
+
+ Zoom In
+
+
+
+
+
+ :/cgal/icons/zoomout.xpm:/cgal/icons/zoomout.xpm
+
+
+ Zoom Out
+
+
+ Zoom Out
+
+
+
+
+
+ :/cgal/icons/zoomreset.xpm:/cgal/icons/zoomreset.xpm
+
+
+ Zoom Reset
+
+
+ Zoom Reset
+
+
+
+
+
+
+
+
diff --git a/Arrangement_on_surface_2/demo/globus/cmake/modules/FindFileGDBAPI.cmake b/Arrangement_on_surface_2/demo/globus/cmake/modules/FindFileGDBAPI.cmake
new file mode 100755
index 00000000000..54358601b3a
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/cmake/modules/FindFileGDBAPI.cmake
@@ -0,0 +1,84 @@
+# - Try to find FileGDBAPI (FileGDBAPI.lib on Windows and v8_base.x64.a on Linux)
+# Once done this will define
+# FileGDBAPI_FOUND - System has FileGDBAPI
+# FileGDBAPI_INCLUDE_DIR - The FileGDBAPI include directories
+# FileGDBAPI_LIBRARY - The library needed to use FileGDBAPI
+# FileGDBAPI_LIBRARY_DIR - The directory where lib files are.
+
+set(FileGDBAPI_NAMES_RELEASE FileGDBAPI)
+set(FileGDBAPI_NAMES_DEBUG FileGDBAPId ${FileGDBAPI_NAMES_RELEASE})
+
+find_path(FileGDBAPI_INCLUDE_DIR NAMES FileGDBAPI.h
+ PATH_SUFFIXES include FileGDBAPI include/FileGDBAPI
+ PATHS /opt/libvFileGDBAPI-$ENV{FileGDBAPI_VER}
+ HINTS ENV FileGDBAPI_INC_DIR ENV FileGDBAPI_DIR)
+
+# CMake>=2.6 supports the notation "debug XXd optimized XX"
+set(FileGDBAPI_HINTS ENV FileGDBAPI_LIB_DIR ENV FileGDBAPI_DIR)
+if (UNIX)
+ set(FileGDBAPI_HINTS_DEBUG ${FileGDBAPI_DIR}/out/x64.debug $ENV{FileGDBAPI_DIR}/out/x64.debug)
+ set(FileGDBAPI_HINTS_RELEASE ${FileGDBAPI_DIR}/out/x64.release $ENV{FileGDBAPI_DIR}/out/x64.release)
+ set(FileGDBAPI_PATHS /opt/libFileGDBAPI-$ENV{FileGDBAPI_VER})
+elseif(WIN32)
+ set(FileGDBAPI_HINTS_DEBUG ${FileGDBAPI_DIR}/build/Debug $ENV{FileGDBAPI_DIR}/build/Debug)
+ set(FileGDBAPI_HINTS_RELEASE ${FileGDBAPI_DIR}/out/build/Release $ENV{FileGDBAPI_DIR}/build/Release)
+else()
+endif()
+
+find_library(FileGDBAPI_LIBRARY_RELEASE
+ NAMES ${FileGDBAPI_NAMES_RELEASE}
+ PATH_SUFFIXES lib
+ HINTS ${FileGDBAPI_HINTS} ${FileGDBAPI_HINTS_RELEASE}
+ PATHS ${FileGDBAPI_PATHS}
+ DOC "Google FileGDBAPI JavaScript Engine Library (Release)")
+
+find_library(FileGDBAPI_LIBRARY_DEBUG
+ NAMES ${FileGDBAPI_NAMES_DEBUG}
+ PATH_SUFFIXES lib
+ HINTS ${FileGDBAPI_HINTS} ${FileGDBAPI_HINTS_DEBUG}
+ PATHS ${FileGDBAPI_PATHS}
+ DOC "Google FileGDBAPI JavaScript Engine Library (Debug)")
+
+if(CMAKE_BUILD_TYPE EQUAL "Release")
+ get_filename_component(FileGDBAPI_LIBRARY_DIR ${FileGDBAPI_LIBRARY_RELEASE} PATH)
+ set(FileGDBAPI_LIBRARY ${FileGDBAPI_LIBRARY_RELEASE})
+else()
+ get_filename_component(FileGDBAPI_LIBRARY_DIR ${FileGDBAPI_LIBRARY_DEBUG} PATH)
+ set(FileGDBAPI_LIBRARY_DEBUG ${FileGDBAPI_LIBRARY_RELEASE})
+endif()
+
+set(FileGDBAPI_LIBRARY
+ optimized ${FileGDBAPI_LIBRARY_RELEASE} debug ${FileGDBAPI_LIBRARY_DEBUG})
+
+include(FindPackageHandleStandardArgs)
+
+# handle the QUIETLY and REQUIRED arguments and set FileGDBAPI_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args(FileGDBAPI DEFAULT_MSG
+ FileGDBAPI_LIBRARY
+ FileGDBAPI_INCLUDE_DIR)
+
+# Detect FileGDBAPI version
+set(FileGDBAPI_VERSION_MAJOR "1")
+set(FileGDBAPI_VERSION_MINOR "5")
+set(FileGDBAPI_VERSION_PATCH "2")
+set(FileGDBAPI_VERSION_TWEAK "")
+set(FileGDBAPI_VERSION "${FileGDBAPI_VERSION_MAJOR}.${FileGDBAPI_VERSION_MINOR}.${FileGDBAPI_VERSION_PATCH}.${FileGDBAPI_VERSION_TWEAK}")
+
+set(FileGDBAPI_VERSION_HEX 0x0${FileGDBAPI_VERSION_MAJOR}${FileGDBAPI_VERSION_MINOR}${FileGDBAPI_VERSION_PATCH}${FileGDBAPI_VERSION_TWEAK})
+string(LENGTH "${FileGDBAPI_VERSION_HEX}" FileGDBAPI_VERSION_HEX_LENGTH)
+
+while(FileGDBAPI_VERSION_HEX_LENGTH LESS 8)
+ set(FileGDBAPI_VERSION_HEX "${FileGDBAPI_VERSION_HEX}0")
+ string(LENGTH "${FileGDBAPI_VERSION_HEX}" FileGDBAPI_VERSION_HEX_LENGTH)
+endwhile()
+
+mark_as_advanced(FileGDBAPI_INCLUDE_DIR FileGDBAPI_LIBRARY FileGDBAPI_LIBRARY_DIR)
+
+if(FileGDBAPI_CMAKE_DEBUG)
+ message(STATUS "FileGDBAPI_INCLUDE_DIR: ${FileGDBAPI_INCLUDE_DIR}")
+ message(STATUS "FileGDBAPI_LIBRARY: ${FileGDBAPI_LIBRARY}")
+ message(STATUS "FileGDBAPI_LIBRARY_DEPENDS: ${FileGDBAPI_LIBRARY_DEPENDS}")
+ message(STATUS "FileGDBAPI_VERSION: ${FileGDBAPI_VERSION}")
+ message(STATUS "FileGDBAPI_VERSION_HEX: ${FileGDBAPI_VERSION_HEX}")
+endif()
diff --git a/Arrangement_on_surface_2/demo/globus/globus.cpp b/Arrangement_on_surface_2/demo/globus/globus.cpp
new file mode 100644
index 00000000000..825f3fe1d70
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/globus.cpp
@@ -0,0 +1,141 @@
+// Copyright (c) 2022, 2020 Tel-Aviv University (Israel).
+// All rights reserved.
+//
+// This file is part of CGAL (www.cgal.org).
+//
+// $URL$
+// $Id$
+// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
+//
+// Author(s): Efi Fogel
+
+#include
+#include
+
+#include
+
+#include
+
+#include "Globus_window.h"
+
+//
+struct country {
+ //! Constructor
+ country(std::string& name) :
+ m_name(std::move(name))
+ {}
+
+ std::string m_name;
+};
+
+namespace FGA = FileGDBAPI;
+
+/*!
+ */
+int load_countries(std::vector& countries) {
+ // Open the geodatabase and the table.
+ fgdbError hr;
+ FGA::Geodatabase geodatabase;
+ hr = FGA::OpenGeodatabase(L"/home/efif/tmp/esri/19113835-45b5-40b9-989b-fd04aad324da.gdb", geodatabase);
+ if (hr != S_OK) return hr;
+
+ // std::vector types;
+ // hr = geodatabase.GetDatasetTypes(types);
+ // if (hr != S_OK) return hr;
+ // std::cout << "Types:\n";
+ // for (const auto& type : types)
+ // std::wcout << type << std::endl;
+
+ FGA::Table table;
+ hr = geodatabase.OpenTable(L"World_Countries", table);
+ if (hr != S_OK) {
+ std::cerr << "Cannot open table!\n";
+ return hr;
+ }
+
+ // std::string doc;
+ // hr = table.GetDocumentation(doc);
+ // if (hr != S_OK) return hr;
+ // std::cout << "Table Information:\n";
+ // std::cout << doc << std::endl;
+
+ // FGA::fieldDefs field_defs;
+ // hr = table.GetFields(fields_defs);
+ // if (hr != S_OK) return hr;
+ // std::cout << "Fields:\n";
+ // for (const auto& field : Fields)
+ // std::wcout << field << std::endl;
+ FGA::FieldInfo field_info;
+ hr = table.GetFieldInformation(field_info);
+ if (hr != S_OK) return hr;
+ int count;
+ hr = field_info.GetFieldCount(count);
+ std::cout << "Number of fileds: " << count << std::endl;
+ for (auto i = 0; i < count; ++i) {
+ std::wstring name;
+ hr = field_info.GetFieldName(i, name);
+ if (hr != S_OK) return hr;
+ std::wcout << "Name: " << name << std::endl;
+ }
+
+ FGA::Envelope envelope;
+ FGA::EnumRows rows;
+ hr = table.Search(L"SHAPE, COUNTRY", L"", envelope, true, rows);
+ if (hr != S_OK) {
+ std::cerr << "Cannot find rows!\n";
+ return hr;
+ }
+
+ countries.clear();
+ FGA::Row row;
+ while (rows.Next(row) == S_OK) {
+ std::wstring name;
+ row.GetString(L"COUNTRY", name);
+ std::string simple_name;
+ simple_name.assign(name.begin(), name.end());
+ countries.emplace_back(simple_name);
+ }
+
+ // Close the table
+ hr = geodatabase.CloseTable(table);
+ if (hr != S_OK) {
+ std::wcout << "An error occurred while closing Cities." << endl;
+ std::wcout << "Error code: " << hr << endl;
+ return -1;
+ }
+
+ // Close the geodatabase
+ hr = FGA::CloseGeodatabase(geodatabase);
+ if (hr != S_OK) {
+ std::wcout << "An error occurred while closing the geodatabase." << endl;
+ std::wcout << "Error code: " << hr << endl;
+ return -1;
+ }
+
+ return S_OK;
+}
+
+//
+int main(int argc, char* argv[]) {
+ // Load the countries based on a search extent.
+ std::vector countries;
+ size_t hr = load_countries(countries);
+ if (hr != S_OK) {
+ std::cerr << "Failed to load database!\n";
+ return -1;
+ }
+ for (const auto& country : countries) {
+ std::cout << country.m_name << std::endl;
+ }
+
+ QApplication app(argc, argv);
+ QCoreApplication::setOrganizationName("CGAL");
+ QCoreApplication::setApplicationName("globus");
+
+ // Import resources from libCGAL (Qt5).
+ CGAL_QT_INIT_RESOURCES;
+
+ Globus_window window;
+ window.show();
+ return app.exec();
+}
diff --git a/Arrangement_on_surface_2/demo/globus/resources/about.html b/Arrangement_on_surface_2/demo/globus/resources/about.html
new file mode 100644
index 00000000000..6cd0427df84
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/about.html
@@ -0,0 +1,10 @@
+
+
+Globus
+
+
+Globus
+
+This program demonstrates the use of the geodesic traits if of the CGAL 2D Arrangements package.
+
+
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/arrow_down.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/arrow_down.xpm
new file mode 100644
index 00000000000..cd5f097860b
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/arrow_down.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static const char *demo_arrow_down_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 3 1",
+/* colors */
+" c #000000",
+". c #808080",
+"X c None",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXX.XXX. .XXX.XXXXXXXXXX",
+"XXXXXXXXXX..XX. .XX..XXXXXXXXXX",
+"XXXXXXXXXXX. .. .. .XXXXXXXXXXX",
+"XXXXXXXXXXXX.. .XXXXXXXXXXXX",
+"XXXXXXXXXXXXX. .XXXXXXXXXXXXX",
+"XXXXXXXXXXXXX. .XXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXX..XXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXX..XXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXX..XXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/arrow_up.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/arrow_up.xpm
new file mode 100644
index 00000000000..4b1ee76a1a0
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/arrow_up.xpm
@@ -0,0 +1,42 @@
+/* XPM */
+static const char *demo_arrow_up_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 3 1",
+/* colors */
+" c #000000",
+". c #808080",
+"X c None",
+/* pixels */
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXX..XXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXX..XXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXX..XXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXX. .XXXXXXXXXXXXX",
+"XXXXXXXXXXXXX. .XXXXXXXXXXXXX",
+"XXXXXXXXXXXX. . . .XXXXXXXXXXXX",
+"XXXXXXXXXXX. .. .. .XXXXXXXXXXX",
+"XXXXXXXXXX..XX. .XX..XXXXXXXXXX",
+"XXXXXXXXXX.XXX. .XXX.XXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXX. .XXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/blue_icon.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/blue_icon.xpm
new file mode 100644
index 00000000000..e4340c56330
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/blue_icon.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+const char* blue_icon[] = {
+/* columns rows colors chars-per-pixel */
+ "16 16 2 1",
+ "g c blue",
+ ". c None",
+/* pixels */
+ "................",
+ "................",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "................",
+ "................"};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/colors.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/colors.xpm
new file mode 100644
index 00000000000..6a2ee004751
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/colors.xpm
@@ -0,0 +1,51 @@
+/* XPM */
+static const char *demo_colors_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 12 1",
+/* colors */
+" c #000000",
+". c #800000",
+"X c #C0C0C0",
+"o c #008080",
+"O c #FF00FF",
+"+ c #FF0000",
+"@ c #808080",
+"# c #000080",
+"% c #008000",
+"& c #808000",
+"* c #0000FF",
+"$ c None",
+/* pixels */
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$ $$",
+"$$ *******************ooooooo $$",
+"$$ *******************o@@o@@o $$",
+"$$ *******************o@@o@@o $$",
+"$$ *******************ooooooo $$",
+"$$ $$",
+"$$ XXXXXXXXXXXXXXXXXXXXXXXXXX $$",
+"$$ XXXXXXXXXXXXXXXXXXXXXXXXXX $$",
+"$$ XXXXXXXXXXXXXXXXXXXXXXXXXX $$",
+"$$ XX XX####XX****XXOOOOXX $$",
+"$$ XX XX####XX****XXOOOOXX $$",
+"$$ XX XX####XX****XXOOOOXX $$",
+"$$ XX XX####XX****XXOOOOXX $$",
+"$$ XXXXXXXXXXXXXXXXXXXXXXXXXX $$",
+"$$ XXXXXXXXXXXXXXXXXXXXXXXXXX $$",
+"$$ XXXXXXXXXXXXXXXXXXXXXXXXXX $$",
+"$$ XX....XX++++XX%%%%XX&&&&XX $$",
+"$$ XX....XX++++XX%%%%XX&&&&XX $$",
+"$$ XX....XX++++XX%%%%XX&&&&XX $$",
+"$$ XX....XX++++XX%%%%XX&&&&XX $$",
+"$$ XXXXXXXXXXXXXXXXXXXXXXXXXX $$",
+"$$ XXXXXXXXXXXXXXXXXXXXXXXXXX $$",
+"$$ XXXXXXXXXXXXXXXXXXXXXXXXXX $$",
+"$$ $$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
+"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
+};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/delete.bmp b/Arrangement_on_surface_2/demo/globus/resources/icons/delete.bmp
new file mode 100644
index 00000000000..d59564bbf9f
Binary files /dev/null and b/Arrangement_on_surface_2/demo/globus/resources/icons/delete.bmp differ
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/delete.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/delete.xpm
new file mode 100644
index 00000000000..67ebe59dfcb
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/delete.xpm
@@ -0,0 +1,45 @@
+/* XPM */
+static const char *delete_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 6 1",
+/* colors */
+" c #000000",
+". c #C0C0C0",
+"X c #808080",
+"o c #FFFFFF",
+"O c #FFFF00",
+"+ c None",
+/* pixels */
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"+++++++++++++++ +++++",
+"+++++++++++++ oOoOoOoOoOoO ++++",
+"++++++++++++ OoOoOoOoOoOoO O +++",
+"+++++++++++ OoOoOoOoOoOoO O. +++",
+"++++++++++ OoOoOoOoOoOoO O.O +++",
+"+++++++++ OoOoOoOoOoOoO O.O. +++",
+"++++++++ OoOoOoOoOoOoO O.O.O +++",
+"+++++++ OoOoOoOoOoOoO O.O.O ++++",
+"++++++ OoOoOoOoOoOoO O.O.O. ++++",
+"+++++ OoOoOoOoOoOoO O.O.O. +X+++",
+"++++ OoOoOoOoOoOoO O.O.O. +X.+++",
+"+++ XO.O.O. +X.++++",
+"++ .OOOOOOOOOOOO. .O.O. +X.+++++",
+"++ OOOOOOOOOOOOOO O.O. +X.++++++",
+"++ OOOOOOOOOOOOOO .O. +X.+++++++",
+"++ OOOOOOOOOOOOOO O. +X.++++++++",
+"++ OOOOOOOOOOOOOO . +X.+++++++++",
+"++ OOOOOOOOOOOOOO +X.++++++++++",
+"++ .OOOOOOOOOOOO. +X.+++++++++++",
+"+++ +X.++++++++++++",
+"++++XXXXXXXXXXXXXX.+++++++++++++",
+"++++..............++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++",
+"++++++++++++++++++++++++++++++++"
+};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/draw.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/draw.xpm
new file mode 100644
index 00000000000..cbe66b84ae7
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/draw.xpm
@@ -0,0 +1,76 @@
+/* XPM */
+/*static const char * draw_xpm[] = {
+"32 32 3 1",
+" c None",
+". c #FFFFFF",
+"x c #000000",
+" ",
+" ",
+" ",
+" ... ",
+" . .... ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" .xxxxx. ",
+" ....... ",
+" .xxxx. ",
+" .xxx. ",
+" .xx. ",
+" .x. ",
+" . ",
+" ",
+" ",
+" ",
+" ",
+" "};*/
+
+/* XPM */
+static const char * small_draw_xpm[] = {
+"32 32 3 1",
+" c None",
+". c #FFFFFF",
+"x c #000000",
+" ",
+" ",
+" ",
+" xxxxxx ",
+" x.....x ",
+" x.xxx.x ",
+" x.xxx.x ",
+" x.xxx.x ",
+" x.xxx.x ",
+" x.xxx.x ",
+" x.xxx.x ",
+" x.xxx.x ",
+" x.xxx.x ",
+" x.xxx.x ",
+" x.....x ",
+" x.xx.x ",
+" x.x.x ",
+" x..x ",
+" x.x ",
+" x ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" ",
+" "};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/green_icon.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/green_icon.xpm
new file mode 100644
index 00000000000..e4b1f38207d
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/green_icon.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+const char* green_icon[] = {
+/* columns rows colors chars-per-pixel */
+ "16 16 2 1",
+ "g c green",
+ ". c None",
+/* pixels */
+ "................",
+ "................",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "................",
+ "................"};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/hand.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/hand.xpm
new file mode 100644
index 00000000000..f439246f2b0
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/hand.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+const char * hand_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 5 1",
+" c black",
+". c #808080",
+"X c #c0c0c0",
+"o c white",
+"O c None",
+/* pixels */
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOO OOOOOOOOOOOOOOO",
+"OOOOOOOOOOO O Xo OOOOOOOOOOOO",
+"OOOOOOOOOO oo Xo Xo OOOOOOOOOOO",
+"OOOOOOOOOO Xo Xo Xo . OOOOOOOOO",
+"OOOOOOOOOOO oo Xo Xo X OOOOOOOO",
+"OOOOOOOOOOO Xo Xo Xo Xo OOOOOOOO",
+"OOOOOOOOO X ooooooo Xo OOOOOOOO",
+"OOOOOOOO oo ooXXoXoooo OOOOOOOO",
+"OOOOOOOO Xoo XooooooXo OOOOOOOOO",
+"OOOOOOOOO XooXoooooooo OOOOOOOOO",
+"OOOOOOOOOO ooooooooooo OOOOOOOOO",
+"OOOOOOOOOO Xooooooooo OOOOOOOOOO",
+"OOOOOOOOOOO Xoooooooo OOOOOOOOOO",
+"OOOOOOOOOOOO Xoooooo OOOOOOOOOOO",
+"OOOOOOOOOOOOO Oooooo OOOOOOOOOOO",
+"OOOOOOOOOOOOO Oooooo OOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO",
+"OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"
+};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/none.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/none.xpm
new file mode 100644
index 00000000000..a4dc0d83bc2
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/none.xpm
@@ -0,0 +1,44 @@
+/* XPM */
+const const char *none_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"32 32 4 1",
+" c opaque",
+". c navy",
+"X c #c0c0c0",
+"o c None",
+/* pixels */
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+"oooooooooooooooooooooooooooooooo",
+};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/pink_icon.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/pink_icon.xpm
new file mode 100644
index 00000000000..550f9bcf33c
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/pink_icon.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+const char* blue_icon[] = {
+/* columns rows colors chars-per-pixel */
+ "16 16 2 1",
+ "g c #FFC0CB",
+ ". c None",
+/* pixels */
+ "................",
+ "................",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "................",
+ "................"};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/red_icon.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/red_icon.xpm
new file mode 100644
index 00000000000..ddb377e5526
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/red_icon.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+const char* red_icon[] = {
+/* columns rows colors chars-per-pixel */
+ "16 16 2 1",
+ "g c red",
+ ". c None",
+/* pixels */
+ "................",
+ "................",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "................",
+ "................"};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/yellow_icon.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/yellow_icon.xpm
new file mode 100644
index 00000000000..4b8dc107215
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/yellow_icon.xpm
@@ -0,0 +1,23 @@
+/* XPM */
+const char* yellow_icon[] = {
+/* columns rows colors chars-per-pixel */
+ "16 16 2 1",
+ "g c yellow",
+ ". c None",
+/* pixels */
+ "................",
+ "................",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..ggg......ggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "..gggggggggggg..",
+ "................",
+ "................"};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/zoomin.bmp b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomin.bmp
new file mode 100644
index 00000000000..63ae8833b7a
Binary files /dev/null and b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomin.bmp differ
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/zoomin.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomin.xpm
new file mode 100644
index 00000000000..f765af05376
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomin.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static const char *zoomin_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 8 1",
+/* colors */
+" c #000000",
+". c #C0C0C0",
+"X c #008080",
+"o c #FF0000",
+"O c #808080",
+"+ c #000080",
+"# c #0000FF",
+"@ c None",
+/* pixels */
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@O O@@@@@@@@@@@@@@@",
+"@@@@@@@@O O...O O@@@@@@@@@@@@@",
+"@@@@@@@ O..@@@..O @@@@@@@@@@@@",
+"@@@@@@ O..@@@@@@@..O @@@@@@@@@@@",
+"@@@@@O ..@@@@@@@@@.. O@@@@@@@@@@",
+"@@@@@ O.@@@@ooo@@@@.O @@@@@@@@@@",
+"@@@@O .@@@@@ooo@@@@@. O@@@@@@@@@",
+"@@@@ O.@@@@@ooo@@@@@.O @@@@@@@@@",
+"@@@@ .@@@ooooooooo@@@. @@@@@@@@@",
+"@@@@ .@@@ooooooooo@@@. @@@@@@@@@",
+"@@@@ .@@@ooooooooo@@@. @@@@@@@@@",
+"@@@@ O.@@@@@ooo@@@@@.O @@@@@@@@@",
+"@@@@O .@@@@@ooo@@@@@. O@@@@@@@@@",
+"@@@@@ O.@@@@ooo@@@@.O @@@@@@@@@@",
+"@@@@@O ..@@@@@@@@@.. O@@@@@@@@@@",
+"@@@@@@ O..@@@@@@@..O +@@@@@@@@@@",
+"@@@@@@@ O..@@@..O ##+@@@@@@@@@",
+"@@@@@@@@O O...O O+X##+@@@@@@@@",
+"@@@@@@@@@@O O@@@+X##+@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@+X##+@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@+X##+@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@+X##+@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@+X##+@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@+X+@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@+@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
+};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/zoomout.bmp b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomout.bmp
new file mode 100644
index 00000000000..29c0d381890
Binary files /dev/null and b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomout.bmp differ
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/zoomout.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomout.xpm
new file mode 100644
index 00000000000..d01baa71718
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomout.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static const char *zoomout_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 8 1",
+/* colors */
+" c #000000",
+". c #C0C0C0",
+"X c #008080",
+"o c #FF0000",
+"O c #808080",
+"+ c #000080",
+"# c #0000FF",
+"@ c None",
+/* pixels */
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@O O@@@@@@@@@@@@@@@",
+"@@@@@@@@O O...O O@@@@@@@@@@@@@",
+"@@@@@@@ O..@@@..O @@@@@@@@@@@@",
+"@@@@@@ O..@@@@@@@..O @@@@@@@@@@@",
+"@@@@@O ..@@@@@@@@@.. O@@@@@@@@@@",
+"@@@@@ O.@@@@@@@@@@@.O @@@@@@@@@@",
+"@@@@O .@@@@@@@@@@@@@. O@@@@@@@@@",
+"@@@@ O.@@@@@@@@@@@@@.O @@@@@@@@@",
+"@@@@ .@@@ooooooooo@@@. @@@@@@@@@",
+"@@@@ .@@@ooooooooo@@@. @@@@@@@@@",
+"@@@@ .@@@ooooooooo@@@. @@@@@@@@@",
+"@@@@ O.@@@@@@@@@@@@@.O @@@@@@@@@",
+"@@@@O .@@@@@@@@@@@@@. O@@@@@@@@@",
+"@@@@@ O.@@@@@@@@@@@.O @@@@@@@@@@",
+"@@@@@O ..@@@@@@@@@.. O@@@@@@@@@@",
+"@@@@@@ O..@@@@@@@..O +@@@@@@@@@@",
+"@@@@@@@ O..@@@..O ##+@@@@@@@@@",
+"@@@@@@@@O O...O O+X##+@@@@@@@@",
+"@@@@@@@@@@O O@@@+X##+@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@+X##+@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@+X##+@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@+X##+@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@+X##+@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@+X+@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@+@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
+};
diff --git a/Arrangement_on_surface_2/demo/globus/resources/icons/zoomreset.xpm b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomreset.xpm
new file mode 100644
index 00000000000..bbda98c20d7
--- /dev/null
+++ b/Arrangement_on_surface_2/demo/globus/resources/icons/zoomreset.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static const char *zoomin_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"32 32 8 1",
+/* colors */
+" c #000000",
+". c #C0C0C0",
+"X c #008080",
+"o c #FF0000",
+"O c #808080",
+"+ c #000080",
+"# c #0000FF",
+"@ c None",
+/* pixels */
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@O O@@@@@@@@@@@@@@@",
+"@@@@@@@@O O...O O@@@@@@@@@@@@@",
+"@@@@@@@ O..@@@..O @@@@@@@@@@@@",
+"@@@@@@ O..@@@@@@@..O @@@@@@@@@@@",
+"@@@@@O ..@@@@@@@@@.. O@@@@@@@@@@",
+"@@@@@ O.@@ooooo@@@@.O @@@@@@@@@@",
+"@@@@O .@@oo@@@ooo@@@. O@@@@@@@@@",
+"@@@@ O.@@o@@@@@@o@@@.O @@@@@@@@@",
+"@@@@ .@@oo@@@@@@o@@@@. @@@@@@@@@",
+"@@@@ .@@oo@@@@o@o@o@@. @@@@@@@@@",
+"@@@@ .@@oo@@@@o@o@o@@. @@@@@@@@@",
+"@@@@ O.@oo@@@@@ooo@@.O @@@@@@@@@",
+"@@@@O .@@ooo@@@@@@@@. O@@@@@@@@@",
+"@@@@@ O.@@@oooo@@@@.O @@@@@@@@@@",
+"@@@@@O ..@@@@@@@@@.. O@@@@@@@@@@",
+"@@@@@@ O..@@@@@@@..O +@@@@@@@@@@",
+"@@@@@@@ O..@@@..O ##+@@@@@@@@@",
+"@@@@@@@@O O...O O+X##+@@@@@@@@",
+"@@@@@@@@@@O O@@@+X##+@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@+X##+@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@+X##+@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@+X##+@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@+X##+@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@+X+@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@+@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
+"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"
+};