Skip to content
52 changes: 27 additions & 25 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,16 +52,6 @@ jobs:
with:
repository: assimp/assimp
path: ${{github.workspace}}/assimp

- if: steps.cache-assimp-windows.outputs.cache-hit != 'true'
name: Windows - Workaround to fix the need of utf8.h file https://github.com/assimp/assimp/issues/5005
run: |
xcopy /I /S /E "D:/a/QtMeshEditor/QtMeshEditor/assimp/contrib" "C:/PROGRA~2/Assimp/include/contrib"
cd D:/a/QtMeshEditor/QtMeshEditor/assimp/contrib
dir
cd C:/PROGRA~2/Assimp/include/contrib
dir
shell: cmd

- if: steps.cache-assimp-windows.outputs.cache-hit != 'true'
name: Build Assimp repo
Expand Down Expand Up @@ -263,10 +253,6 @@ jobs:
with:
repository: assimp/assimp
path: /home/runner/work/QtMeshEditor/QtMeshEditor/assimp

- if: steps.cache-assimp-linux.outputs.cache-hit != 'true'
name: Workaround to fix the need of utf8.h file https://github.com/assimp/assimp/issues/5005
run: cp -R /home/runner/work/QtMeshEditor/QtMeshEditor/assimp/contrib /usr/local/include/contrib

- if: steps.cache-assimp-linux.outputs.cache-hit != 'true'
name: Build Assimp repo
Expand Down Expand Up @@ -652,14 +638,21 @@ jobs:
build-n-cache-assimp-macos:
runs-on: macos-latest
steps:
- name: change folder permissions
run: |
sudo mkdir /usr/local/lib
sudo mkdir /usr/local/include
sudo chmod -R 777 /usr/local/lib
sudo chmod -R 777 /usr/local/include

- name: Cache Assimp
id: cache-assimp-macos
uses: actions/cache@v3
env:
cache-name: cache-assimp-macos
with:
path: |
/usr/local/lib/cmake/
/usr/local/lib/cmake
/usr/local/include/assimp
/usr/local/include/contrib
/usr/local/lib/pkgconfig/assimp.pc
Expand All @@ -677,10 +670,6 @@ jobs:
with:
repository: assimp/assimp
path: /Users/runner/work/QtMeshEditor/QtMeshEditor/assimp

- if: steps.cache-assimp-macos.outputs.cache-hit != 'true'
name: Workaround to fix the need of utf8.h file https://github.com/assimp/assimp/issues/5005
run: cp -R /Users/runner/work/QtMeshEditor/QtMeshEditor/assimp/contrib /usr/local/include/contrib

- if: steps.cache-assimp-macos.outputs.cache-hit != 'true'
name: Build Assimp repo
Expand All @@ -693,14 +682,21 @@ jobs:
needs: build-n-cache-assimp-macos
runs-on: macos-latest
steps:
- name: change folder permissions
run: |
sudo mkdir /usr/local/lib
sudo mkdir /usr/local/include
sudo chmod -R 777 /usr/local/lib
sudo chmod -R 777 /usr/local/include

- name: Cache Assimp
id: cache-assimp-macos
uses: actions/cache@v3
env:
cache-name: cache-assimp-macos
with:
path: |
/usr/local/lib/cmake/
/usr/local/lib/cmake
/usr/local/include/assimp
/usr/local/include/contrib
/usr/local/lib/pkgconfig/assimp.pc
Expand Down Expand Up @@ -730,7 +726,7 @@ jobs:
name: Build Ogre3D repo
run: |
cd ${{github.workspace}}/ogre/
sudo cmake -S . -DOGRE_BUILD_PLUGIN_ASSIMP=ON -Dassimp_DIR=/usr/local/lib/cmake/assimp-5.2/ \
sudo cmake -S . -DOGRE_BUILD_PLUGIN_ASSIMP=ON -Dassimp_DIR=/usr/local/lib/cmake/assimp-5.4/ \
-DOGRE_BUILD_PLUGIN_DOT_SCENE=ON -DOGRE_BUILD_RENDERSYSTEM_GL=ON -DOGRE_BUILD_RENDERSYSTEM_GL3PLUS=ON \
-DOGRE_BUILD_RENDERSYSTEM_GLES2=OFF -DOGRE_BUILD_TESTS=OFF -DOGRE_BUILD_TOOLS=OFF -DOGRE_BUILD_SAMPLES=OFF \
-DOGRE_BUILD_COMPONENT_CSHARP=OFF -DOGRE_BUILD_COMPONENT_JAVA=OFF -DOGRE_BUILD_COMPONENT_PYTHON=OFF \
Expand All @@ -742,12 +738,18 @@ jobs:
needs: [build-n-cache-assimp-macos, build-n-cache-ogre-macos]
runs-on: macos-latest
steps:
- name: change folder permissions
run: |
sudo mkdir /usr/local/lib
sudo mkdir /usr/local/include
sudo chmod -R 777 /usr/local/lib
sudo chmod -R 777 /usr/local/include

- uses: actions/checkout@v3
with:
submodules: true

- run: |
ls ${{github.workspace}}/src/dependencies/ogre-procedural
cd ${{github.workspace}}/src/dependencies/ogre-procedural
git checkout master
git pull
Expand All @@ -769,7 +771,7 @@ jobs:
cache-name: cache-assimp-macos
with:
path: |
/usr/local/lib/cmake/
/usr/local/lib/cmake
/usr/local/include/assimp
/usr/local/include/contrib
/usr/local/lib/pkgconfig/assimp.pc
Expand All @@ -785,14 +787,14 @@ jobs:
with:
path: ${{github.workspace}}/ogre/SDK
key: ${{ runner.os }}-build-${{ env.cache-name }}

- name: Configure CMake
env:
OGRE_DIR: ${{github.workspace}}/ogre/SDK/CMake/
run: |
sudo cmake -S . \
-DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} \
-DASSIMP_DIR=/usr/local/lib/cmake/assimp-5.2 \
-DASSIMP_DIR=/usr/local/lib/cmake/assimp-5.4 \
-DASSIMP_INCLUDE_DIR=/usr/local/include/assimp \
-DQt6_DIR=/Users/runner/work/QtMeshEditor/Qt/6.5.0/clang_64/lib/cmake/Qt6 \
-DQT_DIR=/Users/runner/work/QtMeshEditor/Qt/6.5.0/clang_64/lib/cmake/Qt6 \
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ A graphical editor for Ogre3D mesh and material made with Qt Framework

### :sparkles: Features
* Mesh
- Translation, Scale, and Rotation (Easier than OgreMeshMagick)
- Translation, Scale, and Rotation
- Change the material of the mesh - Allows the change of the mesh material
- Primitives creation, using ogre-procedural - Easy tool to create Box, Sphere, and Plane
* Material
Expand Down
95 changes: 10 additions & 85 deletions src/PrimitiveObject.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#include <OgreAny.h>
#include <OgreAny.h>
#include <OgreUserObjectBindings.h>

#include "Manager.h"
Expand Down Expand Up @@ -129,6 +129,7 @@ void PrimitiveObject::setDefaultParams()

bool PrimitiveObject::isPrimitive(const Ogre::SceneNode* node)
{
if(!node) return false;
try
{
return !!Ogre::any_cast<PrimitiveObject*>(node->getUserObjectBindings().getUserAny());
Expand All @@ -140,11 +141,6 @@ bool PrimitiveObject::isPrimitive(const Ogre::SceneNode* node)
}
}

bool PrimitiveObject::isPrimitive(const Ogre::Entity* entity)
{
return isPrimitive(entity->getParentSceneNode());
}

PrimitiveObject* PrimitiveObject::getPrimitiveFromSceneNode(const Ogre::SceneNode* node)
{
return Ogre::any_cast<PrimitiveObject*>(node->getUserObjectBindings().getUserAny());
Expand Down Expand Up @@ -251,9 +247,6 @@ const Ogre::Real& PrimitiveObject::getHeight() const
int PrimitiveObject::getNumSegX() const
{ return mNumSegX; }

int PrimitiveObject::getNumSegRing() const
{ return mNumSegX; }

int PrimitiveObject::getNumSegBase() const
{ return mNumSegX; }

Expand All @@ -266,18 +259,9 @@ int PrimitiveObject::getNumIterations() const
int PrimitiveObject::getNumSegY() const
{ return mNumSegY; }

int PrimitiveObject::getNumSegLoop() const
{ return mNumSegY; }

int PrimitiveObject::getNumSegSection() const
{ return mNumSegY; }

int PrimitiveObject::getNumSegZ() const
{ return mNumSegZ; }

int PrimitiveObject::getNumSegHeight() const
{ return mNumSegZ; }

const Ogre::Real& PrimitiveObject::getUTile() const
{ return mUTile; }

Expand Down Expand Up @@ -324,18 +308,7 @@ void PrimitiveObject::setRadius(const Ogre::Real& radius)

void PrimitiveObject::setOuterRadius(const Ogre::Real& radius)
{
if(radius>0.0)
mRadius = radius;

updatePrimitive();
}

void PrimitiveObject::setChamferRadius(const Ogre::Real& radius)
{
if(radius>0.0)
mRadius = radius;

updatePrimitive();
setRadius(radius);
}

void PrimitiveObject::setInnerRadius(const Ogre::Real& radius)
Expand All @@ -348,11 +321,7 @@ void PrimitiveObject::setInnerRadius(const Ogre::Real& radius)

void PrimitiveObject::setSectionRadius(const Ogre::Real& radius)
{

if((radius>0.0)&&(radius<mRadius))
mRadius2 = radius;

updatePrimitive();
setInnerRadius(radius);
}

void PrimitiveObject::setHeight(const Ogre::Real& height)
Expand Down Expand Up @@ -389,14 +358,6 @@ void PrimitiveObject::setNumSegZ(int numSegZ)
updatePrimitive();
}

void PrimitiveObject::setNumSegRing(int numSegRing)
{
if(numSegRing>0)
mNumSegX = numSegRing;

updatePrimitive();
}

void PrimitiveObject::setNumSegBase(int numSegBase)
{
if(numSegBase>0)
Expand All @@ -420,14 +381,6 @@ void PrimitiveObject::setNumIterations(int numIterations)
updatePrimitive();
}

void PrimitiveObject::setNumSegLoop(int numSegLoop)
{

if(numSegLoop>0)
mNumSegY = numSegLoop;

updatePrimitive();
}
void PrimitiveObject::setNumSegSection(int numSegSection)
{
if(numSegSection>0)
Expand Down Expand Up @@ -467,25 +420,6 @@ void PrimitiveObject::setUVSwitch(bool switched)
updatePrimitive();
}

void PrimitiveObject::clone(const PrimitiveObject* primitiveToClone)
{
mSizeX = primitiveToClone->mSizeX;
mSizeY = primitiveToClone->mSizeY;
mSizeZ = primitiveToClone->mSizeZ;

mRadius = primitiveToClone->mRadius;
mRadius2= primitiveToClone->mRadius2;
mHeight = primitiveToClone->mHeight;

mNumSegX= primitiveToClone->mNumSegX;
mNumSegY= primitiveToClone->mNumSegY;
mNumSegZ= primitiveToClone->mNumSegZ;

mUTile = primitiveToClone->mUTile;
mVTile = primitiveToClone->mVTile;
mSwitchUV= primitiveToClone->mSwitchUV;
}

////////////////////////////////////////
/// Private Methods
///
Expand All @@ -496,8 +430,7 @@ void PrimitiveObject::updatePrimitive()
return;

//delete old entity
Ogre::Entity* oldEntity = static_cast<Ogre::Entity*>(mSceneNode->getAttachedObject(0));
//TODO check if no issue with sub entity (we are only at primitive stage so I assume that there is no issue)
auto oldEntity = static_cast<Ogre::Entity*>(mSceneNode->getAttachedObject(0));
Ogre::MaterialPtr entMaterial = oldEntity->getSubEntity(0)->getMaterial();

//if(oldEntity->getMesh().get()->isManuallyLoaded())
Expand All @@ -508,18 +441,15 @@ void PrimitiveObject::updatePrimitive()
Manager::getSingleton()->getSceneMgr()->destroyEntity(oldEntity);

//Create a new one with the given params
// TODO Check if this line is required
mSceneNode->getUserObjectBindings().setUserAny(Ogre::Any(this));

Ogre::MeshPtr mp = createMesh();
if(mp)
{
Ogre::Entity* ent;
ent = Manager::getSingleton()->createEntity(mSceneNode,mp);
auto ent = Manager::getSingleton()->createEntity(mSceneNode,mp);

ent->setMaterial(entMaterial);
}

}

Ogre::MeshPtr PrimitiveObject::createMesh()
Expand Down Expand Up @@ -585,7 +515,9 @@ Ogre::MeshPtr PrimitiveObject::createMesh()
break;
case AP_ROUNDEDBOX:
mp = Procedural::RoundedBoxGenerator().setSizeX(mSizeX).setSizeY(mSizeY).setSizeZ(mSizeZ).setChamferSize(mRadius)
.setNumSegX(mNumSegX).setNumSegY(mNumSegY).setNumSegZ(mNumSegZ)
.setNumSegX(static_cast<unsigned short>(mNumSegX))
.setNumSegY(static_cast<unsigned short>(mNumSegY))
.setNumSegZ(static_cast<unsigned short>(mNumSegZ))
.setUTile(mUTile).setVTile(mVTile).setSwitchUV(mSwitchUV)
.realizeMesh(name.data());
break;
Expand All @@ -603,8 +535,6 @@ Ogre::MeshPtr PrimitiveObject::createMesh()

Ogre::SceneNode* PrimitiveObject::createPrimitive()
{
// TODO check if no memory leakage using setUserAny
// http://www.ogre3d.org/forums/viewtopic.php?f=2&t=81594&sid=70ac0036f529bfc87dc2c464b03e33fe
// This will trigger the selection change signal
mSceneNode = Manager::getSingleton()->addSceneNode(mName.toStdString().data(), Ogre::Any(static_cast<PrimitiveObject*>(this)));

Expand All @@ -625,11 +555,6 @@ Ogre::SceneNode* PrimitiveObject::createPrimitive()
else
{
Manager::getSingleton()->destroySceneNode(mSceneNode);
return 0;
return nullptr;
}

}




Loading