zoukankan      html  css  js  c++  java
  • osg qt ifc

    ui_ifcproject_20190702.h

    #pragma once
    /********************************************************************************
    ** Form generated from reading UI file 'ifcproject_201907.ui'
    **
    ** Created by: Qt User Interface Compiler version 5.12.2
    **
    ** WARNING! All changes made in this file will be lost when recompiling UI file!
    ********************************************************************************/
    
    #ifndef UI_IFCPROJECT_201907_H
    #define UI_IFCPROJECT_201907_H
    
    #include <QFile>
    #include <QtCore/QVariant>
    #include <QtWidgets/QApplication>
    #include <QtWidgets/QMainWindow>
    #include <QtWidgets/QMenuBar>
    #include <QtWidgets/QStatusBar>
    #include <QtWidgets/QToolBar>
    #include <QtWidgets/QWidget>
    #include <QtWidgets/QHBoxLayout>
    
    #include <QTableView>
    #include <QDockWidget>
    #include <QSplitter>
    
    QT_BEGIN_NAMESPACE
    
    class Ui_IFCProject_201907Class
    {
    public:
        QMenuBar *menuBar;
        QToolBar *mainToolBar;
        QWidget *centralWidget;
        QStatusBar *statusBar;
        QSplitter *qsplitter1;
        QHBoxLayout *horizontalLayout;
    
    
        QDockWidget *centerDockWidget;
    
        void setupUi(QMainWindow *IFCProject_201907Class)
        {
            if (IFCProject_201907Class->objectName().isEmpty())
                IFCProject_201907Class->setObjectName(QString::fromUtf8("IFCProject_201907Class"));
            
            //QFile stylefile("F:\IFCProject\IFCProject_201907\IFCProject_201907\Resources\styles.qss");
            QFile stylefile("./Resources/styles.qss");
    
            stylefile.open(QFile::ReadOnly);
            QString styleSheet = QLatin1String(stylefile.readAll());
            IFCProject_201907Class->setStyleSheet(styleSheet);
            
            IFCProject_201907Class->resize(600, 400);
            menuBar = new QMenuBar(IFCProject_201907Class);
            menuBar->setObjectName(QString::fromUtf8("menuBar"));
            IFCProject_201907Class->setMenuBar(menuBar);
    
            mainToolBar = new QToolBar(IFCProject_201907Class);
            mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
            IFCProject_201907Class->addToolBar(mainToolBar);
    
            centralWidget = new QWidget(IFCProject_201907Class);
            centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
            IFCProject_201907Class->setCentralWidget(centralWidget);
            //IFCProject_201907Class->addDockWidget();
    
            horizontalLayout = new QHBoxLayout(centralWidget);
            horizontalLayout->setSpacing(6);
            horizontalLayout->setContentsMargins(11, 11, 11, 11);
            horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
    
            qsplitter1 = new QSplitter(centralWidget);
            
    
            QDockWidget *dock = new QDockWidget(qsplitter1);
            dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
            //addDockWidget(Qt::RightDockWidgetArea, dock);
            //dock->setTitleBarWidget(IFCProject_201907Class);
            //IFCProject_201907Class->addDockWidget(Qt::LeftDockWidgetArea, dock);
            qsplitter1->addWidget(dock);
            //qsplitter1->setOrientation(Qt::Vertical);
            qsplitter1->setOrientation(Qt::Horizontal);
    
            
            centerDockWidget = new QDockWidget(qsplitter1);
            //IFCProject_201907Class->addDockWidget(Qt::LeftDockWidgetArea, centerDockWidget);
    
            QTableView *tableView1 = new QTableView(dock);
            tableView1->setMinimumHeight(500);
            dock->setWidget(tableView1);
    
            qsplitter1->addWidget(centerDockWidget);
            
    
            QDockWidget *dockRight = new QDockWidget(qsplitter1);
            dockRight->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
            //addDockWidget(Qt::RightDockWidgetArea, dock);
            //IFCProject_201907Class->addDockWidget(Qt::RightDockWidgetArea, dockRight);
            qsplitter1->addWidget(dockRight);
    
            horizontalLayout->addWidget(qsplitter1);
    
    
    
    
    
    
    
            statusBar = new QStatusBar(IFCProject_201907Class);
            statusBar->setObjectName(QString::fromUtf8("statusBar"));
            IFCProject_201907Class->setStatusBar(statusBar);
    
            retranslateUi(IFCProject_201907Class);
    
            QMetaObject::connectSlotsByName(IFCProject_201907Class);
        } // setupUi
    
        void retranslateUi(QMainWindow *IFCProject_201907Class)
        {
            IFCProject_201907Class->setWindowTitle(QApplication::translate("IFCProject_201907Class", "IFCProject_201907", nullptr));
        } // retranslateUi
    
    };
    
    namespace Ui {
        class IFCProject_201907Class : public Ui_IFCProject_201907Class {};
    } // namespace Ui
    
    QT_END_NAMESPACE
    
    #endif // UI_IFCPROJECT_201907_H

    ifcproject_201907.cpp

    #include "ifcproject_201907.h"
    
    IFCProject_201907::IFCProject_201907(QWidget *parent)
        : QMainWindow(parent)
    {
        ui.setupUi(this);
        loadIfcModel();
    }
    
    IFCProject_201907::~IFCProject_201907()
    {
    
    }
    
    void IFCProject_201907::loadIfcModel()
    {
        std::wstring m_file_path = L"D://yd0014.ifc"; 
        IfcVCTool* ifcVCTool1 = new IfcVCTool();
        osg::ref_ptr<osg::Switch> model_switch = ifcVCTool1->getModelNode();
        SceneGraphUtils::clearAllChildNodes(model_switch);
        ifcVCTool1->clearSelection();
    
        // reset the IFC model
        shared_ptr<GeometryConverter> geometry_converter = ifcVCTool1->getGeometryConverter();
        geometry_converter->clearMessagesCallback();
        geometry_converter->resetModel();
        std::stringstream err;
    
        try
        {
            // load file to IFC model
            ifcVCTool1->getModelReader()->loadModelFromFile(m_file_path, geometry_converter->getBuildingModel());
    
            // convert IFC geometric representations into Carve geometry
            geometry_converter->convertGeometry();
    
            // convert Carve geometry to OSG
            shared_ptr<ConverterOSG> converter_osg(new ConverterOSG(geometry_converter->getGeomSettings()));
            converter_osg->setMessageTarget(geometry_converter.get());
            converter_osg->convertToOSG(geometry_converter->getShapeInputData(), model_switch);
    
            // in case there are IFC entities that are not in the spatial structure
            const std::map<int, shared_ptr<BuildingObject> >& objects_outside_spatial_structure = geometry_converter->getObjectsOutsideSpatialStructure();
            if (objects_outside_spatial_structure.size() > 0)
            {
                osg::ref_ptr<osg::Switch> sw_objects_outside_spatial_structure = new osg::Switch();
                sw_objects_outside_spatial_structure->setName("IfcProduct objects outside spatial structure");
    
                converter_osg->addNodes(objects_outside_spatial_structure, sw_objects_outside_spatial_structure);
                if (sw_objects_outside_spatial_structure->getNumChildren() > 0)
                {
                    model_switch->addChild(sw_objects_outside_spatial_structure);
                }
            }
        }
        catch (OutOfMemoryException& e)
        {
            throw e;
        }
        catch (BuildingException& e)
        {
            err << e.what();
        }
        catch (std::exception& e)
        {
            err << e.what();
        }
        catch (...)
        {
            err << "loadModelFromFile, createGeometryOSG failed" << std::endl;
        }
    
        try
        {
            if (model_switch)
            {
                bool optimize = true;
                if (optimize)
                {
                    osgUtil::Optimizer opt;
                    opt.optimize(model_switch);
                }
    
                // if model bounding sphere is far from origin, move to origin
                const osg::BoundingSphere& bsphere = model_switch->getBound();
                if (bsphere.center().length() > 10000)
                {
                    if (bsphere.center().length() / bsphere.radius() > 100)
                    {
                        std::unordered_set<osg::Geode*> set_applied;
                        SceneGraphUtils::translateGroup(model_switch, -bsphere.center(), set_applied);
                    }
                }
            }
        }
        catch (std::exception& e)
        {
            err << e.what();
        }
    
        geometry_converter->clearInputCache();
    
        if (err.tellp() > 0)
        {
            throw BuildingException(err.str().c_str());
        }
    
    
        ViewerWidget* viewer_widget = new ViewerWidget(ifcVCTool1);
        viewer_widget->setRootNode(ifcVCTool1->getRootNode());
    
        this->ui.centerDockWidget->setWidget(viewer_widget);
    
        //IfcTreeWidget* ifc_tree_widget = new IfcTreeWidget(ifcVCTool1);
        //dock->setWidget(ifc_tree_widget);
    
    }

    main.cpp

    #include "ifcproject_201907.h"
    #include <QtWidgets/QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        IFCProject_201907 w;
        //w.show();
        w.showMaximized();
        return a.exec();
    }

  • 相关阅读:
    hdu 4563
    CPU中的主要的寄存器
    ROC曲线及AUC
    light oj 1231 dp 多重背包
    light oj 1422 区间dp
    light oj 1098 数学规律
    light oj 1095 组合数学
    DRAM & SRAM
    C-static
    C-枚举
  • 原文地址:https://www.cnblogs.com/herd/p/11253602.html
Copyright © 2011-2022 走看看