NormalId and empty FaceInstance

This commit is contained in:
sorket 2023-07-16 23:18:38 -04:00
parent 013b9f513b
commit 6a24f444fa
5 changed files with 235 additions and 0 deletions

View File

@ -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

View File

@ -0,0 +1,4 @@
#pragma once
#include <Helpers/NormalId.hpp>

View File

@ -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);
}

View File

@ -0,0 +1,4 @@
#pragma once
#include <App/V8/Tree/Instance.hpp>
#include <Helpers/NormalId.hpp>

View File

@ -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;
}
}
};