mirror of
				https://github.com/JakubMelka/PDF4QT.git
				synced 2025-06-05 21:59:17 +02:00 
			
		
		
		
	3D PDF: All node blocks
This commit is contained in:
		@@ -608,6 +608,18 @@ PDF3D_U3D_AbstractBlockPtr PDF3D_U3D::parseBlock(uint32_t blockType,
 | 
			
		||||
        case PDF3D_U3D_NewObjectTypeBlock::ID:
 | 
			
		||||
            return PDF3D_U3D_NewObjectTypeBlock::parse(data, metaData, this);
 | 
			
		||||
 | 
			
		||||
        case PDF3D_U3D_GroupNodeBlock::ID:
 | 
			
		||||
            return PDF3D_U3D_GroupNodeBlock::parse(data, metaData, this);
 | 
			
		||||
 | 
			
		||||
        case PDF3D_U3D_ModelNodeBlock::ID:
 | 
			
		||||
            return PDF3D_U3D_ModelNodeBlock::parse(data, metaData, this);
 | 
			
		||||
 | 
			
		||||
        case PDF3D_U3D_LightNodeBlock::ID:
 | 
			
		||||
            return PDF3D_U3D_LightNodeBlock::parse(data, metaData, this);
 | 
			
		||||
 | 
			
		||||
        case PDF3D_U3D_ViewNodeBlock::ID:
 | 
			
		||||
            return PDF3D_U3D_ViewNodeBlock::parse(data, metaData, this);
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
@@ -703,6 +715,29 @@ void PDF3D_U3D_AbstractBlock::parseMetadata(QByteArray metaData)
 | 
			
		||||
    Q_ASSERT(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PDF3D_U3D_AbstractBlock::ParentNodesData PDF3D_U3D_AbstractBlock::parseParentNodeData(PDF3D_U3D_DataReader& reader, PDF3D_U3D* object)
 | 
			
		||||
{
 | 
			
		||||
    ParentNodesData result;
 | 
			
		||||
 | 
			
		||||
    uint32_t parentNodeCount = reader.readU32();
 | 
			
		||||
    result.reserve(parentNodeCount);
 | 
			
		||||
 | 
			
		||||
    for (uint32_t i = 0; i < parentNodeCount; ++i)
 | 
			
		||||
    {
 | 
			
		||||
        ParentNodeData data;
 | 
			
		||||
        data.parentNodeName = reader.readString(object->getTextCodec());
 | 
			
		||||
 | 
			
		||||
        std::array<float, 16> transformMatrix = { };
 | 
			
		||||
        reader.readFloats32(transformMatrix);
 | 
			
		||||
 | 
			
		||||
        QMatrix4x4 matrix(transformMatrix.data());
 | 
			
		||||
        data.transformMatrix = matrix.transposed();
 | 
			
		||||
        result.emplace_back(std::move(data));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PDF3D_U3D_AbstractBlockPtr PDF3D_U3D_FileReferenceBlock::parse(QByteArray data, QByteArray metaData, PDF3D_U3D* object)
 | 
			
		||||
{
 | 
			
		||||
    PDF3D_U3D_FileReferenceBlock* block = new PDF3D_U3D_FileReferenceBlock();
 | 
			
		||||
@@ -1002,6 +1037,245 @@ const QByteArray& PDF3D_U3D_NewObjectBlock::getData() const
 | 
			
		||||
    return m_data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PDF3D_U3D_AbstractBlockPtr PDF3D_U3D_GroupNodeBlock::parse(QByteArray data, QByteArray metaData, PDF3D_U3D* object)
 | 
			
		||||
{
 | 
			
		||||
    PDF3D_U3D_GroupNodeBlock* block = new PDF3D_U3D_GroupNodeBlock();
 | 
			
		||||
    PDF3D_U3D_AbstractBlockPtr pointer(block);
 | 
			
		||||
 | 
			
		||||
    PDF3D_U3D_DataReader reader(data, object->isCompressed());
 | 
			
		||||
 | 
			
		||||
    // Read the data
 | 
			
		||||
    block->m_groupNodeName = reader.readString(object->getTextCodec());
 | 
			
		||||
    block->m_parentNodesData = parseParentNodeData(reader, object);
 | 
			
		||||
 | 
			
		||||
    block->parseMetadata(metaData);
 | 
			
		||||
    return pointer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const QString& PDF3D_U3D_GroupNodeBlock::getGroupNodeName() const
 | 
			
		||||
{
 | 
			
		||||
    return m_groupNodeName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const PDF3D_U3D_GroupNodeBlock::ParentNodesData& PDF3D_U3D_GroupNodeBlock::getParentNodesData() const
 | 
			
		||||
{
 | 
			
		||||
    return m_parentNodesData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PDF3D_U3D_AbstractBlockPtr PDF3D_U3D_ModelNodeBlock::parse(QByteArray data, QByteArray metaData, PDF3D_U3D* object)
 | 
			
		||||
{
 | 
			
		||||
    PDF3D_U3D_ModelNodeBlock* block = new PDF3D_U3D_ModelNodeBlock();
 | 
			
		||||
    PDF3D_U3D_AbstractBlockPtr pointer(block);
 | 
			
		||||
 | 
			
		||||
    PDF3D_U3D_DataReader reader(data, object->isCompressed());
 | 
			
		||||
 | 
			
		||||
    // Read the data
 | 
			
		||||
    block->m_modelNodeName = reader.readString(object->getTextCodec());
 | 
			
		||||
    block->m_parentNodesData = parseParentNodeData(reader, object);
 | 
			
		||||
    block->m_modelResourceName = reader.readString(object->getTextCodec());
 | 
			
		||||
    block->m_modelVisibility = reader.readU32();
 | 
			
		||||
 | 
			
		||||
    block->parseMetadata(metaData);
 | 
			
		||||
    return pointer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const QString& PDF3D_U3D_ModelNodeBlock::getModelNodeName() const
 | 
			
		||||
{
 | 
			
		||||
    return m_modelNodeName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const PDF3D_U3D_ModelNodeBlock::ParentNodesData& PDF3D_U3D_ModelNodeBlock::getParentNodesData() const
 | 
			
		||||
{
 | 
			
		||||
    return m_parentNodesData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const QString& PDF3D_U3D_ModelNodeBlock::getModelResourceName() const
 | 
			
		||||
{
 | 
			
		||||
    return m_modelResourceName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t PDF3D_U3D_ModelNodeBlock::getModelVisibility() const
 | 
			
		||||
{
 | 
			
		||||
    return m_modelVisibility;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PDF3D_U3D_AbstractBlockPtr PDF3D_U3D_LightNodeBlock::parse(QByteArray data, QByteArray metaData, PDF3D_U3D* object)
 | 
			
		||||
{
 | 
			
		||||
    PDF3D_U3D_LightNodeBlock* block = new PDF3D_U3D_LightNodeBlock();
 | 
			
		||||
    PDF3D_U3D_AbstractBlockPtr pointer(block);
 | 
			
		||||
 | 
			
		||||
    PDF3D_U3D_DataReader reader(data, object->isCompressed());
 | 
			
		||||
 | 
			
		||||
    // Read the data
 | 
			
		||||
    block->m_lightNodeName = reader.readString(object->getTextCodec());
 | 
			
		||||
    block->m_parentNodesData = parseParentNodeData(reader, object);
 | 
			
		||||
    block->m_lightResourceName = reader.readString(object->getTextCodec());
 | 
			
		||||
 | 
			
		||||
    block->parseMetadata(metaData);
 | 
			
		||||
    return pointer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const QString& PDF3D_U3D_LightNodeBlock::getLightNodeName() const
 | 
			
		||||
{
 | 
			
		||||
    return m_lightNodeName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const PDF3D_U3D_LightNodeBlock::ParentNodesData& PDF3D_U3D_LightNodeBlock::getParentNodesData() const
 | 
			
		||||
{
 | 
			
		||||
    return m_parentNodesData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const QString& PDF3D_U3D_LightNodeBlock::getLightResourceName() const
 | 
			
		||||
{
 | 
			
		||||
    return m_lightResourceName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PDF3D_U3D_AbstractBlockPtr PDF3D_U3D_ViewNodeBlock::parse(QByteArray data, QByteArray metaData, PDF3D_U3D* object)
 | 
			
		||||
{
 | 
			
		||||
    PDF3D_U3D_ViewNodeBlock* block = new PDF3D_U3D_ViewNodeBlock();
 | 
			
		||||
    PDF3D_U3D_AbstractBlockPtr pointer(block);
 | 
			
		||||
 | 
			
		||||
    PDF3D_U3D_DataReader reader(data, object->isCompressed());
 | 
			
		||||
 | 
			
		||||
    // Read the data
 | 
			
		||||
    block->m_viewNodeName = reader.readString(object->getTextCodec());
 | 
			
		||||
    block->m_parentNodesData = parseParentNodeData(reader, object);
 | 
			
		||||
    block->m_viewResourceName = reader.readString(object->getTextCodec());
 | 
			
		||||
    block->m_viewNodeAttributes = reader.readU32();
 | 
			
		||||
    block->m_viewNearFlipping = reader.readF32();
 | 
			
		||||
    block->m_viewFarFlipping = reader.readF32();
 | 
			
		||||
 | 
			
		||||
    if (block->isProjectionThreePointPerspective())
 | 
			
		||||
    {
 | 
			
		||||
        block->m_viewProjection = reader.readF32();
 | 
			
		||||
    }
 | 
			
		||||
    if (block->isProjectionOrthographic())
 | 
			
		||||
    {
 | 
			
		||||
        block->m_viewOrthographicHeight = reader.readF32();
 | 
			
		||||
    }
 | 
			
		||||
    if (block->isProjectionOnePointPerspective() || block->isProjectionTwoPointPerspective())
 | 
			
		||||
    {
 | 
			
		||||
        reader.readFloats32(block->m_viewProjectionVector);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Viewport
 | 
			
		||||
    block->m_viewPortWidth = reader.readF32();
 | 
			
		||||
    block->m_viewPortHeight = reader.readF32();
 | 
			
		||||
    block->m_viewPortHorizontalPosition = reader.readF32();
 | 
			
		||||
    block->m_viewPortVerticalPosition = reader.readF32();
 | 
			
		||||
 | 
			
		||||
    auto readBackdropOrOverlayItems = [&reader, object]()
 | 
			
		||||
    {
 | 
			
		||||
        std::vector<BackdropOrOverlay> items;
 | 
			
		||||
 | 
			
		||||
        uint32_t count = reader.readU32();
 | 
			
		||||
        items.reserve(count);
 | 
			
		||||
 | 
			
		||||
        for (uint32_t i = 0; i < count; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            BackdropOrOverlay item;
 | 
			
		||||
 | 
			
		||||
            item.m_textureName = reader.readString(object->getTextCodec());
 | 
			
		||||
            item.m_textureBlend = reader.readF32();
 | 
			
		||||
            item.m_rotation = reader.readF32();
 | 
			
		||||
            item.m_locationX = reader.readF32();
 | 
			
		||||
            item.m_locationY = reader.readF32();
 | 
			
		||||
            item.m_registrationPointX = reader.readI32();
 | 
			
		||||
            item.m_registrationPointY = reader.readI32();
 | 
			
		||||
            item.m_scaleX = reader.readF32();
 | 
			
		||||
            item.m_scaleY = reader.readF32();
 | 
			
		||||
 | 
			
		||||
            items.emplace_back(std::move(item));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return items;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Backdrop
 | 
			
		||||
    block->m_backdrop = readBackdropOrOverlayItems();
 | 
			
		||||
 | 
			
		||||
    // Overlay
 | 
			
		||||
    block->m_overlay = readBackdropOrOverlayItems();
 | 
			
		||||
 | 
			
		||||
    block->parseMetadata(metaData);
 | 
			
		||||
    return pointer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const QString& PDF3D_U3D_ViewNodeBlock::getViewNodeName() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewNodeName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const PDF3D_U3D_ViewNodeBlock::ParentNodesData& PDF3D_U3D_ViewNodeBlock::getParentNodesData() const
 | 
			
		||||
{
 | 
			
		||||
    return m_parentNodesData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const QString& PDF3D_U3D_ViewNodeBlock::getViewResourceName() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewResourceName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t PDF3D_U3D_ViewNodeBlock::getViewNodeAttributes() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewNodeAttributes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float PDF3D_U3D_ViewNodeBlock::getViewNearFlipping() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewNearFlipping;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float PDF3D_U3D_ViewNodeBlock::getViewFarFlipping() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewFarFlipping;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float PDF3D_U3D_ViewNodeBlock::getViewProjection() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewProjection;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float PDF3D_U3D_ViewNodeBlock::getViewOrthographicHeight() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewOrthographicHeight;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const PDF3D_U3D_Vec3& PDF3D_U3D_ViewNodeBlock::getViewProjectionVector() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewProjectionVector;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float PDF3D_U3D_ViewNodeBlock::getViewPortWidth() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewPortWidth;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float PDF3D_U3D_ViewNodeBlock::getViewPortHeight() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewPortHeight;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float PDF3D_U3D_ViewNodeBlock::getViewPortHorizontalPosition() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewPortHorizontalPosition;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float PDF3D_U3D_ViewNodeBlock::getViewPortVerticalPosition() const
 | 
			
		||||
{
 | 
			
		||||
    return m_viewPortVerticalPosition;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const std::vector<PDF3D_U3D_ViewNodeBlock::BackdropItem>& PDF3D_U3D_ViewNodeBlock::getBackdrop() const
 | 
			
		||||
{
 | 
			
		||||
    return m_backdrop;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const std::vector<PDF3D_U3D_ViewNodeBlock::OverlayItem>& PDF3D_U3D_ViewNodeBlock::getOverlay() const
 | 
			
		||||
{
 | 
			
		||||
    return m_overlay;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}   // namespace u3d
 | 
			
		||||
 | 
			
		||||
}   // namespace pdf
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,9 @@
 | 
			
		||||
#include <QUuid>
 | 
			
		||||
#include <QByteArray>
 | 
			
		||||
#include <QSharedPointer>
 | 
			
		||||
#include <QMatrix4x4>
 | 
			
		||||
 | 
			
		||||
#include <array>
 | 
			
		||||
 | 
			
		||||
class QTextCodec;
 | 
			
		||||
 | 
			
		||||
@@ -38,6 +41,8 @@ class PDF3D_U3D_DataReader;
 | 
			
		||||
class PDF3D_U3D_AbstractBlock;
 | 
			
		||||
using PDF3D_U3D_AbstractBlockPtr = QSharedPointer<PDF3D_U3D_AbstractBlock>;
 | 
			
		||||
 | 
			
		||||
using PDF3D_U3D_Vec3 = std::array<float, 3>;
 | 
			
		||||
 | 
			
		||||
class PDF3D_U3D_AbstractBlock
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
@@ -45,6 +50,16 @@ public:
 | 
			
		||||
    virtual ~PDF3D_U3D_AbstractBlock() = default;
 | 
			
		||||
 | 
			
		||||
    void parseMetadata(QByteArray metaData);
 | 
			
		||||
 | 
			
		||||
    struct ParentNodeData
 | 
			
		||||
    {
 | 
			
		||||
        QString parentNodeName;
 | 
			
		||||
        QMatrix4x4 transformMatrix;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    using ParentNodesData = std::vector<ParentNodeData>;
 | 
			
		||||
 | 
			
		||||
    static ParentNodesData parseParentNodeData(PDF3D_U3D_DataReader& reader, PDF3D_U3D* object);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Bounding sphere - x, y, z position and radius
 | 
			
		||||
@@ -226,15 +241,129 @@ private:
 | 
			
		||||
//                                 NODE BLOCKS
 | 
			
		||||
// -------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class PDF3D_U3D_NewObjectBlock : public PDF3D_U3D_AbstractBlock
 | 
			
		||||
class PDF3D_U3D_GroupNodeBlock : public PDF3D_U3D_AbstractBlock
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    static constexpr uint32_t ID = 0xFFFFFF21;
 | 
			
		||||
 | 
			
		||||
    static PDF3D_U3D_AbstractBlockPtr parse(QByteArray data, QByteArray metaData, PDF3D_U3D* object);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    const QString& getGroupNodeName() const;
 | 
			
		||||
    const ParentNodesData& getParentNodesData() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QString m_groupNodeName;
 | 
			
		||||
    ParentNodesData m_parentNodesData;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class PDF3D_U3D_ModelNodeBlock : public PDF3D_U3D_AbstractBlock
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    static constexpr uint32_t ID = 0xFFFFFF22;
 | 
			
		||||
 | 
			
		||||
    static PDF3D_U3D_AbstractBlockPtr parse(QByteArray data, QByteArray metaData, PDF3D_U3D* object);
 | 
			
		||||
 | 
			
		||||
    bool isHidden() const { return m_modelVisibility == 0; }
 | 
			
		||||
    bool isFrontVisible() const { return m_modelVisibility == 1; }
 | 
			
		||||
    bool isBackVisible() const { return m_modelVisibility == 2; }
 | 
			
		||||
    bool isFrontAndBackVisible() const { return m_modelVisibility == 3; }
 | 
			
		||||
 | 
			
		||||
    const QString& getModelNodeName() const;
 | 
			
		||||
    const ParentNodesData& getParentNodesData() const;
 | 
			
		||||
    const QString& getModelResourceName() const;
 | 
			
		||||
    uint32_t getModelVisibility() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QString m_modelNodeName;
 | 
			
		||||
    ParentNodesData m_parentNodesData;
 | 
			
		||||
    QString m_modelResourceName;
 | 
			
		||||
    uint32_t m_modelVisibility;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class PDF3D_U3D_LightNodeBlock : public PDF3D_U3D_AbstractBlock
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    static constexpr uint32_t ID = 0xFFFFFF23;
 | 
			
		||||
 | 
			
		||||
    static PDF3D_U3D_AbstractBlockPtr parse(QByteArray data, QByteArray metaData, PDF3D_U3D* object);
 | 
			
		||||
 | 
			
		||||
    const QString& getLightNodeName() const;
 | 
			
		||||
    const ParentNodesData& getParentNodesData() const;
 | 
			
		||||
    const QString& getLightResourceName() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QString m_lightNodeName;
 | 
			
		||||
    ParentNodesData m_parentNodesData;
 | 
			
		||||
    QString m_lightResourceName;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class PDF3D_U3D_ViewNodeBlock : public PDF3D_U3D_AbstractBlock
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    static constexpr uint32_t ID = 0xFFFFFF24;
 | 
			
		||||
 | 
			
		||||
    static PDF3D_U3D_AbstractBlockPtr parse(QByteArray data, QByteArray metaData, PDF3D_U3D* object);
 | 
			
		||||
 | 
			
		||||
    struct BackdropOrOverlay
 | 
			
		||||
    {
 | 
			
		||||
        QString m_textureName;
 | 
			
		||||
        float m_textureBlend = 0.0;
 | 
			
		||||
        float m_rotation = 0.0;
 | 
			
		||||
        float m_locationX = 0.0;
 | 
			
		||||
        float m_locationY = 0.0;
 | 
			
		||||
        int32_t m_registrationPointX = 0;
 | 
			
		||||
        int32_t m_registrationPointY = 0;
 | 
			
		||||
        float m_scaleX = 0.0;
 | 
			
		||||
        float m_scaleY = 0.0;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    using BackdropItem = BackdropOrOverlay;
 | 
			
		||||
    using OverlayItem = BackdropOrOverlay;
 | 
			
		||||
 | 
			
		||||
    bool isScreenPositionRelative() const { return m_viewNodeAttributes & 0x00000001; }
 | 
			
		||||
    bool isProjectionOrthographic() const { return m_viewNodeAttributes & 0x00000002; }
 | 
			
		||||
    bool isProjectionTwoPointPerspective() const { return m_viewNodeAttributes & 0x00000004; }
 | 
			
		||||
    bool isProjectionOnePointPerspective() const { return (m_viewNodeAttributes & 0x00000002) && (m_viewNodeAttributes & 0x00000004); }
 | 
			
		||||
    bool isProjectionThreePointPerspective() const { return !isProjectionOrthographic() && !isProjectionTwoPointPerspective() && !isProjectionOnePointPerspective(); }
 | 
			
		||||
 | 
			
		||||
    const QString& getViewNodeName() const;
 | 
			
		||||
    const ParentNodesData& getParentNodesData() const;
 | 
			
		||||
    const QString& getViewResourceName() const;
 | 
			
		||||
    uint32_t getViewNodeAttributes() const;
 | 
			
		||||
    float getViewNearFlipping() const;
 | 
			
		||||
    float getViewFarFlipping() const;
 | 
			
		||||
    float getViewProjection() const;
 | 
			
		||||
    float getViewOrthographicHeight() const;
 | 
			
		||||
    const PDF3D_U3D_Vec3& getViewProjectionVector() const;
 | 
			
		||||
    float getViewPortWidth() const;
 | 
			
		||||
    float getViewPortHeight() const;
 | 
			
		||||
    float getViewPortHorizontalPosition() const;
 | 
			
		||||
    float getViewPortVerticalPosition() const;
 | 
			
		||||
    const std::vector<BackdropItem>& getBackdrop() const;
 | 
			
		||||
    const std::vector<OverlayItem>& getOverlay() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QString m_viewNodeName;
 | 
			
		||||
    ParentNodesData m_parentNodesData;
 | 
			
		||||
    QString m_viewResourceName;
 | 
			
		||||
    uint32_t m_viewNodeAttributes = 0;
 | 
			
		||||
    float m_viewNearFlipping = 0.0;
 | 
			
		||||
    float m_viewFarFlipping = 0.0;
 | 
			
		||||
    float m_viewProjection = 0.0;
 | 
			
		||||
    float m_viewOrthographicHeight = 0.0;
 | 
			
		||||
    PDF3D_U3D_Vec3 m_viewProjectionVector = PDF3D_U3D_Vec3();
 | 
			
		||||
 | 
			
		||||
    // Viewport
 | 
			
		||||
    float m_viewPortWidth = 0.0;
 | 
			
		||||
    float m_viewPortHeight = 0.0;
 | 
			
		||||
    float m_viewPortHorizontalPosition = 0.0;
 | 
			
		||||
    float m_viewPortVerticalPosition = 0.0;
 | 
			
		||||
 | 
			
		||||
    // Backdrop
 | 
			
		||||
    std::vector<BackdropItem> m_backdrop;
 | 
			
		||||
 | 
			
		||||
    // Overlay
 | 
			
		||||
    std::vector<OverlayItem> m_overlay;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// -------------------------------------------------------------------------------
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user