00001 #pragma once 00002 00003 #include <slapi/model/texture_writer.h> 00004 #include <slapi/model/component_instance.h> 00005 #include <slapi/model/group.h> 00006 #include <slapi/model/image.h> 00007 #include <slapi/model/face.h> 00008 #include <slapi/model/edge.h> 00009 #include <slapi/model/layer.h> 00010 #include <slapi/model/material.h> 00011 00012 #include <vector> 00013 00014 class SKPTransform 00015 { 00016 public: 00017 00018 SKPTransform(); 00019 SKPTransform(double m[16]); 00020 ~SKPTransform(); 00021 00022 void SetMatrix(double m[16]); 00023 void SetToIdenity(); 00024 00025 SUPoint3D operator* (const SUPoint3D& pt) const; 00026 SUVector3D operator* (const SUVector3D& vec) const; 00027 SKPTransform operator* (const SKPTransform& t) const; 00028 00029 protected: 00030 00031 double m_t[16]; 00032 00033 }; 00034 00035 class InheritanceManager 00036 { 00037 public: 00038 InheritanceManager(); 00039 virtual ~InheritanceManager(); 00040 00041 void SetTextureWriter(SUTextureWriterRef textureWriter); 00042 void SetMaterialsByLayer(bool materialsByLayer) { m_materialsByLayer = materialsByLayer; } 00043 00044 void PushElement(SUComponentInstanceRef pElement); 00045 void PushElement(SUGroupRef pElement); 00046 void PushElement(SUImageRef pElement); 00047 void PushElement(SUFaceRef pElement); 00048 void PushElement(SUEdgeRef pElement); 00049 void PopElement(); 00050 00051 SULayerRef GetCurrentLayer(); 00052 SKPTransform GetCurrentTransform(); 00053 SUMaterialRef GetCurrentFrontMaterial(); 00054 SUMaterialRef GetCurrentBackMaterial(); 00055 int32_t GetCurrentTextureHandle(); 00056 00057 protected: 00058 void PushTransform(SKPTransform t); 00059 void PushTextureHandle(int32_t textureHandle); 00060 00061 bool m_materialsByLayer; 00062 std::vector<SKPTransform> m_transforms; 00063 std::vector<SULayerRef> m_layers; 00064 std::vector<SUMaterialRef> m_frontMaterials; 00065 std::vector<SUMaterialRef> m_backMaterials; 00066 std::vector<int32_t> m_textureHandles; 00067 SUTextureWriterRef m_textureWriter; 00068 };