NormalId and empty FaceInstance
This commit is contained in:
parent
013b9f513b
commit
6a24f444fa
|
|
@ -2,6 +2,7 @@ add_library(Engine STATIC
|
|||
Header/Helpers/Name.hpp
|
||||
Header/Helpers/Strings.hpp
|
||||
Header/Helpers/XML.hpp
|
||||
Header/Helpers/NormalId.hpp
|
||||
Header/App/Script/ReflectionProperty.hpp
|
||||
Header/App/GUI/GuiBase3d.hpp
|
||||
Header/App/GUI/InstanceAdornment.hpp
|
||||
|
|
@ -11,6 +12,7 @@ add_library(Engine STATIC
|
|||
Header/App/V8/DataModel/Camera.hpp
|
||||
Header/App/V8/DataModel/ForceField.hpp
|
||||
Header/App/V8/DataModel/PartInstance.hpp
|
||||
Header/App/V8/DataModel/FaceInstance.hpp
|
||||
Header/App/V8/DataModel/Workspace.hpp
|
||||
Header/App/V8/Tree/Instance.hpp
|
||||
Header/App/V8/Tree/PVInstance.hpp
|
||||
|
|
@ -24,6 +26,7 @@ add_library(Engine STATIC
|
|||
Source/Helpers/Name.cpp
|
||||
Source/Helpers/Strings.cpp
|
||||
Source/Helpers/XML.cpp
|
||||
Source/Helpers/NormalId.cpp
|
||||
Source/App/Script/ReflectionProperty.cpp
|
||||
Source/App/GUI/GuiBase3d.cpp
|
||||
Source/App/GUI/InstanceAdornment.cpp
|
||||
|
|
@ -33,6 +36,7 @@ add_library(Engine STATIC
|
|||
Source/App/V8/DataModel/Camera.cpp
|
||||
Source/App/V8/DataModel/ForceField.cpp
|
||||
Source/App/V8/DataModel/PartInstance.cpp
|
||||
Source/App/V8/DataModel/FaceInstance.cpp
|
||||
Source/App/V8/DataModel/Workspace.cpp
|
||||
Source/App/V8/Tree/Instance.cpp
|
||||
Source/App/V8/Tree/PVInstance.cpp
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
#pragma once
|
||||
|
||||
#include <Helpers/NormalId.hpp>
|
||||
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
#pragma once
|
||||
|
||||
namespace RNR {
|
||||
Ogre::Vector3 normalIdVectors[] = {
|
||||
Ogre::Vector3(1, 0, 0),
|
||||
Ogre::Vector3(0, 1, 0),
|
||||
Ogre::Vector3(0, 0, 1),
|
||||
Ogre::Vector3(-1, 0, 0),
|
||||
Ogre::Vector3(0, -1, 0),
|
||||
Ogre::Vector3(0, 0, -1),
|
||||
Ogre::Vector3(0, 0, 0)
|
||||
};
|
||||
|
||||
enum NormalId
|
||||
{
|
||||
NORM_X,
|
||||
NORM_Y,
|
||||
NORM_Z,
|
||||
NORM_X_NEG,
|
||||
NORM_Y_NEG,
|
||||
NORM_Z_NEG,
|
||||
NORM_UNDEFINED
|
||||
};
|
||||
|
||||
bool validNormalId(NormalId normalId);
|
||||
|
||||
NormalId normalIdOpposite(NormalId normalId);
|
||||
NormalId normalIdToU(NormalId normalId);
|
||||
NormalId normalIdToV(NormalId normalId);
|
||||
|
||||
const Ogre::Vector3& normalIdToVector3(NormalId normalId);
|
||||
const Ogre::Matrix3& normalIdToMatrix3(NormalId normalId);
|
||||
|
||||
NormalId Vector3ToNormalId(const Ogre::Vector3& vector);
|
||||
NormalId Matrix3ToNormalId(const Ogre::Matrix3& matrix);
|
||||
NormalId intToNormalId(int i);
|
||||
|
||||
Ogre::Vector3 uvwToObject(const Ogre::Vector3& uvw, NormalId faceId);
|
||||
Ogre::Vector3 objectToUvw(const Ogre::Vector3& object, NormalId faceId);
|
||||
|
||||
template<NormalId faceId>
|
||||
Ogre::Vector3 uvwToObject(const Ogre::Vector3& vector);
|
||||
template<NormalId faceId>
|
||||
Ogre::Vector3 objectToUvw(const Ogre::Vector3& vector);
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#pragma once
|
||||
|
||||
#include <App/V8/Tree/Instance.hpp>
|
||||
#include <Helpers/NormalId.hpp>
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
#include <Helpers/NormalId.hpp>
|
||||
|
||||
#include <OGRE/Ogre.h>
|
||||
|
||||
namespace RNR {
|
||||
bool validNormalId(NormalId normalId) {
|
||||
return ((normalId >= 0) && (normalId < 6));
|
||||
}
|
||||
|
||||
NormalId intToNormalId(int i)
|
||||
{
|
||||
return static_cast<NormalId>(i);
|
||||
}
|
||||
|
||||
NormalId normalIdOpposite(NormalId normalId)
|
||||
{
|
||||
return (NormalId)((normalId + 3) % 6);
|
||||
}
|
||||
|
||||
NormalId normalIdToU(NormalId normalId)
|
||||
{
|
||||
switch (normalId)
|
||||
{
|
||||
case NORM_X:
|
||||
return NORM_Z;
|
||||
case NORM_Y:
|
||||
return NORM_X;
|
||||
case NORM_Z:
|
||||
return NORM_Y;
|
||||
case NORM_X_NEG:
|
||||
return NORM_Z_NEG;
|
||||
case NORM_Y_NEG:
|
||||
return NORM_X_NEG;
|
||||
case NORM_Z_NEG:
|
||||
return NORM_Y_NEG;
|
||||
default:
|
||||
return NORM_Y;
|
||||
}
|
||||
}
|
||||
|
||||
NormalId normalIdToV(NormalId normalId)
|
||||
{
|
||||
switch (normalId)
|
||||
{
|
||||
case NORM_X:
|
||||
return NORM_Y;
|
||||
case NORM_Y:
|
||||
return NORM_Z;
|
||||
case NORM_Z:
|
||||
return NORM_X;
|
||||
case NORM_X_NEG:
|
||||
return NORM_Y_NEG;
|
||||
case NORM_Y_NEG:
|
||||
return NORM_Z_NEG;
|
||||
case NORM_Z_NEG:
|
||||
return NORM_X_NEG;
|
||||
default:
|
||||
return NORM_Y;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// UVW to Object
|
||||
template<>
|
||||
Ogre::Vector3 uvwToObject<NORM_X>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(vector.z, vector.y, -vector.x);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 uvwToObject<NORM_Y>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(-vector.x, vector.z, vector.y);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 uvwToObject<NORM_Z>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(vector.x, vector.y, vector.z);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 uvwToObject<NORM_X_NEG>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(-vector.z, vector.y, vector.x);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 uvwToObject<NORM_Y_NEG>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(vector.x, -vector.z, vector.y);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 uvwToObject<NORM_Z_NEG>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(-vector.x, vector.y, -vector.z);
|
||||
}
|
||||
|
||||
// Object to UVW
|
||||
template<>
|
||||
Ogre::Vector3 objectToUvw<NORM_X>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(-vector.z, vector.y, vector.x);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 objectToUvw<NORM_Y>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(-vector.x, vector.z, vector.y);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 objectToUvw<NORM_Z>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(vector.x, vector.y, vector.z);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 objectToUvw<NORM_X_NEG>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(vector.z, vector.y, -vector.x);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 objectToUvw<NORM_Y_NEG>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(vector.x, vector.z, -vector.y);
|
||||
}
|
||||
|
||||
template<>
|
||||
Ogre::Vector3 objectToUvw<NORM_Z_NEG>(const Ogre::Vector3& vector)
|
||||
{
|
||||
return Ogre::Vector3(-vector.x, vector.y, -vector.z);
|
||||
}
|
||||
|
||||
Ogre::Vector3 uvwToObject(const Ogre::Vector3& uvw, NormalId faceId)
|
||||
{
|
||||
switch (faceId)
|
||||
{
|
||||
case NORM_X:
|
||||
return uvwToObject<NORM_X>(uvw);
|
||||
case NORM_Y:
|
||||
return uvwToObject<NORM_Y>(uvw);
|
||||
case NORM_Z:
|
||||
return uvwToObject<NORM_Z>(uvw);
|
||||
case NORM_X_NEG:
|
||||
return uvwToObject<NORM_X_NEG>(uvw);
|
||||
case NORM_Y_NEG:
|
||||
return uvwToObject<NORM_Y_NEG>(uvw);
|
||||
case NORM_Z_NEG:
|
||||
return uvwToObject<NORM_Z_NEG>(uvw);
|
||||
default:
|
||||
return Ogre::Vector3::UNIT_X;
|
||||
}
|
||||
}
|
||||
|
||||
Ogre::Vector3 objectToUvw(const Ogre::Vector3& object, NormalId faceId)
|
||||
{
|
||||
switch (faceId)
|
||||
{
|
||||
case NORM_X:
|
||||
return objectToUvw<NORM_X>(object);
|
||||
case NORM_Y:
|
||||
return objectToUvw<NORM_Y>(object);
|
||||
case NORM_Z:
|
||||
return objectToUvw<NORM_Z>(object);
|
||||
case NORM_X_NEG:
|
||||
return objectToUvw<NORM_X_NEG>(object);
|
||||
case NORM_Y_NEG:
|
||||
return objectToUvw<NORM_Y_NEG>(object);
|
||||
case NORM_Z_NEG:
|
||||
return objectToUvw<NORM_Z_NEG>(object);
|
||||
default:
|
||||
return Ogre::Vector3::UNIT_X;
|
||||
}
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue