OSDN Git Service

implement pmd_export texture.
[meshio/meshio.git] / include / pmd.h
index 840a675..f4f8ac7 100644 (file)
 namespace meshio {
 namespace pmd {
 
-typedef la::Vector2 Vector2;
-typedef la::Vector3 Vector3;
-typedef la::Vector4 Vector4;
-typedef color::fRGBA fRGBA;
-typedef color::fRGB fRGB;
+typedef ::meshio::la::Vector2 Vector2;
+typedef ::meshio::la::Vector3 Vector3;
+typedef ::meshio::la::Vector4 Vector4;
+typedef ::meshio::color::fRGBA fRGBA;
+typedef ::meshio::color::fRGB fRGB;
 
 ////////////////////////////////////////////////////////////
 //! \92¸\93_
@@ -103,6 +103,9 @@ struct Material
        unsigned int vertex_count;
        //! \83e\83N\83X\83`\83\83
        char texture[20];
+
+       std::wstring getTexture()const;
+       void setTexture(const char *src);
 };
 inline std::ostream &operator<<(std::ostream &os,
                const Material &rhs)
@@ -160,6 +163,19 @@ struct Bone
        unsigned short ik_index;
        // \83{\81[\83\93\8dÀ\95W
        Vector3 pos;
+       //! \89p\8cê\96¼
+       char english_name[20];
+       //! \83{\81[\83\93\8aK\91w\8d\\92z\97p
+       Bone* parent;
+       Vector3 tail;
+       std::vector<Bone*> children;
+       unsigned short index;
+
+       Bone()
+               : parent(0)
+               {}
+       std::wstring getName()const;
+       void setName(const char *src);
 };
 inline std::ostream &operator<<(std::ostream &os,
                const Bone &rhs)
@@ -228,6 +244,13 @@ struct Morph
        std::vector<unsigned int> indices;
        //! \88Ú\93®\97Ê
        std::vector<Vector3> pos_list;
+       //! \89p\8cê\96¼
+       char english_name[20];
+
+       void append(int index, float x, float y, float z);
+       std::wstring getName()const;
+       void setName(const char *src);
+       void setEnglishName(const char *src);
 };
 inline std::ostream &operator<<(std::ostream &os, const Morph &rhs)
 {
@@ -240,6 +263,26 @@ inline std::ostream &operator<<(std::ostream &os, const Morph &rhs)
 }
 
 ////////////////////////////////////////////////////////////
+//! \83{\81[\83\93\95\\8e¦\98g
+////////////////////////////////////////////////////////////
+struct BoneDisplayName
+{
+       char name[50];
+       char english_name[50];
+
+       void setName(const char *src);
+       void setEnglishName(const char *src);
+};
+
+////////////////////////////////////////////////////////////
+//! \83g\83D\81[\83\93\83e\83N\83X\83`\83\83
+////////////////////////////////////////////////////////////
+struct ToonTexture
+{
+       char name[100];
+};
+
+////////////////////////////////////////////////////////////
 //! \8d\84\91Ì
 ////////////////////////////////////////////////////////////
 //! \8c`\8fó
@@ -291,6 +334,9 @@ struct RigidBody
        float friction;
        //! \8d\84\91Ì\83^\83C\83v
        PROCESS_TYPE processType;
+
+       std::wstring getName()const;
+       void setName(const char *src);
 };
 
 //! Joint(\95¨\97\9d\89\89\8eZ\82Å\82ÌJoint\82ÆConstraint\82Í\93¯\82\88Ó\96¡)
@@ -315,6 +361,9 @@ struct Constraint
        //! \82Î\82Ë
        Vector3 springPos;
        Vector3 springRot;
+
+       std::wstring getName()const;
+       void setName(const char *src);
 };
 
 
@@ -328,19 +377,32 @@ struct IO
        char comment[256];
        std::vector<Vertex> vertices;
        std::vector<unsigned short> indices;
-       std::vector<Material> materials;
+       std::vector<Material*> materials;
        std::vector<Bone> bones;
        std::vector<IK> ik_list;
        std::vector<Morph> morph_list;
-       std::vector<std::pair<unsigned short, unsigned char> > bone_list;
-       std::vector<std::string> bone_name_list;
+       std::vector<unsigned short> face_list;
+       std::vector<BoneDisplayName> bone_display_name_list;
+       std::vector<std::pair<unsigned short, unsigned char> > bone_display_list;
+       ToonTexture toon_textures[10];
        std::vector<RigidBody> rigidbodies;
        std::vector<Constraint> constraints;
 
+       char english_name[20];
+       char english_comment[256];
+
        IO();
+       ~IO();
        bool read(binary::IReader &reader);
-       bool read(const char *path);
-       bool write(std::ostream &os);
+       //bool read(const char *path);
+       bool read(const wchar_t *path);
+       bool write(binary::IWriter &writer);
+       bool write(const char *path);
+       bool write(const wchar_t *path);
+
+       const Vector2* getUV(int index)const;
+       std::wstring getName()const;
+       std::wstring getEnglishName()const;
 };
 inline std::ostream &operator<<(std::ostream &os, const IO &rhs)
 {