From 29331af355aedc0efb5f8a462466106b56b3c1dc Mon Sep 17 00:00:00 2001 From: dnk-88 Date: Sun, 12 Dec 2010 15:07:35 +0200 Subject: [PATCH 1/5] Changed: #1193 Code cleanup. --- code/nel/tools/3d/object_viewer_qt/src/settings_dialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/settings_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/settings_dialog.cpp index 45dab6fc8..6df288895 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/settings_dialog.cpp +++ b/code/nel/tools/3d/object_viewer_qt/src/settings_dialog.cpp @@ -80,10 +80,10 @@ CSettingsDialog::~CSettingsDialog() void CSettingsDialog::addPath() { - QListWidgetItem *newItem = new QListWidgetItem; QString newPath = QFileDialog::getExistingDirectory(this); - if (!(newPath == "")) + if (!newPath.isEmpty()) { + QListWidgetItem *newItem = new QListWidgetItem; newItem->setText(newPath); newItem->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); ui.pathsListWidget->addItem(newItem); From 20ddae2c0f5436bdc0bcbaa781187dba4a8f9638 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 12 Dec 2010 15:10:53 +0100 Subject: [PATCH 2/5] Changed: #825 Remove all warnings when compiling Ryzom --- code/nel/include/nel/3d/index_buffer.h | 4 ++++ code/nel/include/nel/3d/vertex_buffer.h | 4 ++++ code/nel/src/3d/font_generator.cpp | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/code/nel/include/nel/3d/index_buffer.h b/code/nel/include/nel/3d/index_buffer.h index 2b0244a49..320a06020 100644 --- a/code/nel/include/nel/3d/index_buffer.h +++ b/code/nel/include/nel/3d/index_buffer.h @@ -736,7 +736,9 @@ inline void CIndexBuffer::lock (CIndexBufferReadWrite &accessor, uint first, uin } } else + { nlassert ((first==0)&&(last==0)); + } _LockCounter++; } @@ -771,7 +773,9 @@ inline void CIndexBuffer::lock (CIndexBufferRead &accessor, uint first, uint las } } else + { nlassert ((first==0)&&(last==0)); + } _LockCounter++; } diff --git a/code/nel/include/nel/3d/vertex_buffer.h b/code/nel/include/nel/3d/vertex_buffer.h index 923bc27b0..83b2b90ea 100644 --- a/code/nel/include/nel/3d/vertex_buffer.h +++ b/code/nel/include/nel/3d/vertex_buffer.h @@ -1177,7 +1177,9 @@ inline void CVertexBuffer::lock (CVertexBufferReadWrite &accessor, uint first, u } } else + { nlassert ((first==0)&&(last==0)); + } _LockCounter++; } @@ -1212,7 +1214,9 @@ inline void CVertexBuffer::lock (CVertexBufferRead &accessor, uint first, uint l } } else + { nlassert ((first==0)&&(last==0)); + } _LockCounter++; } diff --git a/code/nel/src/3d/font_generator.cpp b/code/nel/src/3d/font_generator.cpp index 73f05a6f4..be99d77b9 100644 --- a/code/nel/src/3d/font_generator.cpp +++ b/code/nel/src/3d/font_generator.cpp @@ -104,13 +104,13 @@ CFontGenerator::CFontGenerator (const std::string &fontFileName, const std::stri } string fontEx = fontExFileName; - if (fontEx == "") + if (fontEx.empty()) { // try to see if the ex filename exists based on the fontExFileName fontEx = CPath::lookup(CFile::getFilenameWithoutExtension (fontFileName)+".afm", false, false); } - if (fontEx != "") + if (!fontEx.empty()) { error = FT_Attach_File (_Face, fontEx.c_str ()); if (error) From d4ef87889990640c7e889c1082342269b8ff9d37 Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 12 Dec 2010 15:12:49 +0100 Subject: [PATCH 3/5] Changed: #878 Fix typos in comments/code --- code/nel/src/3d/texture_font.cpp | 2 +- .../3d/object_viewer_widget/src/CMakeLists.txt | 18 +++++++++--------- .../src/object_viewer_widget.cpp | 10 +++++----- code/ryzom/client/src/micro_life_manager.cpp | 2 +- .../src/objectviewer_dialog.cpp | 4 ++-- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/code/nel/src/3d/texture_font.cpp b/code/nel/src/3d/texture_font.cpp index 26e6d1b43..7dd25c2eb 100644 --- a/code/nel/src/3d/texture_font.cpp +++ b/code/nel/src/3d/texture_font.cpp @@ -300,7 +300,7 @@ CTextureFont::SLetterInfo* CTextureFont::getLetterInfo (SLetterKey& k) uint32 width, height; //k.FontGenerator->getSizes (k.Char, k.Size, width, height); - // \todo mat : Temporaire !!! Essayer de faire intervenir le cache de freetype + // \todo mat : Temp !!! Try to use freetype cache uint32 nPitch, nGlyphIndex; sint32 nLeft, nTop, nAdvX; k.FontGenerator->getBitmap (k.Char, k.Size, width, height, nPitch, nLeft, nTop, diff --git a/code/nel/tools/3d/object_viewer_widget/src/CMakeLists.txt b/code/nel/tools/3d/object_viewer_widget/src/CMakeLists.txt index 36336dca1..ca77bfe2d 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_widget/src/CMakeLists.txt @@ -1,10 +1,10 @@ INCLUDE_DIRECTORIES( - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${LIBXML2_INCLUDE_DIR} - ${NEL_INCLUDE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${LIBXML2_INCLUDE_DIR} + ${NEL_INCLUDE_DIR} ${QT_INCLUDES}) - + INCLUDE( ${QT_USE_FILE} ) FILE(GLOB OBJECT_VIEWER_WIDGET_SRC *.cpp *.h) @@ -17,12 +17,12 @@ QT4_WRAP_CPP( OBJECT_VIEWER_WIDGET_MOC_SRCS ${OBJECT_VIEWER_WIDGET_HDR} ) SOURCE_GROUP(QtGeneratedMocSrc FILES ${OBJECT_VIEWER_WIDGET_MOC_SRCS}) -ADD_LIBRARY(object_viewer_widget_qt SHARED - ${OBJECT_VIEWER_WIDGET_SRC} +ADD_LIBRARY(object_viewer_widget_qt SHARED + ${OBJECT_VIEWER_WIDGET_SRC} ${OBJECT_VIEWER_WIDGET_MOC_SRCS}) TARGET_LINK_LIBRARIES(object_viewer_widget_qt - nelmisc + nelmisc nel3d ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY}) @@ -31,7 +31,7 @@ ADD_DEFINITIONS(-DQT_NO_KEYWORDS ${LIBXML2_DEFINITIONS} ${QT_DEFINITIONS}) ADD_DEFINITIONS(-DQT_PLUGIN) ADD_DEFINITIONS(-DQT_SHARED) #ADD_DEFINITIONS(-DQT_NO_DEBUG) - + NL_DEFAULT_PROPS(object_viewer_widget_qt "NeL, Tools, 3D: Object Viewer Qt Widget") #NL_ADD_RUNTIME_FLAGS(object_viewer_widget_qt) diff --git a/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.cpp b/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.cpp index d11a2cde1..56acf8520 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.cpp +++ b/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.cpp @@ -49,22 +49,22 @@ using namespace NLMISC; using namespace NL3D; using namespace std; -namespace NLQT +namespace NLQT { CObjectViewerWidget *CObjectViewerWidget::_objectViewerWidget = NULL; CObjectViewerWidget::CObjectViewerWidget(QWidget *parent) - : _isGraphicsInitialized(false), _isGraphicsEnabled(false), + : _isGraphicsInitialized(false), _isGraphicsEnabled(false), _Driver(NULL), _Light(0), _phi(0), _psi(0),_dist(2), - _CameraFocal(75), _CurrentInstance(""), _BloomEffect(false), - _Scene(0), QWidget(parent) + _CameraFocal(75), _CurrentInstance(""), _BloomEffect(false), + _Scene(0), QWidget(parent) { _objectViewerWidget = this; _isGraphicsEnabled = true; - // As a special case, a QTimer with a timeout of 0 will time out as soon as all the events in the window system's event queue have been processed. + // As a special case, a QTimer with a timeout of 0 will time out as soon as all the events in the window system's event queue have been processed. // This can be used to do heavy work while providing a snappy user interface. _mainTimer = new QTimer(this); connect(_mainTimer, SIGNAL(timeout()), this, SLOT(updateRender())); diff --git a/code/ryzom/client/src/micro_life_manager.cpp b/code/ryzom/client/src/micro_life_manager.cpp index 59bfce76d..b97b761ce 100644 --- a/code/ryzom/client/src/micro_life_manager.cpp +++ b/code/ryzom/client/src/micro_life_manager.cpp @@ -558,7 +558,7 @@ void CMicroLifeManager::tileAdded(const NL3D::CTileAddedInfo &infos) #if !FINAL_VERSION // for debug display, tells that it was generated dynamically newFX.FromIG = false; - #endif +#endif // spawn a primitive on the quad float weight[3]; // compute weight values by computing some noise values around diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp index 9d216b33d..d1bd1a90e 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp @@ -38,7 +38,7 @@ along with this program. If not, see . using namespace std; using namespace NL3D; -namespace NLQT +namespace NLQT { CObjectViewerDialog::CObjectViewerDialog(QWidget *parent) @@ -51,7 +51,7 @@ namespace NLQT _ui.gridLayout->addWidget(_nlw, 0, 0); } - CObjectViewerDialog::~CObjectViewerDialog() + CObjectViewerDialog::~CObjectViewerDialog() { } From 8bc4a7fcdf242d42b0974252259666d0fa7408cc Mon Sep 17 00:00:00 2001 From: kervala Date: Sun, 12 Dec 2010 15:15:10 +0100 Subject: [PATCH 4/5] Fixed: Compilation under Linux --- .../src/plugins/example/CMakeLists.txt | 6 +++++- .../object_viewer_qt/src/plugins/log/CMakeLists.txt | 6 +++++- .../tools/3d/object_viewer_widget/src/CMakeLists.txt | 12 ++++++++---- .../georges_editor_qt/src/objectviewer_dialog.cpp | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/CMakeLists.txt index ef5a633f9..33a485c61 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/example/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/example/CMakeLists.txt @@ -22,7 +22,11 @@ SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC}) ADD_LIBRARY(ovqt_plugin_example SHARED ${SRC} ${OVQT_PLUG_EXAMPLE_MOC_SRC} ${OVQT_EXT_SYS_SRC}) TARGET_LINK_LIBRARIES(ovqt_plugin_example nelmisc ${QT_LIBRARIES}) - + +IF(WITH_STLPORT) + TARGET_LINK_LIBRARIES(ovqt_plugin_example ${CMAKE_THREAD_LIBS_INIT}) +ENDIF(WITH_STLPORT) + NL_DEFAULT_PROPS(ovqt_plugin_example "NeL, Tools, 3D: Object Viewer Qt Plugin: Example") NL_ADD_RUNTIME_FLAGS(ovqt_plugin_example) NL_ADD_LIB_SUFFIX(ovqt_plugin_example) diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/CMakeLists.txt index 7b8b85d5d..d24f6ec3a 100644 --- a/code/nel/tools/3d/object_viewer_qt/src/plugins/log/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/log/CMakeLists.txt @@ -26,7 +26,11 @@ SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC}) ADD_LIBRARY(ovqt_plugin_log SHARED ${SRC} ${OVQT_PLUG_LOG_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_PLUG_LOG_UI_HDRS}) TARGET_LINK_LIBRARIES(ovqt_plugin_log nelmisc ${QT_LIBRARIES}) - + +IF(WITH_STLPORT) + TARGET_LINK_LIBRARIES(ovqt_plugin_log ${CMAKE_THREAD_LIBS_INIT}) +ENDIF(WITH_STLPORT) + NL_DEFAULT_PROPS(ovqt_plugin_log "NeL, Tools, 3D: Object Viewer Qt Plugin: Log") NL_ADD_RUNTIME_FLAGS(ovqt_plugin_log) NL_ADD_LIB_SUFFIX(ovqt_plugin_log) diff --git a/code/nel/tools/3d/object_viewer_widget/src/CMakeLists.txt b/code/nel/tools/3d/object_viewer_widget/src/CMakeLists.txt index ca77bfe2d..34797d45e 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/CMakeLists.txt +++ b/code/nel/tools/3d/object_viewer_widget/src/CMakeLists.txt @@ -27,13 +27,17 @@ TARGET_LINK_LIBRARIES(object_viewer_widget_qt ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY}) -ADD_DEFINITIONS(-DQT_NO_KEYWORDS ${LIBXML2_DEFINITIONS} ${QT_DEFINITIONS}) -ADD_DEFINITIONS(-DQT_PLUGIN) -ADD_DEFINITIONS(-DQT_SHARED) +IF(WITH_STLPORT) + TARGET_LINK_LIBRARIES(object_viewer_widget_qt ${CMAKE_THREAD_LIBS_INIT}) +ENDIF(WITH_STLPORT) + +ADD_DEFINITIONS(-DQT_NO_KEYWORDS ${LIBXML2_DEFINITIONS} ${QT_DEFINITIONS}) +ADD_DEFINITIONS(-DQT_PLUGIN) +ADD_DEFINITIONS(-DQT_SHARED) #ADD_DEFINITIONS(-DQT_NO_DEBUG) NL_DEFAULT_PROPS(object_viewer_widget_qt "NeL, Tools, 3D: Object Viewer Qt Widget") -#NL_ADD_RUNTIME_FLAGS(object_viewer_widget_qt) +NL_ADD_RUNTIME_FLAGS(object_viewer_widget_qt) IF(WITH_PCH) ADD_NATIVE_PRECOMPILED_HEADER(object_viewer_widget_qt ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.h ${CMAKE_CURRENT_SOURCE_DIR}/stdpch.cpp) diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp index d1bd1a90e..b7be551df 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/objectviewer_dialog.cpp @@ -46,7 +46,7 @@ namespace NLQT { _ui.setupUi(this); - _nlw = Modules::objViewInt().getWidget(); + _nlw = dynamic_cast(Modules::objViewInt().getWidget()); //_nlw->setObjectName(QString::fromUtf8("nlwidget")); _ui.gridLayout->addWidget(_nlw, 0, 0); } From 127dc6ffd5e047c4ba900433634a494ca8503236 Mon Sep 17 00:00:00 2001 From: aquiles Date: Sun, 12 Dec 2010 15:57:34 +0100 Subject: [PATCH 5/5] Changed: #1206 fixed missing stuff --- .../3d/object_viewer_widget/src/entity.cpp | 659 +++++++-------- .../3d/object_viewer_widget/src/entity.h | 396 ++++----- .../3d/object_viewer_widget/src/interfaces.h | 9 +- .../src/object_viewer_widget.cpp | 8 +- .../src/object_viewer_widget.h | 7 +- .../3d/object_viewer_widget/src/stdpch.cpp | 24 +- .../3d/object_viewer_widget/src/stdpch.h | 24 +- .../georges_editor_qt/src/CMakeLists.txt | 4 +- .../georges_editor_qt/src/entity.cpp | 8 +- .../georges_editor_qt/src/modules.cpp | 84 +- .../georges_editor_qt/src/modules.h | 10 +- .../georges_editor_qt/src/object_viewer.cpp | 541 ------------- .../georges_editor_qt/src/object_viewer.h | 198 ----- .../src/object_viewer_widget.cpp | 756 ------------------ .../src/object_viewer_widget.h | 211 ----- 15 files changed, 621 insertions(+), 2318 deletions(-) delete mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.cpp delete mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.h delete mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer_widget.cpp delete mode 100644 code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer_widget.h diff --git a/code/nel/tools/3d/object_viewer_widget/src/entity.cpp b/code/nel/tools/3d/object_viewer_widget/src/entity.cpp index f17268419..ad54ec473 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/entity.cpp +++ b/code/nel/tools/3d/object_viewer_widget/src/entity.cpp @@ -1,19 +1,19 @@ /* - Object Viewer Qt - Copyright (C) 2010 Dzmitry Kamiahin +Object Viewer Qt Widget +Copyright (C) 2010 Adrian Jaekel - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ @@ -40,379 +40,380 @@ using namespace NLMISC; using namespace NL3D; -namespace NLQT { - -CSlotInfo& CSlotInfo::operator=(const CSlotInfo & slotInfo) +namespace NLQT { - if ( this != &slotInfo) + + CSlotInfo& CSlotInfo::operator=(const CSlotInfo & slotInfo) { - Animation = slotInfo.Animation; - ClampMode = slotInfo.ClampMode; - Enable = slotInfo.Enable; - EndBlend = slotInfo.EndBlend; - EndTime = slotInfo.EndTime; - Offset = slotInfo.Offset; - Skeleton = slotInfo.Skeleton; - SkeletonInverted = slotInfo.SkeletonInverted; - Smoothness = slotInfo.Smoothness; - SpeedFactor = slotInfo.SpeedFactor; - StartBlend = slotInfo.StartBlend; - StartTime = slotInfo.StartTime; + if ( this != &slotInfo) + { + Animation = slotInfo.Animation; + ClampMode = slotInfo.ClampMode; + Enable = slotInfo.Enable; + EndBlend = slotInfo.EndBlend; + EndTime = slotInfo.EndTime; + Offset = slotInfo.Offset; + Skeleton = slotInfo.Skeleton; + SkeletonInverted = slotInfo.SkeletonInverted; + Smoothness = slotInfo.Smoothness; + SpeedFactor = slotInfo.SpeedFactor; + StartBlend = slotInfo.StartBlend; + StartTime = slotInfo.StartTime; + } + return *this; } - return *this; -} - -CEntity::CEntity(void): - _Name(""), _FileNameShape(""), + + CEntity::CEntity(void): + _Name(""), _FileNameShape(""), _FileNameSkeleton(""), _inPlace(false), _incPos(false), _Instance(NULL), _Skeleton(NULL), _PlayList(NULL), _AnimationSet(NULL) -{ - _CharacterScalePos = 1; -} - -CEntity::~CEntity(void) -{ - if (_PlayList != NULL) { - _PlayList->resetAllChannels(); - CObjectViewerWidget::objViewWid().getPlayListManager()->deletePlayList (_PlayList); - _PlayList = NULL; + _CharacterScalePos = 1; } - if (_AnimationSet != NULL) + + CEntity::~CEntity(void) { - CObjectViewerWidget::objViewWid().getDriver()->deleteAnimationSet(_AnimationSet); - _AnimationSet = NULL; + if (_PlayList != NULL) + { + _PlayList->resetAllChannels(); + CObjectViewerWidget::objViewWid().getPlayListManager()->deletePlayList (_PlayList); + _PlayList = NULL; + } + if (_AnimationSet != NULL) + { + CObjectViewerWidget::objViewWid().getDriver()->deleteAnimationSet(_AnimationSet); + _AnimationSet = NULL; + } + if (!_Skeleton.empty()) + { + _Skeleton.detachSkeletonSon(_Instance); + CObjectViewerWidget::objViewWid().getScene()->deleteSkeleton(_Skeleton); + _Skeleton = NULL; + } + if (!_Instance.empty()) + { + CObjectViewerWidget::objViewWid().getScene()->deleteInstance(_Instance); + _Instance = NULL; + } } - if (!_Skeleton.empty()) + + void CEntity::loadAnimation(std::string &fileName) { - _Skeleton.detachSkeletonSon(_Instance); - CObjectViewerWidget::objViewWid().getScene()->deleteSkeleton(_Skeleton); - _Skeleton = NULL; + uint id = _AnimationSet->addAnimation(fileName.c_str(),CFile::getFilenameWithoutExtension(fileName).c_str()); + _AnimationList.push_back(_AnimationSet->getAnimationName(id)); + _AnimationSet->build(); + if (!_Skeleton.empty()) _PlayList->registerTransform(_Skeleton); + else _PlayList->registerTransform(_Instance); } - if (!_Instance.empty()) + + void CEntity::loadSWT(std::string &fileName) { - CObjectViewerWidget::objViewWid().getScene()->deleteInstance(_Instance); - _Instance = NULL; + uint id = _AnimationSet->addSkeletonWeight(fileName.c_str(),CFile::getFilenameWithoutExtension(fileName).c_str()); + _SWTList.push_back(_AnimationSet->getSkeletonWeightName(id)); } -} -void CEntity::loadAnimation(std::string &fileName) -{ - uint id = _AnimationSet->addAnimation(fileName.c_str(),CFile::getFilenameWithoutExtension(fileName).c_str()); - _AnimationList.push_back(_AnimationSet->getAnimationName(id)); - _AnimationSet->build(); - if (!_Skeleton.empty()) _PlayList->registerTransform(_Skeleton); - else _PlayList->registerTransform(_Instance); -} + void CEntity::addAnimToPlayList(std::string &name) + { + _PlayListAnimation.push_back(name); -void CEntity::loadSWT(std::string &fileName) -{ - uint id = _AnimationSet->addSkeletonWeight(fileName.c_str(),CFile::getFilenameWithoutExtension(fileName).c_str()); - _SWTList.push_back(_AnimationSet->getSkeletonWeightName(id)); -} + _AnimationStatus.EndAnim = this->getPlayListLength(); -void CEntity::addAnimToPlayList(std::string &name) -{ - _PlayListAnimation.push_back(name); - - _AnimationStatus.EndAnim = this->getPlayListLength(); - - _Instance.start(); -} - -void CEntity::removeAnimToPlayList(uint row) -{ - if (row < _PlayListAnimation.size()) - _PlayListAnimation.erase(_PlayListAnimation.begin() + row); - - _AnimationStatus.EndAnim = this->getPlayListLength(); -} - -void CEntity::swapAnimToPlayList(uint row1, uint row2) -{ - if ((row1 < _PlayListAnimation.size()) && (row2 < _PlayListAnimation.size())) - std::swap(_PlayListAnimation[row1], _PlayListAnimation[row2]); -} - -void CEntity::playbackAnim(bool play) -{ - _AnimationStatus.PlayAnim = play; - - if (play) _Instance.start(); - else - _Instance.freezeHRC(); -} + } -void CEntity::reset() -{ - _PlayListAnimation.clear(); - _AnimationList.clear(); - _SWTList.clear(); - - _PlayList->resetAllChannels(); -} - -float CEntity::getPlayListLength() -{ - // Accumul all the time - float time = 0; - for(size_t i = 0; i < _PlayListAnimation.size(); ++i) - time += getAnimLength(_PlayListAnimation[i]); - return time; -} - -float CEntity::getAnimLength(std::string name) -{ - uint id = _AnimationSet->getAnimationIdByName(name.c_str()); - NL3D::UAnimation *anim = _AnimationSet->getAnimation(id); - return anim->getEndTime() - anim->getBeginTime(); -} - -void CEntity::update(NL3D::TAnimationTime time) -{ - this->resetChannel(); - switch (_AnimationStatus.Mode) + void CEntity::removeAnimToPlayList(uint row) { + if (row < _PlayListAnimation.size()) + _PlayListAnimation.erase(_PlayListAnimation.begin() + row); + + _AnimationStatus.EndAnim = this->getPlayListLength(); + } + + void CEntity::swapAnimToPlayList(uint row1, uint row2) + { + if ((row1 < _PlayListAnimation.size()) && (row2 < _PlayListAnimation.size())) + std::swap(_PlayListAnimation[row1], _PlayListAnimation[row2]); + } + + void CEntity::playbackAnim(bool play) + { + _AnimationStatus.PlayAnim = play; + + if (play) + _Instance.start(); + else + _Instance.freezeHRC(); + } + + void CEntity::reset() + { + _PlayListAnimation.clear(); + _AnimationList.clear(); + _SWTList.clear(); + + _PlayList->resetAllChannels(); + } + + float CEntity::getPlayListLength() + { + // Accumul all the time + float time = 0; + for(size_t i = 0; i < _PlayListAnimation.size(); ++i) + time += getAnimLength(_PlayListAnimation[i]); + return time; + } + + float CEntity::getAnimLength(std::string name) + { + uint id = _AnimationSet->getAnimationIdByName(name.c_str()); + NL3D::UAnimation *anim = _AnimationSet->getAnimation(id); + return anim->getEndTime() - anim->getBeginTime(); + } + + void CEntity::update(NL3D::TAnimationTime time) + { + this->resetChannel(); + switch (_AnimationStatus.Mode) + { case Mode::PlayList: animatePlayList(time); break; case Mode::Mixer: animateChannelMixer(); break; - } -} - - -void CEntity::resetChannel() -{ - for(uint i = 0; i < NL3D::CChannelMixer::NumAnimationSlot; i++) - _PlayList->setAnimation(i, UPlayList::empty); -} - -void CEntity::addTransformation (CMatrix ¤t, UAnimation *anim, float begin, float end, UTrack *posTrack, UTrack *rotquatTrack, - UTrack *nextPosTrack, UTrack *nextRotquatTrack, bool removeLast) -{ - // In place ? - if (_inPlace) - { - // Just identity - current.identity(); - } - else - { - // Remove the start of the animation - CQuat rotEnd (0,0,0,1); - CVector posEnd (0,0,0); - if (rotquatTrack) - { - // Interpolate the rotation - rotquatTrack->interpolate (end, rotEnd); } - if (posTrack) + } + + + void CEntity::resetChannel() + { + for(uint i = 0; i < NL3D::CChannelMixer::NumAnimationSlot; i++) + _PlayList->setAnimation(i, UPlayList::empty); + } + + void CEntity::addTransformation (CMatrix ¤t, UAnimation *anim, float begin, float end, UTrack *posTrack, UTrack *rotquatTrack, + UTrack *nextPosTrack, UTrack *nextRotquatTrack, bool removeLast) + { + // In place ? + if (_inPlace) { - // Interpolate the position - posTrack->interpolate (end, posEnd); + // Just identity + current.identity(); } - - // Add the final rotation and position - CMatrix tmp; - tmp.identity (); - tmp.setRot (rotEnd); - tmp.setPos (posEnd); - - // Incremental ? - if (_incPos) - current *= tmp; else - current = tmp; - - if (removeLast) { - CQuat rotStart (0,0,0,1); - CVector posStart (0,0,0); - if (nextRotquatTrack) + // Remove the start of the animation + CQuat rotEnd (0,0,0,1); + CVector posEnd (0,0,0); + if (rotquatTrack) { // Interpolate the rotation - nextRotquatTrack->interpolate (begin, rotStart); + rotquatTrack->interpolate (end, rotEnd); } - if (nextPosTrack) + if (posTrack) { // Interpolate the position - nextPosTrack->interpolate (begin, posStart); + posTrack->interpolate (end, posEnd); } - // Remove the init rotation and position of the next animation + + // Add the final rotation and position + CMatrix tmp; tmp.identity (); - tmp.setRot (rotStart); - tmp.setPos (posStart); - tmp.invert (); - current *= tmp; + tmp.setRot (rotEnd); + tmp.setPos (posEnd); - // Normalize the mt - CVector I = current.getI (); - CVector J = current.getJ (); - I.z = 0; - J.z = 0; - J.normalize (); - CVector K = I^J; - K.normalize (); - I = J^K; - I.normalize (); - tmp.setRot (I, J, K); - tmp.setPos (current.getPos ()); - current = tmp; + // Incremental ? + if (_incPos) + current *= tmp; + else + current = tmp; + + if (removeLast) + { + CQuat rotStart (0,0,0,1); + CVector posStart (0,0,0); + if (nextRotquatTrack) + { + // Interpolate the rotation + nextRotquatTrack->interpolate (begin, rotStart); + } + if (nextPosTrack) + { + // Interpolate the position + nextPosTrack->interpolate (begin, posStart); + } + // Remove the init rotation and position of the next animation + tmp.identity (); + tmp.setRot (rotStart); + tmp.setPos (posStart); + tmp.invert (); + current *= tmp; + + // Normalize the mt + CVector I = current.getI (); + CVector J = current.getJ (); + I.z = 0; + J.z = 0; + J.normalize (); + CVector K = I^J; + K.normalize (); + I = J^K; + I.normalize (); + tmp.setRot (I, J, K); + tmp.setPos (current.getPos ()); + current = tmp; + } } } -} -void CEntity::animatePlayList(NL3D::TAnimationTime time) -{ - if (!_PlayListAnimation.empty()) + void CEntity::animatePlayList(NL3D::TAnimationTime time) { - // Animation index - uint id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[0].c_str()); - - // Try channel AnimationSet - NL3D::UAnimation *anim = _AnimationSet->getAnimation(id); - - bool there = false; - - UTrack *posTrack = NULL; - UTrack *rotQuatTrack = NULL; - - // Current matrix - CMatrix current; - current.identity(); - - // read an animation for init matrix - rotQuatTrack = anim->getTrackByName("rotquat"); - posTrack = anim->getTrackByName("pos"); - - there = posTrack || rotQuatTrack; - - // Accumul time - float startTime = 0; - float endTime = anim->getEndTime() - anim->getBeginTime(); - - uint index = 0; - while (time >= endTime) + if (!_PlayListAnimation.empty()) { - index++; - if (index < _PlayListAnimation.size()) + // Animation index + uint id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[0].c_str()); + + // Try channel AnimationSet + NL3D::UAnimation *anim = _AnimationSet->getAnimation(id); + + bool there = false; + + UTrack *posTrack = NULL; + UTrack *rotQuatTrack = NULL; + + // Current matrix + CMatrix current; + current.identity(); + + // read an animation for init matrix + rotQuatTrack = anim->getTrackByName("rotquat"); + posTrack = anim->getTrackByName("pos"); + + there = posTrack || rotQuatTrack; + + // Accumul time + float startTime = 0; + float endTime = anim->getEndTime() - anim->getBeginTime(); + + uint index = 0; + while (time >= endTime) { + index++; + if (index < _PlayListAnimation.size()) + { + id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[index].c_str()); + NL3D::UAnimation *newAnim = _AnimationSet->getAnimation(id); + + UTrack *newPosTrack = newAnim->getTrackByName ("pos"); + UTrack *newRotquatTrack = newAnim->getTrackByName ("rotquat"); + + // Add the transformation + addTransformation (current, anim, newAnim->getBeginTime(), anim->getEndTime(), posTrack, rotQuatTrack, newPosTrack, newRotquatTrack, true); + + + anim = newAnim; + posTrack = newPosTrack; + rotQuatTrack = newRotquatTrack; + + // Add start time + startTime = endTime; + endTime = startTime + (anim->getEndTime() - anim->getBeginTime()); + } + else + { + // Add the transformation + addTransformation (current, anim, 0, anim->getEndTime(), posTrack, rotQuatTrack, NULL, NULL, false); + break; + } + } + + // Time cropped ? + if (index >= _PlayListAnimation.size()) + { + // Yes + index--; id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[index].c_str()); - NL3D::UAnimation *newAnim = _AnimationSet->getAnimation(id); - - UTrack *newPosTrack = newAnim->getTrackByName ("pos"); - UTrack *newRotquatTrack = newAnim->getTrackByName ("rotquat"); + anim = _AnimationSet->getAnimation(id); - // Add the transformation - addTransformation (current, anim, newAnim->getBeginTime(), anim->getEndTime(), posTrack, rotQuatTrack, newPosTrack, newRotquatTrack, true); - - - anim = newAnim; - posTrack = newPosTrack; - rotQuatTrack = newRotquatTrack; - - // Add start time - startTime = endTime; - endTime = startTime + (anim->getEndTime() - anim->getBeginTime()); - } - else - { - // Add the transformation - addTransformation (current, anim, 0, anim->getEndTime(), posTrack, rotQuatTrack, NULL, NULL, false); - break; - } - } - - // Time cropped ? - if (index >= _PlayListAnimation.size()) - { - // Yes - index--; - id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[index].c_str()); - anim = _AnimationSet->getAnimation(id); - - // End time for last anim - startTime = anim->getEndTime() - time; - } - else - { - // No - - // Add the transformation - addTransformation (current, anim, 0, anim->getBeginTime() + time - startTime, posTrack, rotQuatTrack, NULL, NULL, false); - - id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[index].c_str()); - anim = _AnimationSet->getAnimation(id); - - // Final time - startTime -= anim->getBeginTime(); - } - - // Set the slot - _PlayList->setAnimation(0, id); - _PlayList->setTimeOrigin(0, startTime); - _PlayList->setSpeedFactor(0, 1.0f); - _PlayList->setWeightSmoothness(0, 1.0f); - _PlayList->setStartWeight(0, 1, 0); - _PlayList->setEndWeight(0, 1, 1); - _PlayList->setWrapMode(0, UPlayList::Clamp); - - // Setup the pos and rot for this shape - if (there) - { - CVector pos = current.getPos(); - - // If a skeleton model - if(!_Skeleton.empty()) - { - // scale animated pos value with the CFG scale - pos *= _CharacterScalePos; - _Skeleton.setPos(pos); - _Skeleton.setRotQuat(current.getRot()); + // End time for last anim + startTime = anim->getEndTime() - time; } else { - _Instance.setPos(pos); - _Instance.setRotQuat(current.getRot()); + // No + + // Add the transformation + addTransformation (current, anim, 0, anim->getBeginTime() + time - startTime, posTrack, rotQuatTrack, NULL, NULL, false); + + id = _AnimationSet->getAnimationIdByName(_PlayListAnimation[index].c_str()); + anim = _AnimationSet->getAnimation(id); + + // Final time + startTime -= anim->getBeginTime(); + } + + // Set the slot + _PlayList->setAnimation(0, id); + _PlayList->setTimeOrigin(0, startTime); + _PlayList->setSpeedFactor(0, 1.0f); + _PlayList->setWeightSmoothness(0, 1.0f); + _PlayList->setStartWeight(0, 1, 0); + _PlayList->setEndWeight(0, 1, 1); + _PlayList->setWrapMode(0, UPlayList::Clamp); + + // Setup the pos and rot for this shape + if (there) + { + CVector pos = current.getPos(); + + // If a skeleton model + if(!_Skeleton.empty()) + { + // scale animated pos value with the CFG scale + pos *= _CharacterScalePos; + _Skeleton.setPos(pos); + _Skeleton.setRotQuat(current.getRot()); + } + else + { + _Instance.setPos(pos); + _Instance.setRotQuat(current.getRot()); + } } } } -} -void CEntity::animateChannelMixer() -{ - for (uint i = 0; i < NL3D::CChannelMixer::NumAnimationSlot; i++) + void CEntity::animateChannelMixer() { - if (_SlotInfo[i].Enable) + for (uint i = 0; i < NL3D::CChannelMixer::NumAnimationSlot; i++) { - // Set the animation - uint animId = _AnimationSet->getAnimationIdByName(_SlotInfo[i].Animation); - if (animId == UAnimationSet::NotFound) - _PlayList->setAnimation(i, UPlayList::empty); - else - _PlayList->setAnimation(i, animId); - - // Set the skeleton weight - uint skelId = _AnimationSet->getSkeletonWeightIdByName(_SlotInfo[i].Skeleton); - if (skelId == UAnimationSet::NotFound) - _PlayList->setSkeletonWeight(i, UPlayList::empty, false); - else - _PlayList->setSkeletonWeight(i, skelId, _SlotInfo[i].SkeletonInverted); - - // Set others values - _PlayList->setTimeOrigin(i, _SlotInfo[i].Offset); - _PlayList->setSpeedFactor(i, _SlotInfo[i].SpeedFactor); - _PlayList->setStartWeight(i, _SlotInfo[i].StartBlend, _SlotInfo[i].StartTime); - _PlayList->setEndWeight(i, _SlotInfo[i].EndBlend, _SlotInfo[i].EndTime); - _PlayList->setWeightSmoothness(i, _SlotInfo[i].Smoothness); - - // Switch between wrap modes - switch (_SlotInfo[i].ClampMode) + if (_SlotInfo[i].Enable) { + // Set the animation + uint animId = _AnimationSet->getAnimationIdByName(_SlotInfo[i].Animation); + if (animId == UAnimationSet::NotFound) + _PlayList->setAnimation(i, UPlayList::empty); + else + _PlayList->setAnimation(i, animId); + + // Set the skeleton weight + uint skelId = _AnimationSet->getSkeletonWeightIdByName(_SlotInfo[i].Skeleton); + if (skelId == UAnimationSet::NotFound) + _PlayList->setSkeletonWeight(i, UPlayList::empty, false); + else + _PlayList->setSkeletonWeight(i, skelId, _SlotInfo[i].SkeletonInverted); + + // Set others values + _PlayList->setTimeOrigin(i, _SlotInfo[i].Offset); + _PlayList->setSpeedFactor(i, _SlotInfo[i].SpeedFactor); + _PlayList->setStartWeight(i, _SlotInfo[i].StartBlend, _SlotInfo[i].StartTime); + _PlayList->setEndWeight(i, _SlotInfo[i].EndBlend, _SlotInfo[i].EndTime); + _PlayList->setWeightSmoothness(i, _SlotInfo[i].Smoothness); + + // Switch between wrap modes + switch (_SlotInfo[i].ClampMode) + { case 0: _PlayList->setWrapMode (i, UPlayList::Clamp); break; @@ -422,9 +423,9 @@ void CEntity::animateChannelMixer() case 2: _PlayList->setWrapMode (i, UPlayList::Disable); break; + } } } } -} } /* namespace NLQT */ diff --git a/code/nel/tools/3d/object_viewer_widget/src/entity.h b/code/nel/tools/3d/object_viewer_widget/src/entity.h index 9fb550652..fd632c661 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/entity.h +++ b/code/nel/tools/3d/object_viewer_widget/src/entity.h @@ -1,19 +1,19 @@ /* - Object Viewer Qt - Copyright (C) 2010 Dzmitry Kamiahin +Object Viewer Qt Widget +Copyright (C) 2010 Adrian Jaekel - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ @@ -36,223 +36,225 @@ #include #include -namespace NL3D { +namespace NL3D +{ class UPlayList; class UAnimationSet; } -namespace NLQT { - -class CSlotInfo +namespace NLQT { -public: - CSlotInfo (): - Animation("empty"), Skeleton("empty"), - Offset(0), StartTime(0), EndTime(0), - StartBlend(1), EndBlend (1), Smoothness(1), - SpeedFactor(1), ClampMode(0), - SkeletonInverted(false), - Enable(true) {} ; - std::string Animation; - std::string Skeleton; - float Offset; - float StartTime; - float EndTime; - - float StartBlend; - float EndBlend; - float Smoothness; - float SpeedFactor; - sint32 ClampMode; - bool SkeletonInverted; - bool Enable; - - CSlotInfo &operator=(const CSlotInfo &); -}; - - -/** -@class CEntity -@brief Class manage animated shape. -@details -Allows you to load animations for shape and skeleton weight. -Contains a built-in playlist. Has management and playback Playlists or Mixer. -*/ -class CEntity -{ -public: - struct Mode + class CSlotInfo { - enum List + public: + CSlotInfo (): + Animation("empty"), Skeleton("empty"), + Offset(0), StartTime(0), EndTime(0), + StartBlend(1), EndBlend (1), Smoothness(1), + SpeedFactor(1), ClampMode(0), + SkeletonInverted(false), + Enable(true) {} ; + + std::string Animation; + std::string Skeleton; + float Offset; + float StartTime; + float EndTime; + + float StartBlend; + float EndBlend; + float Smoothness; + float SpeedFactor; + sint32 ClampMode; + bool SkeletonInverted; + bool Enable; + + CSlotInfo &operator=(const CSlotInfo &); + }; + + + /** + @class CEntity + @brief Class manage animated shape. + @details + Allows you to load animations for shape and skeleton weight. + Contains a built-in playlist. Has management and playback Playlists or Mixer. + */ + class CEntity + { + public: + struct Mode { - PlayList = 1, - Mixer + enum List + { + PlayList = 1, + Mixer + }; }; - }; - /// Will need for a single or multiple animation shape - struct SAnimationStatus - { - bool LoopAnim; - bool PlayAnim; - float CurrentTimeAnim; - float StartAnim; - float EndAnim; - float SpeedAnim; - int Mode; - - SAnimationStatus(): + /// Will need for a single or multiple animation shape + struct SAnimationStatus + { + bool LoopAnim; + bool PlayAnim; + float CurrentTimeAnim; + float StartAnim; + float EndAnim; + float SpeedAnim; + int Mode; + + SAnimationStatus(): LoopAnim(false), PlayAnim(false), - CurrentTimeAnim(0), StartAnim(0), - EndAnim(0), SpeedAnim(1), Mode(Mode::PlayList) {} - }; - - /// Destructor - ~CEntity(void); + CurrentTimeAnim(0), StartAnim(0), + EndAnim(0), SpeedAnim(1), Mode(Mode::PlayList) {} + }; - /// Loads a file animations - /// @param fileName - name animation file - void loadAnimation(std::string &fileName); - - /// Loads a file skeleton weight - void loadSWT(std::string &fileName); - - /// Adds an animation to a playlist - /// @param name - name loaded animations - void addAnimToPlayList(std::string &name); - - /// Removes the animation from a playlist - /// @param row - number of animations in the playlist - void removeAnimToPlayList(uint row); - - /// Swaps animations to a playlist - /// @param row1 - first number of animations in the playlist - /// @param row2 - second number of animations in the playlist - void swapAnimToPlayList(uint row1, uint row2); - - /// Playback animation - void playbackAnim(bool play); - - /// Reset playlist and animation - void reset(); - - /// Get the total time of animation playlist - /// @return total time of animation - float getPlayListLength(); - - /// get time length single animation - float getAnimLength(std::string name); - - /// Get slot infomation - void setSlotInfo(uint num, CSlotInfo& slotInfo) { _SlotInfo[num] = slotInfo; } + /// Destructor + ~CEntity(void); - /// Set use mode playlist or mixer - void setMode(int mode) { _AnimationStatus.Mode = mode; } + /// Loads a file animations + /// @param fileName - name animation file + void loadAnimation(std::string &fileName); - /// Set in place mode animation - void setInPlace(bool enabled) { _inPlace = enabled; } + /// Loads a file skeleton weight + void loadSWT(std::string &fileName); - /// Get in place mode - bool getInPlace() { return _inPlace; } + /// Adds an animation to a playlist + /// @param name - name loaded animations + void addAnimToPlayList(std::string &name); - /// Set inc position - void setIncPos(bool enabled) { _incPos = enabled; } + /// Removes the animation from a playlist + /// @param row - number of animations in the playlist + void removeAnimToPlayList(uint row); - /// Get inc position - bool getIncPos() { return _incPos; } + /// Swaps animations to a playlist + /// @param row1 - first number of animations in the playlist + /// @param row2 - second number of animations in the playlist + void swapAnimToPlayList(uint row1, uint row2); - /// Get information about the current status of playing a playlist - /// @return struct containing current information playback - SAnimationStatus getStatus() { return _AnimationStatus; } + /// Playback animation + void playbackAnim(bool play); - /// Get name entity - /// @return name entity - std::string getName() { return _Name; } - - /// Get file name shape - /// @return file name shape - std::string getFileNameShape() { return _FileNameShape; } - - /// Get file name skeleton - /// @return file name skeleton - std::string getFileNameSkeleton() { return _FileNameSkeleton; } - - /// Get slot information - CSlotInfo getSlotInfo(uint num) { return _SlotInfo[num]; } + /// Reset playlist and animation + void reset(); - /// Get list loaded animations files - std::vector& getAnimationList() { return _AnimationList; } + /// Get the total time of animation playlist + /// @return total time of animation + float getPlayListLength(); - /// Get playlist animations - std::vector& getPlayListAnimation() { return _PlayListAnimation; } + /// get time length single animation + float getAnimLength(std::string name); - /// Get list loaded skeleton weight template files - std::vector& getSWTList() { return _SWTList; } - - /// Get game interface for manipulating Skeleton. - NL3D::USkeleton getSkeleton() const { return _Skeleton; } - -private: - /// Constructor - CEntity(void); + /// Get slot infomation + void setSlotInfo(uint num, CSlotInfo& slotInfo) { _SlotInfo[num] = slotInfo; } - /// Update the animate from the playlist or channel mixer - /// @param time - current time in second - void update(NL3D::TAnimationTime time); - - void resetChannel(); - - /// Update the animate from the playlist - void animatePlayList(NL3D::TAnimationTime time); + /// Set use mode playlist or mixer + void setMode(int mode) { _AnimationStatus.Mode = mode; } - /// Update the animate from the mixer - void animateChannelMixer(); - void addTransformation (NLMISC::CMatrix ¤t, NL3D::UAnimation *anim, - float begin, float end, - NL3D::UTrack *posTrack, NL3D::UTrack *rotquatTrack, - NL3D::UTrack *nextPosTrack, NL3D::UTrack *nextRotquatTrack, - bool removeLast); + /// Set in place mode animation + void setInPlace(bool enabled) { _inPlace = enabled; } - // The name of the entity - std::string _Name; - std::string _FileNameShape; - std::string _FileNameSkeleton; - - SAnimationStatus _AnimationStatus; + /// Get in place mode + bool getInPlace() { return _inPlace; } - bool _inPlace; - bool _incPos; - - float _CharacterScalePos; - - // The mesh instance associated to this entity - NL3D::UInstance _Instance; + /// Set inc position + void setIncPos(bool enabled) { _incPos = enabled; } - // The skeleton binded to the instance - NL3D::USkeleton _Skeleton; + /// Get inc position + bool getIncPos() { return _incPos; } - NL3D::UPlayList *_PlayList; + /// Get information about the current status of playing a playlist + /// @return struct containing current information playback + SAnimationStatus getStatus() { return _AnimationStatus; } - NL3D::UAnimationSet *_AnimationSet; + /// Get name entity + /// @return name entity + std::string getName() { return _Name; } - // Animation input file - std::vector _AnimationList; - - // Skeleton weight input file - std::vector _SWTList; - - // Play list animation - std::vector _PlayListAnimation; - - // Slot info for this object - CSlotInfo _SlotInfo[NL3D::CChannelMixer::NumAnimationSlot]; + /// Get file name shape + /// @return file name shape + std::string getFileNameShape() { return _FileNameShape; } - friend class CObjectViewerWidget; -}; /* class CEntity */ + /// Get file name skeleton + /// @return file name skeleton + std::string getFileNameSkeleton() { return _FileNameSkeleton; } -typedef std::map CEntities; -typedef CEntities::iterator EIT; + /// Get slot information + CSlotInfo getSlotInfo(uint num) { return _SlotInfo[num]; } + + /// Get list loaded animations files + std::vector& getAnimationList() { return _AnimationList; } + + /// Get playlist animations + std::vector& getPlayListAnimation() { return _PlayListAnimation; } + + /// Get list loaded skeleton weight template files + std::vector& getSWTList() { return _SWTList; } + + /// Get game interface for manipulating Skeleton. + NL3D::USkeleton getSkeleton() const { return _Skeleton; } + + private: + /// Constructor + CEntity(void); + + /// Update the animate from the playlist or channel mixer + /// @param time - current time in second + void update(NL3D::TAnimationTime time); + + void resetChannel(); + + /// Update the animate from the playlist + void animatePlayList(NL3D::TAnimationTime time); + + /// Update the animate from the mixer + void animateChannelMixer(); + void addTransformation (NLMISC::CMatrix ¤t, NL3D::UAnimation *anim, + float begin, float end, + NL3D::UTrack *posTrack, NL3D::UTrack *rotquatTrack, + NL3D::UTrack *nextPosTrack, NL3D::UTrack *nextRotquatTrack, + bool removeLast); + + // The name of the entity + std::string _Name; + std::string _FileNameShape; + std::string _FileNameSkeleton; + + SAnimationStatus _AnimationStatus; + + bool _inPlace; + bool _incPos; + + float _CharacterScalePos; + + // The mesh instance associated to this entity + NL3D::UInstance _Instance; + + // The skeleton binded to the instance + NL3D::USkeleton _Skeleton; + + NL3D::UPlayList *_PlayList; + + NL3D::UAnimationSet *_AnimationSet; + + // Animation input file + std::vector _AnimationList; + + // Skeleton weight input file + std::vector _SWTList; + + // Play list animation + std::vector _PlayListAnimation; + + // Slot info for this object + CSlotInfo _SlotInfo[NL3D::CChannelMixer::NumAnimationSlot]; + + friend class CObjectViewerWidget; + }; /* class CEntity */ + + typedef std::map CEntities; + typedef CEntities::iterator EIT; } /* namespace NLQT */ diff --git a/code/nel/tools/3d/object_viewer_widget/src/interfaces.h b/code/nel/tools/3d/object_viewer_widget/src/interfaces.h index cbb731029..1924ed33d 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/interfaces.h +++ b/code/nel/tools/3d/object_viewer_widget/src/interfaces.h @@ -19,10 +19,16 @@ along with this program. If not, see . #ifndef INTERFACES_H #define INTERFACES_H +#include "stdpch.h" +#include "entity.h" + #include -namespace NL3D { +namespace NL3D +{ class UPlayListManager; + class UDriver; + class UScene; } namespace NLQT @@ -65,6 +71,7 @@ namespace NLQT virtual bool setupLight(const NLMISC::CVector &position, const NLMISC::CVector &direction) = 0; virtual void setVisible(bool visible) = 0; virtual QWidget* getWidget() = 0; + virtual void setNelContext(NLMISC::INelContext &nelContext) = 0; }; diff --git a/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.cpp b/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.cpp index 56acf8520..430728cea 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.cpp +++ b/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.cpp @@ -78,13 +78,20 @@ namespace NLQT } + void CObjectViewerWidget::setNelContext(NLMISC::INelContext &nelContext) + { + _LibContext = new CLibraryContext(nelContext); + } + void CObjectViewerWidget::init() { + connect(this, SIGNAL(topLevelChanged(bool)), this, SLOT(topLevelChanged(bool))); //H_AUTO2 //nldebug("%d %d %d",_nlw->winId(), width(), height()); + #if defined(NL_OS_UNIX) && !defined(NL_OS_MAC) //dynamic_cast(widget())->makeCurrent(); #endif // defined(NL_OS_UNIX) && !defined(NL_OS_MAC) @@ -410,7 +417,6 @@ namespace NLQT if ( _Entities.count(fileName) != 0) return false; - CPath::display(); CPath::addSearchPath(CFile::getPath(meshFileName), false, false); // create instance of the mesh character diff --git a/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.h b/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.h index cf145716b..4f8d68e58 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.h +++ b/code/nel/tools/3d/object_viewer_widget/src/object_viewer_widget.h @@ -63,12 +63,11 @@ namespace NLQT CObjectViewerWidget(QWidget *parent = 0); virtual ~CObjectViewerWidget(); + void setNelContext(NLMISC::INelContext &nelContext); + static CObjectViewerWidget &objViewWid() { return *_objectViewerWidget; } /// Init a driver and create scene. - /// @param wnd - handle window. - /// @param w - width window. - /// @param h - height window. void init(); /// Release class. @@ -176,6 +175,8 @@ namespace NLQT static CObjectViewerWidget *_objectViewerWidget; + NLMISC::CLibraryContext *_LibContext; + // render stuff QTimer *_mainTimer; bool _isGraphicsInitialized, _isGraphicsEnabled; diff --git a/code/nel/tools/3d/object_viewer_widget/src/stdpch.cpp b/code/nel/tools/3d/object_viewer_widget/src/stdpch.cpp index f555cbb32..e5875aca1 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/stdpch.cpp +++ b/code/nel/tools/3d/object_viewer_widget/src/stdpch.cpp @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Object Viewer Qt Widget +Copyright (C) 2010 Adrian Jaekel - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "stdpch.h" diff --git a/code/nel/tools/3d/object_viewer_widget/src/stdpch.h b/code/nel/tools/3d/object_viewer_widget/src/stdpch.h index 0ef614792..7dde8ae93 100644 --- a/code/nel/tools/3d/object_viewer_widget/src/stdpch.h +++ b/code/nel/tools/3d/object_viewer_widget/src/stdpch.h @@ -1,19 +1,19 @@ /* - Object Viewer Qt - Copyright (C) 2010 Dzmitry Kamiahin +Object Viewer Qt Widget +Copyright (C) 2010 Adrian Jaekel - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/CMakeLists.txt b/code/ryzom/tools/leveldesign/georges_editor_qt/src/CMakeLists.txt index 306db2139..a6fb0b3da 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/CMakeLists.txt +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/CMakeLists.txt @@ -3,13 +3,13 @@ INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${LIBXML2_INCLUDE_DIR} ${NEL_INCLUDE_DIR} - ../../../../../nel/tools/3d/object_viewer_widget/src + ../../../../../nel/tools/3d/object_viewer_widget/src ${QT_INCLUDES}) INCLUDE( ${QT_USE_FILE} ) FILE(GLOB GEORGES_EDITOR_SRC *.cpp *.h) SET(GEORGES_EDITOR_HDR georges_dirtree_dialog.h georges_treeview_dialog.h main_window.h - objectviewer_dialog.h settings_dialog.h progress_dialog.h object_viewer_widget.h) + objectviewer_dialog.h settings_dialog.h progress_dialog.h) SET(GEORGES_EDITOR_UIS settings_form.ui objectviewer_form.ui log_form.ui georges_treeview_form.ui georges_dirtree_form.ui) SET(GEORGES_EDITOR_RCS georges_editor_qt.qrc) diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/entity.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/entity.cpp index 81c028410..934bb4d64 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/entity.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/entity.cpp @@ -76,23 +76,23 @@ CEntity::~CEntity(void) if (_PlayList != NULL) { _PlayList->resetAllChannels(); - //Modules::objViewWid().getPlayListManager()->deletePlayList (_PlayList); + Modules::objViewInt().getPlayListManager()->deletePlayList (_PlayList); _PlayList = NULL; } if (_AnimationSet != NULL) { - //Modules::objViewWid().getDriver()->deleteAnimationSet(_AnimationSet); + Modules::objViewInt().getDriver()->deleteAnimationSet(_AnimationSet); _AnimationSet = NULL; } if (!_Skeleton.empty()) { _Skeleton.detachSkeletonSon(_Instance); - //Modules::objViewWid().getScene()->deleteSkeleton(_Skeleton); + Modules::objViewInt().getScene()->deleteSkeleton(_Skeleton); _Skeleton = NULL; } if (!_Instance.empty()) { - //Modules::objViewWid().getScene()->deleteInstance(_Instance); + Modules::objViewInt().getScene()->deleteInstance(_Instance); _Instance = NULL; } } diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/modules.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/modules.cpp index e6803c027..90c7c4a53 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/modules.cpp +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/modules.cpp @@ -1,19 +1,19 @@ /* - Georges Editor Qt - Copyright (C) 2010 Adrian Jaekel +Georges Editor Qt +Copyright (C) 2010 Adrian Jaekel - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program. If not, see . +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "modules.h" @@ -24,53 +24,53 @@ #include NLQT::CConfiguration *Modules::_configuration = NULL; -NLQT::CObjectViewerWidget *Modules::_objectViewerWidget = NULL; NLQT::IObjectViewer *Modules::_objViewerInterface = NULL; NLQT::CMainWindow *Modules::_mainWindow = NULL; - + void Modules::init() { loadPlugin(); + _objViewerInterface->setNelContext(NLMISC::INelContext::getInstance()); + if (_configuration == NULL) _configuration = new NLQT::CConfiguration; config().init(); - - if (_objectViewerWidget == NULL) _objectViewerWidget = new NLQT::CObjectViewerWidget; + if (_mainWindow == NULL) _mainWindow = new NLQT::CMainWindow; } void Modules::release() { delete _mainWindow; _mainWindow = NULL; - //delete _objectViewerWidget; _objectViewerWidget = NULL; - + config().release(); delete _configuration; _configuration = NULL; } bool Modules::loadPlugin() - { - QDir pluginsDir(qApp->applicationDirPath()); - /*#if defined(Q_OS_WIN) - if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release") - pluginsDir.cdUp(); - #elif defined(Q_OS_MAC) - if (pluginsDir.dirName() == "MacOS") { - pluginsDir.cdUp(); - pluginsDir.cdUp(); - pluginsDir.cdUp(); - } - #endif*/ - //pluginsDir.cd("plugins"); - //Q_FOREACH (QString fileName, pluginsDir.entryList(QDir::Files)) { - QPluginLoader pluginLoader(pluginsDir.absoluteFilePath("object_viewer_widget_qt.dll")); - QObject *plugin = pluginLoader.instance(); - if (plugin) { - _objViewerInterface = qobject_cast(plugin); - if (_objViewerInterface) - return true; - } - //} +{ + QDir pluginsDir(qApp->applicationDirPath()); + /*#if defined(Q_OS_WIN) + if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release") + pluginsDir.cdUp(); + #elif defined(Q_OS_MAC) + if (pluginsDir.dirName() == "MacOS") { + pluginsDir.cdUp(); + pluginsDir.cdUp(); + pluginsDir.cdUp(); + } + #endif*/ + //pluginsDir.cd("plugins"); + //Q_FOREACH (QString fileName, pluginsDir.entryList(QDir::Files)) { + QPluginLoader pluginLoader(pluginsDir.absoluteFilePath("object_viewer_widget_qt.dll")); + QObject *plugin = pluginLoader.instance(); + if (plugin) + { + _objViewerInterface = qobject_cast(plugin); + if (_objViewerInterface) + return true; + } + //} - return false; - } \ No newline at end of file + return false; +} \ No newline at end of file diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/modules.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/modules.h index dd2e5048d..302955253 100644 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/modules.h +++ b/code/ryzom/tools/leveldesign/georges_editor_qt/src/modules.h @@ -20,10 +20,7 @@ #define MODULES_H #include "configuration.h" -//#include "object_viewer.h" -#include "object_viewer_widget.h" #include "main_window.h" - #include "interfaces.h" class Modules @@ -34,18 +31,13 @@ public: static NLQT::CConfiguration &config() { return *_configuration; } static NLQT::IObjectViewer &objViewInt() { return *_objViewerInterface; } - static NLQT::CObjectViewerWidget &objViewWid() { return *_objectViewerWidget; } - //static NLQT::CGeorges &georges() { return *_georges;} static NLQT::CMainWindow &mainWin() { return *_mainWindow; } private: static bool loadPlugin(); - static NLQT::IObjectViewer *_objViewerInterface; + static NLQT::IObjectViewer *_objViewerInterface; static NLQT::CConfiguration *_configuration; - //static NLQT::CObjectViewer *_objectViewer; - static NLQT::CObjectViewerWidget *_objectViewerWidget; static NLQT::CMainWindow *_mainWindow; - //static NLQT::CGeorges *_georges; }; #endif // MODULES_H diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.cpp deleted file mode 100644 index 2c98ccd8a..000000000 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.cpp +++ /dev/null @@ -1,541 +0,0 @@ -/* -Georges Editor Qt -Copyright (C) 2010 Adrian Jaekel - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "object_viewer.h" - -// STL includes - -// NeL includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//#include - -// Project includes -#include "modules.h" -#include "configuration.h" - -using namespace std; -using namespace NLMISC; -using namespace NL3D; - -namespace NLQT -{ - - CObjectViewer::CObjectViewer() - : _Driver(NULL), _Light(0), - _phi(0), _psi(0),_dist(2), - _CameraFocal(75), - _CurrentInstance(""), - _BloomEffect(false), _Scene(0) - { - - } - - CObjectViewer::~CObjectViewer() - { - - } - - void CObjectViewer::reinit(nlWindow wnd, uint16 w, uint16 h) - { - nldebug("CObjectViewert::reinit"); - - //release(); - //init(wnd, w, h); - //_Driver->setDisplay(wnd, NL3D::UDriver::CMode(w, h, 32)); - } - - void CObjectViewer::init(nlWindow wnd, uint16 w, uint16 h) - { - nldebug("CObjectViewer::init"); - - // set background color from config - NLMISC::CConfigFile::CVar v = Modules::config().getConfigFile().getVar("BackgroundColor"); - _BackgroundColor = CRGBA(v.asInt(0), v.asInt(1), v.asInt(2)); - - // set graphics driver from config - NLMISC::CConfigFile::CVar v2 = Modules::config().getConfigFile().getVar("GraphicsDriver"); - // Choose driver opengl to work correctly under Linux example - _Direct3D = false; //_Driver = OpenGL; - -#ifdef NL_OS_WINDOWS - std::string driver = v2.asString(); - if (driver == "Direct3D") _Direct3D = true; //m_Driver = Direct3D; - else if (driver == "OpenGL") _Direct3D = false; //m_Driver = OpenGL; - else nlwarning("Invalid driver specified, defaulting to OpenGL"); -#endif - - //Modules::config().setAndCallback("CameraFocal",CConfigCallback(this,&CObjectViewer::cfcbCameraFocal)); - //Modules::config().setAndCallback("BloomEffect",CConfigCallback(this,&CObjectViewer::cfcbBloomEffect)); - - // create the driver - nlassert(!_Driver); - - _Driver = UDriver::createDriver(0, _Direct3D, 0); - nlassert(_Driver); - - // initialize the window with config file values - _Driver->setDisplay(wnd, NL3D::UDriver::CMode(w, h, 32)); - - //_Light = ULight::createLight(); - - //// set mode of the light - //_Light->setMode(ULight::DirectionalLight); - - //// set position of the light - //_Light->setPosition(CVector(-20.f, 30.f, 10.f)); - - //// white light - //_Light->setAmbiant(CRGBA(255, 255, 255)); - - //// set and enable the light - //_Driver->setLight(0, *_Light); - //_Driver->enableLight(0); - - // Create a scene - _Scene = _Driver->createScene(true); - - _PlayListManager = _Scene->createPlayListManager(); - - //_Scene->enableLightingSystem(true); - - // create the camera - UCamera camera = _Scene->getCam(); - - camera.setTransformMode (UTransformable::DirectMatrix); - - setSizeViewport(w, h); - - // camera will look at entities - camera.lookAt(NLMISC::CVector(_dist,0,1), NLMISC::CVector(0,0,0.5)); - - NLMISC::CVector hotSpot=NLMISC::CVector(0,0,0); - - _MouseListener = _Driver->create3dMouseListener(); - _MouseListener->setMatrix(_Scene->getCam().getMatrix()); - _MouseListener->setFrustrum(_Scene->getCam().getFrustum()); - _MouseListener->setHotSpot(hotSpot); - _MouseListener->setMouseMode(U3dMouseListener::edit3d); - - NL3D::CBloomEffect::instance().setDriver(_Driver); - NL3D::CBloomEffect::instance().setScene(_Scene); - NL3D::CBloomEffect::instance().init(!_Direct3D); - //NL3D::CBloomEffect::instance().setDensityBloom(Modules::config().getConfigFile().getVar("BloomDensity").asInt()); - //NL3D::CBloomEffect::instance().setSquareBloom(Modules::config().getConfigFile().getVar("BloomSquare").asBool()); - } - - void CObjectViewer::release() - { - //H_AUTO2 - nldebug(""); - - _Driver->delete3dMouseListener(_MouseListener); - - // delete all entities - deleteEntities(); - - _Scene->deletePlayListManager(_PlayListManager); - - // delete the scene - _Driver->deleteScene(_Scene); - - // delete the light - delete _Light; - - // release driver - nlassert(_Driver); - _Driver->release(); - delete _Driver; - _Driver = NULL; - } - - void CObjectViewer::updateInput() - { - _Driver->EventServer.pump(); - - // New matrix from camera - _Scene->getCam().setTransformMode(NL3D::UTransformable::DirectMatrix); - _Scene->getCam().setMatrix (_MouseListener->getViewMatrix()); - - //nldebug("%s",_Scene->getCam().getMatrix().getPos().asString().c_str()); - } - - void CObjectViewer::renderDriver() - { - // Render the scene. - if((NL3D::CBloomEffect::instance().getDriver() != NULL) && (_BloomEffect)) - { - NL3D::CBloomEffect::instance().initBloom(); - } - _Driver->clearBuffers(_BackgroundColor); - } - - void CObjectViewer::renderScene() - { - // render the scene - _Scene->render(); - - if((NL3D::CBloomEffect::instance().getDriver() != NULL) && (_BloomEffect)) - { - NL3D::CBloomEffect::instance().endBloom(); - NL3D::CBloomEffect::instance().endInterfacesDisplayBloom(); - } - } - - void CObjectViewer::renderDebug2D() - { - } - - void CObjectViewer::saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga) - { - //H_AUTO2 - - // FIXME: create screenshot path if it doesn't exist! - - // empty bitmap - CBitmap bitmap; - // copy the driver buffer to the bitmap - _Driver->getBuffer(bitmap); - // create the file name - string filename = std::string("./") + nameFile; - // write the bitmap as a jpg, png or tga to the file - if (jpg) - { - string newfilename = CFile::findNewFile(filename + ".jpg"); - COFile outputFile(newfilename); - bitmap.writeJPG(outputFile, 100); - nlinfo("Screenshot '%s' saved", newfilename.c_str()); - } - if (png) - { - string newfilename = CFile::findNewFile(filename + ".png"); - COFile outputFile(newfilename); - bitmap.writePNG(outputFile, 24); - nlinfo("Screenshot '%s' saved", newfilename.c_str()); - } - if (tga) - { - string newfilename = CFile::findNewFile(filename + ".tga"); - COFile outputFile(newfilename); - bitmap.writeTGA(outputFile, 24, false); - nlinfo("Screenshot '%s' saved", newfilename.c_str()); - } - } - - bool CObjectViewer::loadMesh(const std::string &meshFileName, const std::string &skelFileName) - { - std::string fileName = CFile::getFilenameWithoutExtension(meshFileName); - if ( _Entities.count(fileName) != 0) - return false; - - CPath::addSearchPath(CFile::getPath(meshFileName), false, false); - - // create instance of the mesh character - UInstance Entity = _Scene->createInstance(meshFileName); - - CAABBox bbox; - Entity.getShapeAABBox(bbox); - setCamera(bbox , Entity, true); - - _MouseListener->setMatrix(_Scene->getCam().getMatrix()); - - USkeleton Skeleton = _Scene->createSkeleton(skelFileName); - - // if we can't create entity, skip it - if (Entity.empty()) return false; - - // create a new entity - EIT eit = (_Entities.insert (make_pair (fileName, CEntity()))).first; - CEntity &entity = (*eit).second; - - // set the entity up - entity._Name = fileName; - entity._FileNameShape = meshFileName; - entity._FileNameSkeleton = skelFileName; - entity._Instance = Entity; - if (!Skeleton.empty()) - { - entity._Skeleton = Skeleton; - entity._Skeleton.bindSkin (entity._Instance); - } - entity._AnimationSet = _Driver->createAnimationSet(false); - entity._PlayList = _PlayListManager->createPlayList(entity._AnimationSet); - return true; - } - - void CObjectViewer::resetScene() - { - deleteEntities(); - - // Reset camera. - //.. - - // to load files with the same name but located in different directories - //CPath::clearMap(); - - // load and set search paths from config - //Modules::config().configSearchPaths(); - - _CurrentInstance = ""; - - nlinfo("Scene cleared"); - } - - void CObjectViewer::updateCamera(float deltaPsi, float deltaPhi, float deltaDist) - { - - } - - void CObjectViewer::setBackgroundColor(NLMISC::CRGBA backgroundColor) - { - _BackgroundColor = backgroundColor; - - // config file variable changes - Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.R, 0); - Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.G, 1); - Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.B, 2); - } - - void CObjectViewer::setGraphicsDriver(bool Direct3D) - { - _Direct3D = Direct3D; - - if (_Direct3D) Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("Direct3D"); - else Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("OpenGL"); - } - - void CObjectViewer::setSizeViewport(uint16 w, uint16 h) - { - _Scene->getCam().setPerspective(_CameraFocal * (float)Pi/180.f, (float)w/h, 0.1f, 1000); - } - - void CObjectViewer::setCurrentObject(const std::string &name) - { - if ((_Entities.count(name) != 0) || ( name.empty() )) _CurrentInstance = name; - else nlerror ("Entity %s not found", name.c_str()); - nlinfo("set current entity %s", _CurrentInstance.c_str()); - } - - CEntity& CObjectViewer::getEntity(const std::string &name) - { - if ( _Entities.count(name) == 0) nlerror("Entity %s not found", name.c_str()); - EIT eit = _Entities.find (name); - return (*eit).second; - } - - void CObjectViewer::getListObjects(std::vector &listObj) - { - listObj.clear(); - for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) - listObj.push_back((*eit).second._Name); - } - - void CObjectViewer::deleteEntity(CEntity &entity) - { - if (entity._PlayList != NULL) - { - _PlayListManager->deletePlayList (entity._PlayList); - entity._PlayList = NULL; - } - - if (entity._AnimationSet != NULL) - { - _Driver->deleteAnimationSet(entity._AnimationSet); - entity._AnimationSet = NULL; - } - - if (!entity._Skeleton.empty()) - { - entity._Skeleton.detachSkeletonSon(entity._Instance); - - _Scene->deleteSkeleton(entity._Skeleton); - entity._Skeleton = NULL; - } - - if (!entity._Instance.empty()) - { - _Scene->deleteInstance(entity._Instance); - entity._Instance = NULL; - } - } - - void CObjectViewer::deleteEntities() - { - for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) - { - CEntity &entity = (*eit).second; - deleteEntity(entity); - } - _Entities.clear(); - } - - void CObjectViewer::setCamera(CAABBox &bbox, UTransform &entity, bool high_z) - { - CVector pos(0.f, 0.f, 0.f); - CQuat quat(0.f, 0.f, 0.f, 0.f); - NL3D::UInstance inst; - inst.cast(entity); - if (!inst.empty()) - { - inst.getDefaultPos(pos); - inst.getDefaultRotQuat(quat); - /* - if (quat.getAxis().isNull()) - { - quat.set(0, 0, 0, 0); - inst.setRotQuat(quat); - } - */ - // quat.set(1.f, 1.f, 0.f, 0.f); - - // inst.setRotQuat(quat); - // inst.getRotQuat(quat); - - // check for presence of all textures from each sets - //bool allGood = true; - - //for(uint s = 0; s < 5; ++s) - //{ - // inst.selectTextureSet(s); - - // uint numMat = inst.getNumMaterials(); - - // // by default, all textures are present - // allGood = true; - - // for(uint i = 0; i < numMat; ++i) - // { - // UInstanceMaterial mat = inst.getMaterial(i); - - // for(sint j = 0; j <= mat.getLastTextureStage(); ++j) - // { - // // if a texture is missing - // if (mat.isTextureFile(j) && mat.getTextureFileName(j) == "CTextureMultiFile:Dummy") - // allGood = false; - // } - // } - - // // if all textures have been found for this set, skip other sets - // if (allGood) - // break; - //} - } - - // fix scale (some shapes have a different value) - entity.setScale(1.f, 1.f, 1.f); - - UCamera Camera = _Scene->getCam(); - CVector max_radius = bbox.getHalfSize(); - - CVector center = bbox.getCenter(); - entity.setPivot(center); - center += pos; - - //_Scene->getCam().setPerspective(_CameraFocal * (float)Pi/180.f, (float)w/h, 0.1f, 1000); - float fov = float(_CameraFocal * (float)Pi/180.0); - //Camera.setPerspective (fov, 1.0f, 0.1f, 1000.0f); - float radius = max(max(max_radius.x, max_radius.y), max_radius.z); - if (radius == 0.f) radius = 1.f; - float left, right, bottom, top, znear, zfar; - Camera.getFrustum(left, right, bottom, top, znear, zfar); - float dist = radius / (tan(fov/2)); - CVector eye(center); - /* if (axis == CVector::I) - eye.y -= dist+radius; - else if (axis == CVector::J) - eye.x += dist+radius; - */ - // quat.normalize(); - - CVector ax(quat.getAxis()); - - // float angle = quat.getAngle(); - /* - if (ax.isNull()) - { - if (int(angle*100.f) == int(NLMISC::Pi * 200.f)) - { - ax = CVector::J; - } - } - else - */ - if (ax.isNull() || ax == CVector::I) - { - ax = CVector::J; - } - else if (ax == -CVector::K) - { - ax = -CVector::J; - } - /* else if (ax.x < -0.9f && ax.y == 0.f && ax.z == 0.f) - { - ax = -CVector::J ; - } - */ - // ax.normalize(); - - eye -= ax * (dist+radius); - if (high_z) - eye.z += max_radius.z/1.0f; - Camera.lookAt(eye, center); - setupLight(eye, center - eye); - } - - bool CObjectViewer::setupLight(const CVector &position, const CVector &direction) - { - if (!_Light) - _Light = ULight::createLight(); - if (!_Light) return false; - - // set mode of the light - _Light->setMode(ULight::DirectionalLight); - - // set position of the light - // Light->setupDirectional(settings.light_ambiant, settings.light_diffuse, settings.light_specular, settings.light_direction); - NLMISC::CRGBA light_ambiant = CRGBA(0,0,0); - NLMISC::CRGBA light_diffuse = CRGBA(255,255,255); - NLMISC::CRGBA light_specular = CRGBA(255,255,255); - NLMISC::CVector light_direction = CVector(0.25, 0.25, 0.25); - _Light->setupPointLight(light_ambiant, light_diffuse, light_specular, position, direction + light_direction); - - // set and enable the light - _Driver->setLight(0, *_Light); - _Driver->enableLight(0); - - return true; - } - -} /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.h deleted file mode 100644 index f7fe2e16a..000000000 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer.h +++ /dev/null @@ -1,198 +0,0 @@ -/* -Georges Editor Qt -Copyright (C) 2010 Adrian Jaekel - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef OBJECT_VIEWER_H -#define OBJECT_VIEWER_H - -#include - -// STL includes -#include -#include - -// NeL includes -#include -#include -#include -#include - -// Project includes -#include "entity.h" - -namespace NL3D -{ - class UDriver; - class UScene; - class ULight; - class UInstance; - class UCamera; - class USkeleton; - class UPlayListManager; - class U3dMouseListener; -} - -/** -namespace NLQT -@brief namespace NLQT -*/ -namespace NLQT -{ - - /** - @class CObjectViewer - A CObjectViewer class loading and viewing shape, particle system files. - */ - class CObjectViewer - { - public: - /// Default constructor. - CObjectViewer(); - - virtual ~CObjectViewer(); - - /// Init a driver and create scene. - /// @param wnd - handle window. - /// @param w - width window. - /// @param h - height window. - void init(nlWindow wnd, uint16 w, uint16 h); - - void reinit(nlWindow wnd, uint16 w, uint16 h); - - /// Release class. - void release(); - - /// Update mouse and keyboard events. And update camera matrix. - void updateInput(); - - /// Render Driver (clear all buffers and set background color). - void renderDriver(); - - /// Render current scene. - void renderScene(); - - /// Render Debug 2D (stuff for dev). - void renderDebug2D(); - - /// Make a screenshot of the current scene and save. - void saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga); - - /// Load a mesh or particle system and add to current scene. - /// @param meshFileName - name loading shape or ps file. - /// @param skelFileName - name loading skeletin file. - /// @return true if file have been loaded, false if file have not been loaded. - bool loadMesh (const std::string &meshFileName, const std::string &skelFileName); - - /// Reset current scene. - void resetScene(); - - /// Update the navigation camera. - /// @param deltaPsi - delta angle horizontal (radians). - /// @param deltaPhi - delta angle vertical (radians). - /// @param deltaDist - delta distance. - void updateCamera(float deltaPsi, float deltaPhi, float deltaDist); - - /// Set the background color. - /// @param backgroundColor - background color. - void setBackgroundColor(NLMISC::CRGBA backgroundColor); - - /// Set type driver. - /// @param Direct3D - type driver (true - Direct3D) or (false -OpenGL) - void setGraphicsDriver(bool Direct3D); - - /// Set size viewport for correct set perspective - /// @param w - width window. - /// @param h - height window. - void setSizeViewport(uint16 w, uint16 h); - - void setBloomEffect(bool enabled) { _BloomEffect = enabled; } - - /// Select instance from the scene - /// @param name - name instance, "" if no instance edited - void setCurrentObject(const std::string &name); - - /// Get current instance from the scene - /// @return name current instance, "" if no instance edited - const std::string& getCurrentObject() { return _CurrentInstance; } - - /// Get entity from the scene - /// @return ref Entity - CEntity& getEntity(const std::string &name); - - /// Get full list instances from the scene - /// @param listObj - ref of return list instances - void getListObjects(std::vector &listObj); - - /// Get value background color. - /// @return background color. - NLMISC::CRGBA getBackgroundColor() { return _BackgroundColor; } - - /// Get type driver. - /// @return true if have used Direct3D driver, false OpenGL driver. - inline bool getDirect3D() { return _Direct3D; } - - inline bool getBloomEffect() const { return _BloomEffect; } - - /// Get a pointer to the driver. - /// @return pointer to the driver. - inline NL3D::UDriver *getDriver() { return _Driver; } - - /// Get a pointer to the scene. - /// @return pointer to the scene. - inline NL3D::UScene *getScene() { return _Scene; } - - /// Get a manager of playlist - /// @return pointer to the UPlayListManager - inline NL3D::UPlayListManager *getPlayListManager() { return _PlayListManager; } - - void setCamera(NLMISC::CAABBox &bbox, NL3D::UTransform &entity, bool high_z); - bool setupLight(const NLMISC::CVector &position, const NLMISC::CVector &direction); - - private: - void deleteEntity (CEntity &entity); - - /// Delete all entities - void deleteEntities(); - - NLMISC::CRGBA _BackgroundColor; - - NL3D::UDriver *_Driver; - NL3D::UScene *_Scene; - NL3D::UPlayListManager *_PlayListManager; - NL3D::ULight *_Light; - NL3D::UCamera *_Camera; - NL3D::U3dMouseListener *_MouseListener; - - // The entities storage - CEntities _Entities; - - /// Camera parameters. - float _phi, _psi, _dist; - float _CameraFocal; - - bool _Direct3D; - bool _BloomEffect; - - std::string _CurrentInstance; - - // a temporary solution, and later remove - friend class CAnimationSetDialog; - };/* class CObjectViewer */ - -} /* namespace NLQT */ - -#endif // OBJECT_VIEWER_H diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer_widget.cpp b/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer_widget.cpp deleted file mode 100644 index baf8aac3d..000000000 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer_widget.cpp +++ /dev/null @@ -1,756 +0,0 @@ -/* -Georges Editor Qt -Copyright (C) 2010 Adrian Jaekel - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "object_viewer_widget.h" - -// STL includes - -// NeL includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Project includes -#include "modules.h" - -using namespace NLMISC; -using namespace NL3D; -using namespace std; - -namespace NLQT -{ - - CObjectViewerWidget::CObjectViewerWidget(QWidget *parent) - : _isGraphicsInitialized(false), _isGraphicsEnabled(false), - _Driver(NULL), _Light(0), _phi(0), _psi(0),_dist(2), - _CameraFocal(75), _CurrentInstance(""), _BloomEffect(false), - _Scene(0), QWidget(parent) - { - _isGraphicsEnabled = true; - - // As a special case, a QTimer with a timeout of 0 will time out as soon as all the events in the window system's event queue have been processed. - // This can be used to do heavy work while providing a snappy user interface. - _mainTimer = new QTimer(this); - connect(_mainTimer, SIGNAL(timeout()), this, SLOT(updateRender())); - // timer->start(); // <- timeout 0 - // it's heavy on cpu, though, when no 3d driver initialized :) - _mainTimer->start(25); // 25fps - } - - CObjectViewerWidget::~CObjectViewerWidget() - { - - } - - void CObjectViewerWidget::init() - { - connect(this, SIGNAL(topLevelChanged(bool)), - this, SLOT(topLevelChanged(bool))); - //H_AUTO2 - //nldebug("%d %d %d",_nlw->winId(), width(), height()); - -#if defined(NL_OS_UNIX) && !defined(NL_OS_MAC) - dynamic_cast(widget())->makeCurrent(); -#endif // defined(NL_OS_UNIX) && !defined(NL_OS_MAC) - - nlWindow wnd = winId(); - uint16 w = width(); - uint16 h = height(); - - setMouseTracking(true); - - // set background color from config - NLMISC::CConfigFile::CVar v = Modules::config().getConfigFile().getVar("BackgroundColor"); - _BackgroundColor = CRGBA(v.asInt(0), v.asInt(1), v.asInt(2)); - - // set graphics driver from config - NLMISC::CConfigFile::CVar v2 = Modules::config().getConfigFile().getVar("GraphicsDriver"); - // Choose driver opengl to work correctly under Linux example - _Direct3D = false; //_Driver = OpenGL; - -#ifdef NL_OS_WINDOWS - std::string driver = v2.asString(); - if (driver == "Direct3D") _Direct3D = true; //m_Driver = Direct3D; - else if (driver == "OpenGL") _Direct3D = false; //m_Driver = OpenGL; - else nlwarning("Invalid driver specified, defaulting to OpenGL"); -#endif - - //Modules::config().setAndCallback("CameraFocal",CConfigCallback(this,&CObjectViewer::cfcbCameraFocal)); - //Modules::config().setAndCallback("BloomEffect",CConfigCallback(this,&CObjectViewer::cfcbBloomEffect)); - - // create the driver - nlassert(!_Driver); - - _Driver = UDriver::createDriver(0, _Direct3D, 0); - nlassert(_Driver); - - // initialize the window with config file values - _Driver->setDisplay(wnd, NL3D::UDriver::CMode(w, h, 32)); - - //_Light = ULight::createLight(); - - //// set mode of the light - //_Light->setMode(ULight::DirectionalLight); - - //// set position of the light - //_Light->setPosition(CVector(-20.f, 30.f, 10.f)); - - //// white light - //_Light->setAmbiant(CRGBA(255, 255, 255)); - - //// set and enable the light - //_Driver->setLight(0, *_Light); - //_Driver->enableLight(0); - - // Create a scene - _Scene = _Driver->createScene(true); - - _PlayListManager = _Scene->createPlayListManager(); - - //_Scene->enableLightingSystem(true); - - // create the camera - UCamera camera = _Scene->getCam(); - - camera.setTransformMode (UTransformable::DirectMatrix); - - setSizeViewport(w, h); - - // camera will look at entities - camera.lookAt(NLMISC::CVector(_dist,0,1), NLMISC::CVector(0,0,0.5)); - - NLMISC::CVector hotSpot=NLMISC::CVector(0,0,0); - - _MouseListener = _Driver->create3dMouseListener(); - _MouseListener->setMatrix(_Scene->getCam().getMatrix()); - _MouseListener->setFrustrum(_Scene->getCam().getFrustum()); - _MouseListener->setHotSpot(hotSpot); - _MouseListener->setMouseMode(U3dMouseListener::edit3d); - - NL3D::CBloomEffect::instance().setDriver(_Driver); - NL3D::CBloomEffect::instance().setScene(_Scene); - NL3D::CBloomEffect::instance().init(!_Direct3D); - //NL3D::CBloomEffect::instance().setDensityBloom(Modules::config().getConfigFile().getVar("BloomDensity").asInt()); - //NL3D::CBloomEffect::instance().setSquareBloom(Modules::config().getConfigFile().getVar("BloomSquare").asBool()); - } - - void CObjectViewerWidget::release() - { - //H_AUTO2 - nldebug(""); - - _Driver->delete3dMouseListener(_MouseListener); - - // delete all entities - deleteEntities(); - - _Scene->deletePlayListManager(_PlayListManager); - - // delete the scene - _Driver->deleteScene(_Scene); - - // delete the light - delete _Light; - - // release driver - nlassert(_Driver); - _Driver->release(); - delete _Driver; - _Driver = NULL; - } - - void CObjectViewerWidget::updateRender() - { - //nldebug("CMainWindow::updateRender"); - updateInitialization(isVisible()); - - //QModelIndex index = _dirModel->setRootPath("D:/Dev/Ryzom/code/ryzom/common/data_leveldesign/leveldesign"); - //_dirTree->setRootIndex(index); - - if (isVisible()) - { - // call all update functions - // 01. Update Utilities (configuration etc) - - // 02. Update Time (deltas) - // ... - - // 03. Update Receive (network, servertime, receive messages) - // ... - - // 04. Update Input (keyboard controls, etc) - if (_isGraphicsInitialized) - updateInput(); - - // 05. Update Weather (sky, snow, wind, fog, sun) - // ... - - // 06. Update Entities (movement, do after possible tp from incoming messages etc) - // - Move other entities - // - Update self entity - // - Move bullets - // ... - - // 07. Update Landscape (async zone loading near entity) - // ... - - // 08. Update Collisions (entities) - // - Update entities - // - Update move container (swap with Update entities? todo: check code!) - // - Update bullets - // ... - - // 09. Update Animations (playlists) - // - Needs to be either before or after entities, not sure, - // there was a problem with wrong order a while ago!!! - - - //updateAnimation(_AnimationDialog->getTime()); - - // 10. Update Camera (depends on entities) - // ... - - // 11. Update Interface (login, ui, etc) - // ... - - // 12. Update Sound (sound driver) - // ... - - // 13. Update Send (network, send new position etc) - // ... - - // 14. Update Debug (stuff for dev) - // ... - - if (_isGraphicsInitialized && !getDriver()->isLost()) - { - // 01. Render Driver (background color) - renderDriver(); // clear all buffers - - // 02. Render Sky (sky scene) - // ... - - // 04. Render Scene (entity scene) - renderScene(); - - // 05. Render Effects (flare) - // ... - - // 06. Render Interface 3D (player names) - // ... - - // 07. Render Debug 3D - // ... - - // 08. Render Interface 2D (chatboxes etc, optionally does have 3d) - // ... - - // 09. Render Debug 2D (stuff for dev) - renderDebug2D(); - - // swap 3d buffers - getDriver()->swapBuffers(); - } - } - } - - void CObjectViewerWidget::updateInitialization(bool visible) - { - //nldebug("CMainWindow::updateInitialization"); - bool done; - do - { - done = true; // set false whenever change - bool wantGraphics = _isGraphicsEnabled && visible; - // bool wantLandscape = wantGraphics && m_IsGraphicsInitialized && isLandscapeEnabled; - - // .. stuff that depends on other stuff goes on top to prioritize deinitialization - - // Landscape - // ... - - // Graphics (Driver) - if (_isGraphicsInitialized) - { - if (!wantGraphics) - { - //_isGraphicsInitialized = false; - //release(); - _mainTimer->stop(); - //done = false; - } - } - else - { - if (wantGraphics) - { - init(); - _isGraphicsInitialized = true; - _mainTimer->start(25); - //done = false; - } - } - } - while (!done); - } - - void CObjectViewerWidget::updateInput() - { - _Driver->EventServer.pump(); - - // New matrix from camera - _Scene->getCam().setTransformMode(NL3D::UTransformable::DirectMatrix); - _Scene->getCam().setMatrix (_MouseListener->getViewMatrix()); - - //nldebug("%s",_Scene->getCam().getMatrix().getPos().asString().c_str()); - } - - void CObjectViewerWidget::renderDriver() - { - // Render the scene. - if((NL3D::CBloomEffect::instance().getDriver() != NULL) && (_BloomEffect)) - { - NL3D::CBloomEffect::instance().initBloom(); - } - _Driver->clearBuffers(_BackgroundColor); - } - - void CObjectViewerWidget::renderScene() - { - // render the scene - _Scene->render(); - - if((NL3D::CBloomEffect::instance().getDriver() != NULL) && (_BloomEffect)) - { - NL3D::CBloomEffect::instance().endBloom(); - NL3D::CBloomEffect::instance().endInterfacesDisplayBloom(); - } - } - - void CObjectViewerWidget::renderDebug2D() - { - } - - void CObjectViewerWidget::saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga) - { - //H_AUTO2 - - // FIXME: create screenshot path if it doesn't exist! - - // empty bitmap - CBitmap bitmap; - // copy the driver buffer to the bitmap - _Driver->getBuffer(bitmap); - // create the file name - string filename = std::string("./") + nameFile; - // write the bitmap as a jpg, png or tga to the file - if (jpg) - { - string newfilename = CFile::findNewFile(filename + ".jpg"); - COFile outputFile(newfilename); - bitmap.writeJPG(outputFile, 100); - nlinfo("Screenshot '%s' saved", newfilename.c_str()); - } - if (png) - { - string newfilename = CFile::findNewFile(filename + ".png"); - COFile outputFile(newfilename); - bitmap.writePNG(outputFile, 24); - nlinfo("Screenshot '%s' saved", newfilename.c_str()); - } - if (tga) - { - string newfilename = CFile::findNewFile(filename + ".tga"); - COFile outputFile(newfilename); - bitmap.writeTGA(outputFile, 24, false); - nlinfo("Screenshot '%s' saved", newfilename.c_str()); - } - } - - bool CObjectViewerWidget::loadMesh(const std::string &meshFileName, const std::string &skelFileName) - { - std::string fileName = CFile::getFilenameWithoutExtension(meshFileName); - if ( _Entities.count(fileName) != 0) - return false; - - CPath::addSearchPath(CFile::getPath(meshFileName), false, false); - - // create instance of the mesh character - UInstance Entity = _Scene->createInstance(meshFileName); - - CAABBox bbox; - Entity.getShapeAABBox(bbox); - setCamera(bbox , Entity, true); - - _MouseListener->setMatrix(_Scene->getCam().getMatrix()); - - USkeleton Skeleton = _Scene->createSkeleton(skelFileName); - - // if we can't create entity, skip it - if (Entity.empty()) return false; - - // create a new entity - EIT eit = (_Entities.insert (make_pair (fileName, CEntity()))).first; - CEntity &entity = (*eit).second; - - // set the entity up - entity._Name = fileName; - entity._FileNameShape = meshFileName; - entity._FileNameSkeleton = skelFileName; - entity._Instance = Entity; - if (!Skeleton.empty()) - { - entity._Skeleton = Skeleton; - entity._Skeleton.bindSkin (entity._Instance); - } - entity._AnimationSet = _Driver->createAnimationSet(false); - entity._PlayList = _PlayListManager->createPlayList(entity._AnimationSet); - return true; - } - - void CObjectViewerWidget::setVisible(bool visible) - { - // called by show() - // code assuming visible window needed to init the 3d driver - nldebug("%d", visible); - if (visible) - { - QWidget::setVisible(true); - } - else - { - QWidget::setVisible(false); - } - } - - void CObjectViewerWidget::resetScene() - { - deleteEntities(); - - // Reset camera. - //.. - - // to load files with the same name but located in different directories - //CPath::clearMap(); - - // load and set search paths from config - //Modules::config().configSearchPaths(); - - _CurrentInstance = ""; - - nlinfo("Scene cleared"); - } - - void CObjectViewerWidget::setBackgroundColor(NLMISC::CRGBA backgroundColor) - { - _BackgroundColor = backgroundColor; - - // config file variable changes - Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.R, 0); - Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.G, 1); - Modules::config().getConfigFile().getVar("BackgroundColor").setAsInt(_BackgroundColor.B, 2); - } - - void CObjectViewerWidget::setGraphicsDriver(bool Direct3D) - { - _Direct3D = Direct3D; - - if (_Direct3D) Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("Direct3D"); - else Modules::config().getConfigFile().getVar("GraphicsDriver").setAsString("OpenGL"); - } - - void CObjectViewerWidget::setSizeViewport(uint16 w, uint16 h) - { - _Scene->getCam().setPerspective(_CameraFocal * (float)Pi/180.f, (float)w/h, 0.1f, 1000); - } - - void CObjectViewerWidget::setCurrentObject(const std::string &name) - { - if ((_Entities.count(name) != 0) || ( name.empty() )) _CurrentInstance = name; - else nlerror ("Entity %s not found", name.c_str()); - nlinfo("set current entity %s", _CurrentInstance.c_str()); - } - - CEntity& CObjectViewerWidget::getEntity(const std::string &name) - { - if ( _Entities.count(name) == 0) nlerror("Entity %s not found", name.c_str()); - EIT eit = _Entities.find (name); - return (*eit).second; - } - - void CObjectViewerWidget::getListObjects(std::vector &listObj) - { - listObj.clear(); - for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) - listObj.push_back((*eit).second._Name); - } - - void CObjectViewerWidget::deleteEntity(CEntity &entity) - { - if (entity._PlayList != NULL) - { - _PlayListManager->deletePlayList (entity._PlayList); - entity._PlayList = NULL; - } - - if (entity._AnimationSet != NULL) - { - _Driver->deleteAnimationSet(entity._AnimationSet); - entity._AnimationSet = NULL; - } - - if (!entity._Skeleton.empty()) - { - entity._Skeleton.detachSkeletonSon(entity._Instance); - - _Scene->deleteSkeleton(entity._Skeleton); - entity._Skeleton = NULL; - } - - if (!entity._Instance.empty()) - { - _Scene->deleteInstance(entity._Instance); - entity._Instance = NULL; - } - } - - void CObjectViewerWidget::deleteEntities() - { - for (EIT eit = _Entities.begin(); eit != _Entities.end(); ++eit) - { - CEntity &entity = (*eit).second; - deleteEntity(entity); - } - _Entities.clear(); - } - - void CObjectViewerWidget::setCamera(CAABBox &bbox, UTransform &entity, bool high_z) - { - CVector pos(0.f, 0.f, 0.f); - CQuat quat(0.f, 0.f, 0.f, 0.f); - NL3D::UInstance inst; - inst.cast(entity); - if (!inst.empty()) - { - inst.getDefaultPos(pos); - inst.getDefaultRotQuat(quat); - /* - if (quat.getAxis().isNull()) - { - quat.set(0, 0, 0, 0); - inst.setRotQuat(quat); - } - */ - // quat.set(1.f, 1.f, 0.f, 0.f); - - // inst.setRotQuat(quat); - // inst.getRotQuat(quat); - - // check for presence of all textures from each sets - //bool allGood = true; - - //for(uint s = 0; s < 5; ++s) - //{ - // inst.selectTextureSet(s); - - // uint numMat = inst.getNumMaterials(); - - // // by default, all textures are present - // allGood = true; - - // for(uint i = 0; i < numMat; ++i) - // { - // UInstanceMaterial mat = inst.getMaterial(i); - - // for(sint j = 0; j <= mat.getLastTextureStage(); ++j) - // { - // // if a texture is missing - // if (mat.isTextureFile(j) && mat.getTextureFileName(j) == "CTextureMultiFile:Dummy") - // allGood = false; - // } - // } - - // // if all textures have been found for this set, skip other sets - // if (allGood) - // break; - //} - } - - // fix scale (some shapes have a different value) - entity.setScale(1.f, 1.f, 1.f); - - UCamera Camera = _Scene->getCam(); - CVector max_radius = bbox.getHalfSize(); - - CVector center = bbox.getCenter(); - entity.setPivot(center); - center += pos; - - //_Scene->getCam().setPerspective(_CameraFocal * (float)Pi/180.f, (float)w/h, 0.1f, 1000); - float fov = float(_CameraFocal * (float)Pi/180.0); - //Camera.setPerspective (fov, 1.0f, 0.1f, 1000.0f); - float radius = max(max(max_radius.x, max_radius.y), max_radius.z); - if (radius == 0.f) radius = 1.f; - float left, right, bottom, top, znear, zfar; - Camera.getFrustum(left, right, bottom, top, znear, zfar); - float dist = radius / (tan(fov/2)); - CVector eye(center); - /* if (axis == CVector::I) - eye.y -= dist+radius; - else if (axis == CVector::J) - eye.x += dist+radius; - */ - // quat.normalize(); - - CVector ax(quat.getAxis()); - - // float angle = quat.getAngle(); - /* - if (ax.isNull()) - { - if (int(angle*100.f) == int(NLMISC::Pi * 200.f)) - { - ax = CVector::J; - } - } - else - */ - if (ax.isNull() || ax == CVector::I) - { - ax = CVector::J; - } - else if (ax == -CVector::K) - { - ax = -CVector::J; - } - /* else if (ax.x < -0.9f && ax.y == 0.f && ax.z == 0.f) - { - ax = -CVector::J ; - } - */ - // ax.normalize(); - - eye -= ax * (dist+radius); - if (high_z) - eye.z += max_radius.z/1.0f; - Camera.lookAt(eye, center); - setupLight(eye, center - eye); - } - - bool CObjectViewerWidget::setupLight(const CVector &position, const CVector &direction) - { - if (!_Light) - _Light = ULight::createLight(); - if (!_Light) return false; - - // set mode of the light - _Light->setMode(ULight::DirectionalLight); - - // set position of the light - // Light->setupDirectional(settings.light_ambiant, settings.light_diffuse, settings.light_specular, settings.light_direction); - NLMISC::CRGBA light_ambiant = CRGBA(0,0,0); - NLMISC::CRGBA light_diffuse = CRGBA(255,255,255); - NLMISC::CRGBA light_specular = CRGBA(255,255,255); - NLMISC::CVector light_direction = CVector(0.25, 0.25, 0.25); - _Light->setupPointLight(light_ambiant, light_diffuse, light_specular, position, direction + light_direction); - - // set and enable the light - _Driver->setLight(0, *_Light); - _Driver->enableLight(0); - - return true; - } - -#if defined(NL_OS_WINDOWS) - - typedef bool (*winProc)(NL3D::IDriver *driver, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); - - bool CObjectViewerWidget::winEvent(MSG * message, long * result) - { - if (getDriver() && getDriver()->isActive()) - { - NL3D::IDriver *driver = dynamic_cast(getDriver())->getDriver(); - if (driver) - { - winProc proc = (winProc)driver->getWindowProc(); - return proc(driver, message->hwnd, message->message, message->wParam, message->lParam); - } - } - - return false; - } - -#elif defined(NL_OS_MAC) - - typedef bool (*cocoaProc)(NL3D::IDriver*, const void* e); - - bool CObjectViewerWidget::macEvent(EventHandlerCallRef caller, EventRef event) - { - if(caller) - nlerror("You are using QtCarbon! Only QtCocoa supported, please upgrade Qt"); - - if (getDriver() && getDriver()->isActive()) - { - NL3D::IDriver *driver = dynamic_cast(getDriver())->getDriver(); - if (driver) - { - cocoaProc proc = (cocoaProc)driver->getWindowProc(); - return proc(driver, event); - } - } - - return false; - } - -#elif defined(NL_OS_UNIX) - - typedef bool (*x11Proc)(NL3D::IDriver *drv, XEvent *e); - - bool CObjectViewerWidget::x11Event(XEvent *event) - { - if (getDriver() && getDriver()->isActive()) - { - NL3D::IDriver *driver = dynamic_cast(getDriver())->getDriver(); - if (driver) - { - x11Proc proc = (x11Proc)driver->getWindowProc(); - return proc(driver, event); - } - } - - return false; - } -#endif - -} /* namespace NLQT */ diff --git a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer_widget.h b/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer_widget.h deleted file mode 100644 index ab0cd320d..000000000 --- a/code/ryzom/tools/leveldesign/georges_editor_qt/src/object_viewer_widget.h +++ /dev/null @@ -1,211 +0,0 @@ -/* -Georges Editor Qt -Copyright (C) 2010 Adrian Jaekel - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef OBJECT_VIEWER_WIDGET_H -#define OBJECT_VIEWER_WIDGET_H - -// STL includes - -// Qt includes -#include -#include - -// NeL includes -#include -#include - -// Project includes -#include "entity.h" - -namespace NL3D -{ - class UDriver; - class UScene; - class ULight; - class UInstance; - class UCamera; - class USkeleton; - class UPlayListManager; - class U3dMouseListener; -} - -/** -namespace NLQT -@brief namespace NLQT -*/ -namespace NLQT -{ - class CObjectViewerWidget: public QWidget - { - Q_OBJECT - - public: - /// Default constructor. - CObjectViewerWidget(QWidget *parent = 0); - virtual ~CObjectViewerWidget(); - - /// Init a driver and create scene. - /// @param wnd - handle window. - /// @param w - width window. - /// @param h - height window. - void init(); - - /// Release class. - void release(); - - /// Update mouse and keyboard events. And update camera matrix. - void updateInput(); - - /// Render Driver (clear all buffers and set background color). - void renderDriver(); - - /// Render current scene. - void renderScene(); - - /// Render Debug 2D (stuff for dev). - void renderDebug2D(); - - /// Make a screenshot of the current scene and save. - void saveScreenshot(const std::string &nameFile, bool jpg, bool png, bool tga); - - /// Load a mesh or particle system and add to current scene. - /// @param meshFileName - name loading shape or ps file. - /// @param skelFileName - name loading skeletin file. - /// @return true if file have been loaded, false if file have not been loaded. - bool loadMesh (const std::string &meshFileName, const std::string &skelFileName); - - /// Reset current scene. - void resetScene(); - - /// Update the navigation camera. - /// @param deltaPsi - delta angle horizontal (radians). - /// @param deltaPhi - delta angle vertical (radians). - /// @param deltaDist - delta distance. - void updateCamera(float deltaPsi, float deltaPhi, float deltaDist); - - /// Set the background color. - /// @param backgroundColor - background color. - void setBackgroundColor(NLMISC::CRGBA backgroundColor); - - /// Set type driver. - /// @param Direct3D - type driver (true - Direct3D) or (false -OpenGL) - void setGraphicsDriver(bool Direct3D); - - /// Set size viewport for correct set perspective - /// @param w - width window. - /// @param h - height window. - void setSizeViewport(uint16 w, uint16 h); - - void setBloomEffect(bool enabled) { _BloomEffect = enabled; } - - /// Select instance from the scene - /// @param name - name instance, "" if no instance edited - void setCurrentObject(const std::string &name); - - /// Get current instance from the scene - /// @return name current instance, "" if no instance edited - const std::string& getCurrentObject() { return _CurrentInstance; } - - /// Get entity from the scene - /// @return ref Entity - CEntity& getEntity(const std::string &name); - - /// Get full list instances from the scene - /// @param listObj - ref of return list instances - void getListObjects(std::vector &listObj); - - /// Get value background color. - /// @return background color. - NLMISC::CRGBA getBackgroundColor() { return _BackgroundColor; } - - /// Get type driver. - /// @return true if have used Direct3D driver, false OpenGL driver. - inline bool getDirect3D() { return _Direct3D; } - - inline bool getBloomEffect() const { return _BloomEffect; } - - /// Get a pointer to the driver. - /// @return pointer to the driver. - inline NL3D::UDriver *getDriver() { return _Driver; } - - /// Get a pointer to the scene. - /// @return pointer to the scene. - inline NL3D::UScene *getScene() { return _Scene; } - - /// Get a manager of playlist - /// @return pointer to the UPlayListManager - inline NL3D::UPlayListManager *getPlayListManager() { return _PlayListManager; } - - void setCamera(NLMISC::CAABBox &bbox, NL3D::UTransform &entity, bool high_z); - bool setupLight(const NLMISC::CVector &position, const NLMISC::CVector &direction); - - virtual void setVisible(bool visible); - - protected: -#if defined(NL_OS_WINDOWS) - virtual bool winEvent(MSG * message, long * result); -#elif defined(NL_OS_MAC) - virtual bool macEvent(EventHandlerCallRef caller, EventRef event); -#elif defined(NL_OS_UNIX) - virtual bool x11Event(XEvent *event); -#endif - - private Q_SLOTS: - void updateRender(); - - private: - // render stuff - QTimer *_mainTimer; - bool _isGraphicsInitialized, _isGraphicsEnabled; - - void updateInitialization(bool visible); - - void deleteEntity (CEntity &entity); - - /// Delete all entities - void deleteEntities(); - - NLMISC::CRGBA _BackgroundColor; - - NL3D::UDriver *_Driver; - NL3D::UScene *_Scene; - NL3D::UPlayListManager *_PlayListManager; - NL3D::ULight *_Light; - NL3D::UCamera *_Camera; - NL3D::U3dMouseListener *_MouseListener; - - // The entities storage - CEntities _Entities; - - /// Camera parameters. - float _phi, _psi, _dist; - float _CameraFocal; - - bool _Direct3D; - bool _BloomEffect; - - std::string _CurrentInstance; - - // a temporary solution, and later remove - friend class CAnimationSetDialog; - - };/* class CObjectViewerWidget */ - -} /* namespace NLQT */ - -#endif // OBJECT_VIEWER_WIDGET_H