aboutsummaryrefslogtreecommitdiff
path: root/tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp')
-rw-r--r--tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp3144
1 files changed, 0 insertions, 3144 deletions
diff --git a/tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp b/tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp
deleted file mode 100644
index 3f97631..0000000
--- a/tools/ArtistTools/source/BlastPlugin/Parameters/ProjectParams.cpp
+++ /dev/null
@@ -1,3144 +0,0 @@
-// This code contains NVIDIA Confidential Information and is disclosed to you
-// under a form of NVIDIA software license agreement provided separately to you.
-//
-// Notice
-// NVIDIA Corporation and its licensors retain all intellectual property and
-// proprietary rights in and to this software and related documentation and
-// any modifications thereto. Any use, reproduction, disclosure, or
-// distribution of this software and related documentation without an express
-// license agreement from NVIDIA Corporation is strictly prohibited.
-//
-// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
-// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
-// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
-// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
-//
-// Information and code furnished is believed to be accurate and reliable.
-// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
-// information or for any infringement of patents or other rights of third parties that may
-// result from its use. No license is granted by implication or otherwise under any patent
-// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
-// This code supersedes and replaces all information previously supplied.
-// NVIDIA Corporation products are not authorized for use as critical
-// components in life support devices or systems without express written approval of
-// NVIDIA Corporation.
-//
-// Copyright (c) 2008-2013 NVIDIA Corporation. All rights reserved.
-
-#include "NvParameterized.h"
-#include "XmlSerializer.h"
-#include "NsFileBuffer.h"
-#include "NvTraits.h"
-#include "NsMemoryBuffer.h"
-
-#include "BlastProjectParameters.h"
-#include "SimpleScene.h"
-#include "ProjectParams.h"
-
-#include "NvErrorCallback.h"
-#include "NsGlobals.h"
-#include "NsVersionNumber.h"
-#include <QtXml\QtXml>
-#include <QtWidgets/QMessageBox>
-#include "AppMainWindow.h"
-#include "FoundationHolder.h"
-#include <limits>
-#include "BlastSceneTree.h"
-
-using namespace nvidia;
-using namespace nvidia::parameterized;
-using namespace nvidia::parameterized::BlastProjectParametersNS;
-
-struct ProjectParamsContext* g_projectParamsContext = nullptr;
-const char* USER_PRESET = "UserPreset.userPreset";
-const char* FRACTURE_PRESET = "FracturePreset.fracturePreset";
-const char* FILTER_PRESET = "FilterPreset.filterPreset";
-
-struct ProjectParamsContext
-{
- //NvFoundation* mFoundation;
- NvParameterized::Traits* mTraits;
- BlastProjectParametersFactory* mBlastProjectParametersFactory;
-};
-
-void freeString(NvParameterized::DummyStringStruct& str)
-{
- delete[] str.buf;
- str.buf = nullptr;
-}
-
-void freeBlast(BPPGraphicsMesh& data)
-{
- delete[] data.materialAssignments.buf;
- data.materialAssignments.buf = nullptr;
- data.materialAssignments.arraySizes[0] = 0;
-
- delete[] data.positions.buf;
- data.positions.buf = nullptr;
- data.positions.arraySizes[0] = 0;
-
- delete[] data.normals.buf;
- data.normals.buf = nullptr;
- data.normals.arraySizes[0] = 0;
-
- delete[] data.tangents.buf;
- data.tangents.buf = nullptr;
- data.tangents.arraySizes[0] = 0;
-
- delete[] data.texcoords.buf;
- data.texcoords.buf = nullptr;
- data.texcoords.arraySizes[0] = 0;
-
- delete data.positions.buf;
- data.positions.buf = nullptr;
- data.positions.arraySizes[0] = 0;
-
- delete[] data.positionIndexes.buf;
- data.positionIndexes.buf = nullptr;
- data.positionIndexes.arraySizes[0] = 0;
-
- delete[] data.normalIndexes.buf;
- data.normalIndexes.buf = nullptr;
- data.normalIndexes.arraySizes[0] = 0;
-
- delete[] data.tangentIndexes.buf;
- data.tangentIndexes.buf = nullptr;
- data.tangentIndexes.arraySizes[0] = 0;
-
- delete[] data.texcoordIndexes.buf;
- data.texcoordIndexes.buf = nullptr;
- data.texcoordIndexes.arraySizes[0] = 0;
-
- delete[] data.materialIDs.buf;
- data.materialIDs.buf = nullptr;
- data.materialIDs.arraySizes[0] = 0;
-}
-
-void freeBlast(BPPChunk& data)
-{
- freeString(data.name);
- freeBlast(data.graphicsMesh);
-}
-
-void freeBlast(BPPBond& data)
-{
- freeString(data.name);
-}
-
-void freeBlast(BPPAsset& data)
-{
- freeString(data.name);
- freeString(data.fbx);
- freeString(data.obj);
- freeString(data.llasset);
- freeString(data.tkasset);
- freeString(data.bpxa);
-}
-
-void freeBlast(BPPAssetInstance& data)
-{
- freeString(data.name);
- freeString(data.exMaterial);
- freeString(data.inMaterial);
-}
-
-void freeBlast(BPPBlast& data)
-{
- freeString(data.fileReferences.fbxSourceAsset);
-
- freeBlast(data.blastAssets);
- freeBlast(data.blastAssetInstances);
- freeBlast(data.chunks);
- freeBlast(data.bonds);
-}
-
-void freeBlast(BPPGraphicsMaterial& data)
-{
- freeString(data.name);
- freeString(data.diffuseTextureFilePath);
- freeString(data.specularTextureFilePath);
- freeString(data.normalTextureFilePath);
-}
-
-void freeBlast(BPPDefaultDamage& data)
-{
- delete[] data.damageStructs.buf;
- data.damageStructs.buf = nullptr;
- data.damageStructs.arraySizes[0] = 0;
-}
-
-void freeBlast(BPPStringArray& data)
-{
- for (int i = 0; i < data.arraySizes[0]; ++i)
- {
- freeString(data.buf[i]);
- }
-
- delete[] data.buf;
- data.buf = nullptr;
- data.arraySizes[0] = 0;
-}
-
-void freeBlast(BPPChunkArray& data)
-{
- for (int i = 0; i < data.arraySizes[0]; ++i)
- {
- freeBlast(data.buf[i]);
- }
-
- delete[] data.buf;
- data.buf = nullptr;
- data.arraySizes[0] = 0;
-}
-
-void freeBlast(BPPBondArray& data)
-{
- for (int i = 0; i < data.arraySizes[0]; ++i)
- {
- freeBlast(data.buf[i]);
- }
-
- delete[] data.buf;
- data.buf = nullptr;
- data.arraySizes[0] = 0;
-}
-
-void freeBlast(BPPAssetArray& data)
-{
- for (int i = 0; i < data.arraySizes[0]; ++i)
- {
- freeBlast(data.buf[i]);
- }
-
- delete[] data.buf;
- data.buf = nullptr;
- data.arraySizes[0] = 0;
-}
-
-void freeBlast(BPPAssetInstanceArray& data)
-{
- for (int i = 0; i < data.arraySizes[0]; ++i)
- {
- freeBlast(data.buf[i]);
- }
-
- delete[] data.buf;
- data.buf = nullptr;
- data.arraySizes[0] = 0;
-}
-
-void freeBlast(BPPGraphicsMaterialArray& data)
-{
- for (int i = 0; i < data.arraySizes[0]; ++i)
- {
- freeBlast(data.buf[i]);
- }
-
- delete[] data.buf;
- data.buf = nullptr;
- data.arraySizes[0] = 0;
-}
-
-void copy(NvParameterized::DummyStringStruct& dest, const char* source)
-{
- delete[] dest.buf;
- dest.buf = nullptr;
- //dest.isAllocated = false;
-
- if (source != nullptr)
- {
- dest.buf = new char[strlen(source) + 1];
- strcpy(const_cast<char*>(dest.buf), source);
- //dest.isAllocated = true;
- }
-}
-
-void copy(NvParameterized::DummyStringStruct& dest, NvParameterized::DummyStringStruct& source)
-{
- copy(dest, source.buf);
-}
-
-bool isItemExist(BPPStringArray& dest, const char* item)
-{
- if (nullptr == item || 0 == strlen(item))
- {
- return false;
- }
-
- for (int i = 0; i < dest.arraySizes[0]; ++i)
- {
- NvParameterized::DummyStringStruct& curItem = dest.buf[i];
-
- if (nvidia::shdfnd::strcmp(curItem.buf, item) == 0)
- return true;
- }
-
- return false;
-}
-
-void addItem(BPPStringArray& dest, const char* item)
-{
- if (nullptr == item || 0 == strlen(item))
- {
- return;
- }
-
- NvParameterized::DummyStringStruct* oldBuf = dest.buf;
- dest.buf = new NvParameterized::DummyStringStruct[dest.arraySizes[0] + 1];
- int i = 0;
- for (; i < dest.arraySizes[0]; ++i)
- {
- copy(dest.buf[i], oldBuf[i]);
- }
-
- NvParameterized::DummyStringStruct& newItem = dest.buf[i];
- copy(newItem, item);
- dest.arraySizes[0] += 1;
-
- delete[] oldBuf;
-}
-
-void removeItem(BPPStringArray& dest, const char* item)
-{
- if (!isItemExist(dest, item))
- {
- return;
- }
-
- NvParameterized::DummyStringStruct* oldBuf = dest.buf;
- dest.buf = new NvParameterized::DummyStringStruct[dest.arraySizes[0] - 1];
-
- int index = 0;
- for (int i = 0; i < dest.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(oldBuf[i].buf, item) != 0)
- {
- NvParameterized::DummyStringStruct& newItem = dest.buf[index++];
- NvParameterized::DummyStringStruct& oldItem = oldBuf[i];
- copy(newItem, oldItem);
- }
- }
- dest.arraySizes[0] -= 1;
- delete[] oldBuf;
-}
-
-void copy(BPPStringArray& dest, BPPStringArray& source)
-{
- {
- for (int i = 0; i < dest.arraySizes[0]; ++i)
- {
- delete[] dest.buf[i].buf;
- }
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
- }
-
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new NvParameterized::DummyStringStruct[source.arraySizes[0]];
-
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- NvParameterized::DummyStringStruct& destItem = dest.buf[i];
- NvParameterized::DummyStringStruct& sourceItem = source.buf[i];
-
- destItem.buf = nullptr;
-
- copy(destItem, sourceItem);
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPGraphicsMaterialArray& dest, BPPGraphicsMaterialArray& source)
-{
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new BPPGraphicsMaterial[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- BPPGraphicsMaterial& destItem = dest.buf[i];
- BPPGraphicsMaterial& sourceItem = source.buf[i];
-
- init(destItem);
-
- copy(destItem, sourceItem);
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPMaterialAssignmentsArray& dest, BPPMaterialAssignmentsArray& source)
-{
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new BPPMaterialAssignments[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- BPPMaterialAssignments& destItem = dest.buf[i];
- BPPMaterialAssignments& sourceItem = source.buf[i];
-
- copy(destItem, sourceItem);
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPBookmarkArray& dest, BPPBookmarkArray& source)
-{
- {
- int count = dest.arraySizes[0];
- for (int i = 0; i < count; ++i)
- {
- delete[] dest.buf[i].name.buf;
- }
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
- }
-
- {
- int count = source.arraySizes[0];
- dest.arraySizes[0] = count;
- if (count > 0)
- {
- dest.buf = new BPPCameraBookmark[count];
- for (int i = 0; i < count; ++i)
- {
- BPPCameraBookmark& destItem = dest.buf[i];
- BPPCameraBookmark& sourceItem = source.buf[i];
-
- destItem.name.buf = nullptr;
-
- copy(destItem.name, sourceItem.name);
- destItem.camera = sourceItem.camera;
- }
- }
- }
-}
-
-void copy(BPPLightArray& dest, BPPLightArray& source)
-{
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new BPPLight[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- BPPLight& destItem = dest.buf[i];
- BPPLight& sourceItem = source.buf[i];
-
- destItem.name.buf = nullptr;
-
- copy(destItem.name, sourceItem.name);
- copy(destItem, sourceItem);
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPChunkArray& dest, BPPChunkArray& source)
-{
- freeBlast(dest);
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new BPPChunk[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- BPPChunk& destItem = dest.buf[i];
- BPPChunk& sourceItem = source.buf[i];
-
- init(destItem);
-
- copy(destItem, sourceItem);
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPBondArray& dest, BPPBondArray& source)
-{
- freeBlast(dest);
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new BPPBond[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- BPPBond& destItem = dest.buf[i];
- BPPBond& sourceItem = source.buf[i];
-
- init(destItem);
-
- copy(destItem, sourceItem);
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPAssetArray& dest, BPPAssetArray& source)
-{
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new BPPAsset[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- BPPAsset& destItem = dest.buf[i];
- BPPAsset& sourceItem = source.buf[i];
-
- init(destItem);
-
- copy(destItem, sourceItem);
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPAssetInstanceArray& dest, BPPAssetInstanceArray& source)
-{
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new BPPAssetInstance[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- BPPAssetInstance& destItem = dest.buf[i];
- BPPAssetInstance& sourceItem = source.buf[i];
-
- init(destItem);
-
- copy(destItem, sourceItem);
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPI32Array& dest, BPPI32Array& source)
-{
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new int32_t[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- int32_t& destItem = dest.buf[i];
- int32_t& sourceItem = source.buf[i];
-
- destItem = sourceItem;
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPVEC3Array& dest, BPPVEC3Array& source)
-{
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new nvidia::NvVec3[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- nvidia::NvVec3& destItem = dest.buf[i];
- nvidia::NvVec3& sourceItem = source.buf[i];
-
- destItem = sourceItem;
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPVEC2Array& dest, BPPVEC2Array& source)
-{
- delete[] dest.buf;
- dest.buf = nullptr;
- dest.arraySizes[0] = 0;
-
- if (source.arraySizes[0] > 0)
- {
- dest.buf = new nvidia::NvVec2[source.arraySizes[0]];
- for (int i = 0; i < source.arraySizes[0]; ++i)
- {
- nvidia::NvVec2& destItem = dest.buf[i];
- nvidia::NvVec2& sourceItem = source.buf[i];
-
- destItem = sourceItem;
- }
- dest.arraySizes[0] = source.arraySizes[0];
- }
-}
-
-void copy(BPPLight& dest, BPPLight& source)
-{
- copy(dest.name, source.name);
- dest.enable = source.enable;
- dest.useShadows = source.useShadows;
- dest.lockToRoot = source.lockToRoot;
- dest.visualize = source.visualize;
- dest.type = source.type;
- dest.shadowMapResolution = source.shadowMapResolution;
- dest.color = source.color;
- dest.diffuseColor = source.diffuseColor;
- dest.ambientColor = source.ambientColor;
- dest.specularColor = source.specularColor;
- dest.intensity = source.intensity;
- dest.distance = source.distance;
- dest.spotFalloffStart = source.spotFalloffStart;
- dest.spotFalloffEnd = source.spotFalloffEnd;
- dest.lightAxisX = source.lightAxisX;
- dest.lightAxisY = source.lightAxisY;
- dest.lightAxisZ = source.lightAxisZ;
- dest.lightPos = source.lightPos;
-}
-
-void copy(BPPGraphicsMaterial& dest, BPPGraphicsMaterial& source)
-{
- copy(dest.name, source.name);
- dest.useTextures = source.useTextures;
- copy(dest.diffuseTextureFilePath, source.diffuseTextureFilePath);
- copy(dest.specularTextureFilePath, source.specularTextureFilePath);
- copy(dest.normalTextureFilePath, source.normalTextureFilePath);
- dest.diffuseColor = source.diffuseColor;
- dest.specularColor = source.specularColor;
- dest.specularShininess = source.specularShininess;
-}
-
-void copy(BPPGraphicsMesh& dest, BPPGraphicsMesh& source)
-{
- copy(dest.materialAssignments, source.materialAssignments);
- copy(dest.positions, source.positions);
- copy(dest.normals, source.normals);
- copy(dest.tangents, source.tangents);
- copy(dest.texcoords, source.texcoords);
- dest.vertextCountInFace = source.vertextCountInFace;
- copy(dest.positionIndexes, source.positionIndexes);
- copy(dest.normalIndexes, source.normalIndexes);
- copy(dest.tangentIndexes, source.tangentIndexes);
- copy(dest.texcoordIndexes, source.texcoordIndexes);
- copy(dest.materialIDs, source.materialIDs);
-}
-
-void copy(BPPMaterialAssignments& dest, BPPMaterialAssignments& source)
-{
- dest.libraryMaterialID = source.libraryMaterialID;
- dest.faceMaterialID = source.faceMaterialID;
-}
-
-void copy(BPPSupportStructure& dest, BPPSupportStructure& source)
-{
- copy(dest.healthMask, source.healthMask);
- dest.bondStrength = source.bondStrength;
- dest.enableJoint = source.enableJoint;
-}
-
-void copy(BPPChunk& dest, BPPChunk& source)
-{
- dest.ID = source.ID;
- dest.parentID = source.parentID;
- copy(dest.name, source.name);
- dest.asset = source.asset;
- dest.visible = source.visible;
- dest.support = source.support;
- dest.staticFlag = source.staticFlag;
- copy(dest.graphicsMesh, source.graphicsMesh);
-}
-
-void copy(BPPBond& dest, BPPBond& source)
-{
- copy(dest.name, source.name);
- dest.asset = source.asset;
- dest.visible = source.visible;
- dest.fromChunk = source.fromChunk;
- dest.toChunk = source.toChunk;
- copy(dest.support, source.support);
-}
-
-void copy(BPPRenderer& dest, BPPRenderer& source)
-{
- dest.renderFps = source.renderFps;
- dest.frameStartTime = source.frameStartTime;
- dest.frameEndTime = source.frameEndTime;
- dest.animationFps = source.animationFps;
- dest.animate = source.animate;
- dest.simulate = source.simulate;
- dest.resetSimulationOnLoop = source.resetSimulationOnLoop;
- dest.simulationFps = source.simulationFps;
- dest.showGraphicsMesh = source.showGraphicsMesh;
- dest.visualizeGrowthMesh = source.visualizeGrowthMesh;
- dest.visualizeLight = source.visualizeLight;
- dest.visualizeWind = source.visualizeWind;
- dest.showStatistics = source.showStatistics;
- dest.renderStyle = source.renderStyle;
- dest.colorizeOption = source.colorizeOption;
- dest.showWireframe = source.showWireframe;
- dest.lockRootBone = source.lockRootBone;
- dest.controlTextureOption = source.controlTextureOption;
- dest.useLighting = source.useLighting;
- dest.showSkinnedMeshOnly = source.showSkinnedMeshOnly;
- dest.lightDir = source.lightDir;
- dest.ambientColor = source.ambientColor;
- dest.windDir = source.windDir;
- dest.windStrength = source.windStrength;
- dest.lightIntensity = source.lightIntensity;
- dest.gravityDir = source.gravityDir;
- dest.gravityScale = source.gravityScale;
-
- copy(dest.textureFilePath, source.textureFilePath);
- copy(dest.lights, source.lights);
-}
-
-void copy(BPPStressSolver& dest, BPPStressSolver& source)
-{
- dest.hardness = source.hardness;
- dest.linearFactor = source.linearFactor;
- dest.angularFactor = source.angularFactor;
- dest.bondIterationsPerFrame = source.bondIterationsPerFrame;
- dest.graphReductionLevel = source.graphReductionLevel;
-}
-
-void copy(BPPAsset& dest, BPPAsset& source)
-{
- dest.ID = source.ID;
- copy(dest.name, source.name);
- dest.visible = source.visible;
- dest.stressSolver = source.stressSolver;
- copy(dest.activeUserPreset, source.activeUserPreset);
- copy(dest.fbx, source.fbx);
- copy(dest.obj, source.obj);
- copy(dest.llasset, source.llasset);
- copy(dest.tkasset, source.tkasset);
- copy(dest.bpxa, source.bpxa);
- dest.exportFBX = source.exportFBX;
- dest.embedFBXCollision = source.embedFBXCollision;
- dest.exportOBJ = source.exportOBJ;
- dest.exportLLAsset = source.exportLLAsset;
- dest.exportTKAsset = source.exportTKAsset;
- dest.exportBPXA = source.exportBPXA;
-}
-
-void copy(BPPAssetInstance& dest, BPPAssetInstance& source)
-{
- copy(dest.name, source.name);
- dest.visible = source.visible;
- dest.asset = source.asset;
- dest.transform = source.transform;
- copy(dest.exMaterial, source.exMaterial);
- copy(dest.inMaterial, source.inMaterial);
-}
-
-void copy(BPPBlast& dest, BPPBlast& source)
-{
- copy(dest.fileReferences.fbxSourceAsset, source.fileReferences.fbxSourceAsset);
-
- copy(dest.blastAssets, source.blastAssets);
- copy(dest.blastAssetInstances, source.blastAssetInstances);
- copy(dest.chunks, source.chunks);
- copy(dest.bonds, source.bonds);
- copy(dest.healthMask, source.healthMask);
-}
-
-void copy(BPPFractureGeneral& dest, BPPFractureGeneral& source)
-{
- copy(dest.fracturePreset, source.fracturePreset);
- dest.fractureType = source.fractureType;
- dest.applyMaterial = source.applyMaterial;
- dest.autoSelectNewChunks = source.autoSelectNewChunks;
- dest.selectionDepthTest = source.selectionDepthTest;
-}
-
-void copy(BPPVoronoi& dest, BPPVoronoi& source)
-{
- dest.siteGeneration = source.siteGeneration;
- dest.numSites = source.numSites;
- dest.numberOfClusters = source.numberOfClusters;
- dest.sitesPerCluster = source.sitesPerCluster;
- dest.clusterRadius = source.clusterRadius;
-}
-
-void copy(BPPFracture& dest, BPPFracture& source)
-{
- copy(dest.general, source.general);
- dest.visualization = source.visualization;
- copy(dest.voronoi, source.voronoi);
- dest.slice = source.slice;
-}
-
-void copy(BPPDefaultDamage& dest, BPPDefaultDamage& source)
-{
- dest.damageAmount = source.damageAmount;
- dest.explosiveImpulse = source.explosiveImpulse;
- dest.stressDamageForce = source.stressDamageForce;
- dest.damageProfile = source.damageProfile;
-
- int count = source.damageStructs.arraySizes[0];
-
- if(dest.damageStructs.buf != nullptr && dest.damageStructs.arraySizes[0] != count)
- {
- delete[] dest.damageStructs.buf;
- dest.damageStructs.buf = nullptr;
- dest.damageStructs.arraySizes[0] = 0;
- }
-
- if (count == 0)
- return;
-
- if (dest.damageStructs.buf == nullptr)
- {
- dest.damageStructs.buf = new BPPDamageStruct[count];
- dest.damageStructs.arraySizes[0] = count;
- }
-
- for (int i = 0; i < count; ++i)
- {
- BPPDamageStruct& destItem = dest.damageStructs.buf[i];
- BPPDamageStruct& sourceItem = source.damageStructs.buf[i];
-
- destItem.damageRadius = sourceItem.damageRadius;
- destItem.continuously = sourceItem.continuously;
- }
-}
-
-void copy(BPPFilter& dest, BPPFilter& source)
-{
- copy(dest.activeFilter, source.activeFilter);
- copy(dest.filterRestrictions, source.filterRestrictions);
-}
-
-void copy(BPParams& dest, BPParams& source)
-{
- dest.camera = source.camera;
- copy(dest.cameraBookmarks, source.cameraBookmarks);
- dest.lightCamera = source.camera;
- dest.windCamera = source.camera;
- copy(dest.graphicsMaterials, source.graphicsMaterials);
- dest.scene = source.scene;
- copy(dest.renderer, source.renderer);
- copy(dest.blast, source.blast);
- copy(dest.fracture, source.fracture);
- copy(dest.defaultDamage, source.defaultDamage);
- copy(dest.filter, source.filter);
-}
-
-void merge(BPPAssetArray& dest, BPPAssetArray& source)
-{
- if (source.arraySizes[0] > 0)
- {
- BPPAsset* oriDestArray = dest.buf;
- int oriCount = dest.arraySizes[0];
- int srcCount = source.arraySizes[0];
- dest.buf = new BPPAsset[oriCount + srcCount];
- int i = 0;
-// std::map<BPPAsset*, BPPAsset*> changeMap;
- for (; i < oriCount; ++i)
- {
- BPPAsset& destItem = dest.buf[i];
- BPPAsset& oriItem = oriDestArray[i];
-
- init(destItem);
- copy(destItem, oriItem);
-// changeMap[&oriItem] = &destItem;
- }
-// BlastTreeData::ins().refreshProjectDataToNodeMap(changeMap);
- for (int j = 0; j < srcCount; ++j, ++i)
- {
- BPPAsset& destItem = dest.buf[i];
- BPPAsset& sourceItem = source.buf[j];
-
- init(destItem);
- copy(destItem, sourceItem);
- }
- for (int m = 0; m < oriCount; ++m)
- {
- freeBlast(oriDestArray[m]);
- }
- delete[] oriDestArray;
- dest.arraySizes[0] = oriCount + srcCount;
- }
-}
-
-void merge(BPPAssetInstanceArray& dest, BPPAssetInstanceArray& source)
-{
- if (source.arraySizes[0] > 0)
- {
- BPPAssetInstance* oriDestArray = dest.buf;
- int oriCount = dest.arraySizes[0];
- int srcCount = source.arraySizes[0];
- dest.buf = new BPPAssetInstance[oriCount + srcCount];
- int i = 0;
-// std::map<BPPAssetInstance*, BPPAssetInstance*> changeMap;
- for (; i < oriCount; ++i)
- {
- BPPAssetInstance& destItem = dest.buf[i];
- BPPAssetInstance& oriItem = oriDestArray[i];
-
- init(destItem);
- copy(destItem, oriItem);
-// changeMap[&oriItem] = &destItem;
- }
-// BlastTreeData::ins().refreshProjectDataToNodeMap(changeMap);
- for (int j = 0; j < srcCount; ++j, ++i)
- {
- BPPAssetInstance& destItem = dest.buf[i];
- BPPAssetInstance& sourceItem = source.buf[j];
-
- init(destItem);
- copy(destItem, sourceItem);
- }
- for (int m = 0; m < oriCount; ++m)
- {
- freeBlast(oriDestArray[m]);
- }
- delete[] oriDestArray;
- dest.arraySizes[0] = oriCount + srcCount;
- }
-}
-
-void merge(BPPChunkArray& dest, BPPChunkArray& source)
-{
- if (source.arraySizes[0] > 0)
- {
- BPPChunk* oriDestArray = dest.buf;
- int oriCount = dest.arraySizes[0];
- int srcCount = source.arraySizes[0];
- dest.buf = new BPPChunk[oriCount + srcCount];
- int i = 0;
- for (; i < oriCount; ++i)
- {
- BPPChunk& destItem = dest.buf[i];
- BPPChunk& oriItem = oriDestArray[i];
-
- init(destItem);
- copy(destItem, oriItem);
- }
- for (int j = 0; j < srcCount; ++j, ++i)
- {
- BPPChunk& destItem = dest.buf[i];
- BPPChunk& sourceItem = source.buf[j];
-
- init(destItem);
- copy(destItem, sourceItem);
- }
- for (int m = 0; m < oriCount; ++m)
- {
- freeBlast(oriDestArray[m]);
- }
- delete[] oriDestArray;
- dest.arraySizes[0] = oriCount + srcCount;
- }
-}
-
-void merge(BPPBondArray& dest, BPPBondArray& source)
-{
- if (source.arraySizes[0] > 0)
- {
- BPPBond* oriDestArray = dest.buf;
- int oriCount = dest.arraySizes[0];
- int srcCount = source.arraySizes[0];
- dest.buf = new BPPBond[oriCount + srcCount];
- int i = 0;
- for (; i < oriCount; ++i)
- {
- BPPBond& destItem = dest.buf[i];
- BPPBond& oriItem = oriDestArray[i];
-
- init(destItem);
- copy(destItem, oriItem);
- }
- for (int j = 0; j < srcCount; ++j, ++i)
- {
- BPPBond& destItem = dest.buf[i];
- BPPBond& sourceItem = source.buf[j];
-
- init(destItem);
- copy(destItem, sourceItem);
- }
- for (int m = 0; m < oriCount; ++m)
- {
- freeBlast(oriDestArray[m]);
- }
- delete[] oriDestArray;
- dest.arraySizes[0] = oriCount + srcCount;
- }
-}
-
-/*
-void apart(BPPAssetArray& dest, BPPAssetArray& source)
-{
- if (source.arraySizes[0] == 0)
- return;
-
- int destCount = dest.arraySizes[0];
- int srcCount = source.arraySizes[0];
- std::vector<int> indexes;
- for (int i = 0; i < destCount; ++i)
- {
- bool find = false;
- for (int j = 0; j < srcCount; ++j)
- {
- if (dest.buf[i].ID == source.buf[j].ID)
- {
- find = true;
- break;
- }
- }
-
- if (!find)
- {
- indexes.push_back(i);
- }
- }
-
- int newSize = indexes.size();
- BPPAsset* newArray = nullptr;
- if (newSize > 0)
- {
- newArray = new BPPAsset[newSize];
- std::map<BPPAsset*, BPPAsset*> changeMap;
- for (int n = 0; n < newSize; ++n)
- {
- BPPAsset& newItem = newArray[n];
- BPPAsset& oriItem = dest.buf[indexes[n]];
- init(newItem);
- copy(newItem, oriItem);
- changeMap[&oriItem] = &newItem;
- }
- BlastTreeData::ins().refreshProjectDataToNodeMap(changeMap);
- }
-
- freeBlast(dest);
- dest.buf = newArray;
- dest.arraySizes[0] = newSize;
-}
-
-void apart(BPPAssetInstanceArray& dest, BPPAssetInstanceArray& source)
-{
- if (source.arraySizes[0] == 0)
- return;
-
- int destCount = dest.arraySizes[0];
- int srcCount = source.arraySizes[0];
- std::vector<int> indexes;
- for (int i = 0; i < destCount; ++i)
- {
- bool find = false;
- for (int j = 0; j < srcCount; ++j)
- {
- if (::strcmp(dest.buf[i].name.buf, source.buf[j].name.buf) == 0
- && dest.buf[i].asset == source.buf[j].asset)
- {
- find = true;
- break;
- }
- }
-
- if (!find)
- {
- indexes.push_back(i);
- }
- }
-
- int newSize = indexes.size();
- BPPAssetInstance* newArray = nullptr;
- if (newSize > 0)
- {
- newArray = new BPPAssetInstance[newSize];
- std::map<BPPAssetInstance*, BPPAssetInstance*> changeMap;
- for (int n = 0; n < newSize; ++n)
- {
- BPPAssetInstance& newItem = newArray[n];
- BPPAssetInstance& oriItem = dest.buf[indexes[n]];
- init(newItem);
- copy(newItem, oriItem);
- changeMap[&oriItem] = &newItem;
- }
- BlastTreeData::ins().refreshProjectDataToNodeMap(changeMap);
- }
-
- freeBlast(dest);
- dest.buf = newArray;
- dest.arraySizes[0] = newSize;
-}
-
-void apart(BPPChunkArray& dest, BPPChunkArray& source)
-{
- if (source.arraySizes[0] == 0)
- return;
-
- int destCount = dest.arraySizes[0];
- int srcCount = source.arraySizes[0];
- std::vector<int> indexes;
- for (int i = 0; i < destCount; ++i)
- {
- bool find = false;
- for (int j = 0; j < srcCount; ++j)
- {
- if (::strcmp(dest.buf[i].name.buf, source.buf[j].name.buf) == 0
- && dest.buf[i].asset == source.buf[j].asset)
- {
- find = true;
- break;
- }
- }
-
- if (!find)
- {
- indexes.push_back(i);
- }
- }
-
- int newSize = indexes.size();
- BPPChunk* newArray = nullptr;
- if (newSize > 0)
- {
- newArray = new BPPChunk[newSize];
-
- for (int n = 0; n < newSize; ++n)
- {
- BPPChunk& newItem = newArray[n];
- init(newItem);
- copy(newItem, dest.buf[indexes[n]]);
- }
- }
-
- freeBlast(dest);
- dest.buf = newArray;
- dest.arraySizes[0] = newSize;
-}
-
-void apart(BPPBondArray& dest, BPPBondArray& source)
-{
- if (source.arraySizes[0] == 0)
- return;
-
- int destCount = dest.arraySizes[0];
- int srcCount = source.arraySizes[0];
- std::vector<int> indexes;
- for (int i = 0; i < destCount; ++i)
- {
- bool find = false;
- for (int j = 0; j < srcCount; ++j)
- {
- if (::strcmp(dest.buf[i].name.buf, source.buf[j].name.buf) == 0
- && dest.buf[i].asset == source.buf[j].asset)
- {
- find = true;
- break;
- }
- }
-
- if (!find)
- {
- indexes.push_back(i);
- }
- }
-
- int newSize = indexes.size();
- BPPBond* newArray = nullptr;
- if (newSize > 0)
- {
- newArray = new BPPBond[newSize];
-
- for (int n = 0; n < newSize; ++n)
- {
- BPPBond& newItem = newArray[n];
- init(newItem);
- copy(newItem, dest.buf[indexes[n]]);
- }
- }
-
- freeBlast(dest);
- dest.buf = newArray;
- dest.arraySizes[0] = newSize;
-}
-
-*/
-void apart(BPPAssetArray& dest, int32_t assetId)
-{
- if (assetId < 0)
- {
- return;
- }
-
- int destCount = dest.arraySizes[0];
- std::vector<int> indexes;
- for (int i = 0; i < destCount; ++i)
- {
- if (dest.buf[i].ID == assetId)
- {
- continue;
- }
-
- indexes.push_back(i);
- }
-
- int newSize = indexes.size();
- BPPAsset* newArray = nullptr;
- if (newSize > 0)
- {
- newArray = new BPPAsset[newSize];
-// std::map<BPPAsset*, BPPAsset*> changeMap;
- for (int n = 0; n < newSize; ++n)
- {
- BPPAsset& newItem = newArray[n];
- BPPAsset& oriItem = dest.buf[indexes[n]];
- init(newItem);
- copy(newItem, oriItem);
-// changeMap[&oriItem] = &newItem;
- }
-// BlastTreeData::ins().refreshProjectDataToNodeMap(changeMap);
- }
-
- freeBlast(dest);
- dest.buf = newArray;
- dest.arraySizes[0] = newSize;
-}
-
-void apart(BPPAssetInstanceArray& dest, int32_t assetId)
-{
- if (assetId < 0)
- {
- return;
- }
-
- int destCount = dest.arraySizes[0];
- std::vector<int> indexes;
- for (int i = 0; i < destCount; ++i)
- {
- if (dest.buf[i].asset == assetId)
- {
- continue;
- }
-
- indexes.push_back(i);
- }
-
- int newSize = indexes.size();
- BPPAssetInstance* newArray = nullptr;
- if (newSize > 0)
- {
- newArray = new BPPAssetInstance[newSize];
-// std::map<BPPAssetInstance*, BPPAssetInstance*> changeMap;
- for (int n = 0; n < newSize; ++n)
- {
- BPPAssetInstance& newItem = newArray[n];
- BPPAssetInstance& oriItem = dest.buf[indexes[n]];
- init(newItem);
- copy(newItem, oriItem);
-// changeMap[&oriItem] = &newItem;
- }
-// BlastTreeData::ins().refreshProjectDataToNodeMap(changeMap);
- }
-
- freeBlast(dest);
- dest.buf = newArray;
- dest.arraySizes[0] = newSize;
-}
-
-void apart(BPPAssetInstanceArray& dest, int32_t assetId, const char* instanceName)
-{
- if (assetId < 0 || instanceName == nullptr)
- {
- return;
- }
-
- int destCount = dest.arraySizes[0];
- std::vector<int> indexes;
- for (int i = 0; i < destCount; ++i)
- {
- if (dest.buf[i].asset == assetId &&
- ::strcmp(dest.buf[i].name.buf, instanceName) == 0)
- {
- continue;
- }
-
- indexes.push_back(i);
- }
-
- int newSize = indexes.size();
- BPPAssetInstance* newArray = nullptr;
- if (newSize > 0)
- {
- newArray = new BPPAssetInstance[newSize];
-// std::map<BPPAssetInstance*, BPPAssetInstance*> changeMap;
- for (int n = 0; n < newSize; ++n)
- {
- BPPAssetInstance& newItem = newArray[n];
- BPPAssetInstance& oriItem = dest.buf[indexes[n]];
- init(newItem);
- copy(newItem, oriItem);
-// changeMap[&oriItem] = &newItem;
- }
-// BlastTreeData::ins().refreshProjectDataToNodeMap(changeMap);
- }
-
- freeBlast(dest);
- dest.buf = newArray;
- dest.arraySizes[0] = newSize;
-}
-
-void apart(BPPChunkArray& dest, int32_t assetId)
-{
- if (assetId < 0)
- {
- return;
- }
-
- int destCount = dest.arraySizes[0];
- std::vector<int> indexes;
- for (int i = 0; i < destCount; ++i)
- {
- if (dest.buf[i].asset == assetId)
- {
- continue;
- }
-
- indexes.push_back(i);
- }
-
- int newSize = indexes.size();
- BPPChunk* newArray = nullptr;
- if (newSize > 0)
- {
- newArray = new BPPChunk[newSize];
-// std::map<BPPChunk*, BPPChunk*> changeMap;
- for (int n = 0; n < newSize; ++n)
- {
- BPPChunk& newItem = newArray[n];
- BPPChunk& oriItem = dest.buf[indexes[n]];
- init(newItem);
- copy(newItem, oriItem);
-// changeMap[&oriItem] = &newItem;
- }
-// BlastTreeData::ins().refreshProjectDataToNodeMap(changeMap);
- }
-
- freeBlast(dest);
- dest.buf = newArray;
- dest.arraySizes[0] = newSize;
-}
-
-void apart(BPPBondArray& dest, int32_t assetId)
-{
- if (assetId < 0)
- {
- return;
- }
-
- int destCount = dest.arraySizes[0];
- std::vector<int> indexes;
- for (int i = 0; i < destCount; ++i)
- {
- if (dest.buf[i].asset == assetId)
- {
- continue;
- }
-
- indexes.push_back(i);
- }
-
- int newSize = indexes.size();
- BPPBond* newArray = nullptr;
- if (newSize > 0)
- {
- newArray = new BPPBond[newSize];
-// std::map<BPPBond*, BPPBond*> changeMap;
- for (int n = 0; n < newSize; ++n)
- {
- BPPBond& newItem = newArray[n];
- BPPBond& oriItem = dest.buf[indexes[n]];
- init(newItem);
- copy(newItem, oriItem);
-// changeMap[&oriItem] = &newItem;
- }
-// BlastTreeData::ins().refreshProjectDataToNodeMap(changeMap);
- }
-
- freeBlast(dest);
- dest.buf = newArray;
- dest.arraySizes[0] = newSize;
-}
-
-void init(BPPStressSolver& param)
-{
- param.hardness = 1000.0f;
- param.linearFactor = 0.25f;
- param.angularFactor = 0.75f;
- param.bondIterationsPerFrame = 18000;
- param.graphReductionLevel = 3;
-}
-
-void init(BPPGraphicsMaterial& param)
-{
- param.ID = -1;
- param.name.buf = nullptr;
- param.useTextures = false;
- param.diffuseTextureFilePath.buf = nullptr;
- param.specularTextureFilePath.buf = nullptr;
- param.normalTextureFilePath.buf = nullptr;
- param.specularShininess = 20.0;
-}
-
-void init(BPPGraphicsMesh& param)
-{
- param.materialAssignments.buf = 0;
- param.materialAssignments.arraySizes[0];
-
- param.positions.buf = nullptr;
- param.positions.arraySizes[0] = 0;
-
- param.normals.buf = nullptr;
- param.normals.arraySizes[0] = 0;
-
- param.tangents.buf = nullptr;
- param.tangents.arraySizes[0] = 0;
-
- param.texcoords.buf = nullptr;
- param.texcoords.arraySizes[0] = 0;
-
- init<I32_DynamicArray1D_Type>(param.positionIndexes);
- init<I32_DynamicArray1D_Type>(param.normalIndexes);
- init<I32_DynamicArray1D_Type>(param.tangentIndexes);
- init<I32_DynamicArray1D_Type>(param.texcoordIndexes);
- init<I32_DynamicArray1D_Type>(param.materialIDs);
-}
-
-void init(BPPBond& param)
-{
- param.name.buf = nullptr;
- param.asset = -1;
- param.visible = true;
- param.support.healthMask.buf = nullptr;
- param.support.bondStrength = 1.0;
- param.support.enableJoint = false;
-}
-
-void init(BPPChunk& param)
-{
- param.name.buf = nullptr;
- param.asset = -1;
- param.visible = true;
-
- init(param.graphicsMesh);
-}
-
-void init(BPPDefaultDamage& param)
-{
- /*
- param.compressiveDamage = 1.0f;
- param.explosiveImpulse = 100.0f;
- param.damageRadius = 5.0f;
- param.stressDamageForce = 1.0f;
- param.damageProfile = 0;
- */
- param.damageStructs.buf = nullptr;
- param.damageStructs.arraySizes[0] = 0;
- param.damageProfile = -1;
-}
-
-void init(BPPAsset& param)
-{
- param.ID = -1;
- param.name.buf = nullptr;
- param.activeUserPreset.buf = nullptr;
- init(param.stressSolver);
- param.obj.buf = nullptr;
- param.fbx.buf = nullptr;
- param.llasset.buf = nullptr;
- param.tkasset.buf = nullptr;
- param.bpxa.buf = nullptr;
- param.exportFBX = false;
- param.embedFBXCollision = true;
- param.exportOBJ = false;
- param.exportLLAsset = false;
- param.exportTKAsset = false;
- param.exportBPXA = false;
-}
-
-void init(BPPAssetInstance& param)
-{
- param.name.buf = nullptr;
- param.asset = -1;
- param.visible = true;
- param.exMaterial.buf = nullptr;
- param.inMaterial.buf = nullptr;
-}
-
-void init(BPPVoronoi& param)
-{
- param.siteGeneration = 0;
- param.numSites = 5;
- param.numberOfClusters = 1;
- param.sitesPerCluster = 1.0f;
- param.clusterRadius = 1.0f;
-}
-
-void init(BPPSlice& param)
-{
- param.numSlicesX = 1;
- param.numSlicesY = 1;
- param.numSlicesZ = 1;
- param.offsetVariation = 0.0f;
- param.rotationVariation = 0.0f;
- param.noiseAmplitude = 0.0f;
- param.noiseFrequency = 1.0f;
- param.noiseOctaveNumber = 1;
- param.noiseSeed = 1;
- param.surfaceResolution = 1;
-}
-
-void init(BPPFractureVisualization& param)
-{
- param.displayFractureWidget = false;
- param.fracturePreview = false;
-}
-
-void init(BPParams& params)
-{
- //memset(&params, sizeof(BPParams), 0);
-
- //params.cameraBookmarks.buf = nullptr;
- //for (int i = 0; i < 4; ++i)
- // params.renderer.lights.buf[i].name.buf =
-}
-
-const char* convertFilterRestrictionToString(EFilterRestriction& restriction)
-{
- switch (restriction)
- {
- case eFilterRestriction_AllDescendants:
- return "AllDescendants";
- case eFilterRestriction_AllParents:
- return "AllParents";
- case eFilterRestriction_DepthAll:
- return "DepthAll";
- case eFilterRestriction_Depth0:
- return "Depth0";
- case eFilterRestriction_Depth1:
- return "Depth1";
- case eFilterRestriction_Depth2:
- return "Depth2";
- case eFilterRestriction_Depth3:
- return "Depth3";
- case eFilterRestriction_Depth4:
- return "Depth4";
- case eFilterRestriction_Depth5:
- return "Depth5";
- case eFilterRestriction_ItemTypeAll:
- return "ItemTypeAll";
- case eFilterRestriction_Chunk:
- return "Chunk";
- case eFilterRestriction_SupportChunk:
- return "SupportChunk";
- case eFilterRestriction_StaticSupportChunk:
- return "StaticSupportChunk";
- case eFilterRestriction_Bond:
- return "Bond";
- case eFilterRestriction_WorldBond:
- return "WorldBond";
- case eFilterRestriction_EqualTo:
- return "EqualTo";
- case eFilterRestriction_NotEquaTo:
- return "NotEqualTo";
- }
-
- return "";
-}
-
-EFilterRestriction convertStringToFilterRestriction(const char* restriction)
-{
- static std::map<std::string, EFilterRestriction> stringRestrictionMap;
- if (0 == stringRestrictionMap.size())
- {
- stringRestrictionMap["AllDescendants"] = eFilterRestriction_AllDescendants;
- stringRestrictionMap["AllParents"] = eFilterRestriction_AllParents;
- stringRestrictionMap["DepthAll"] = eFilterRestriction_DepthAll;
- stringRestrictionMap["Depth0"] = eFilterRestriction_Depth0;
- stringRestrictionMap["Depth1"] = eFilterRestriction_Depth1;
- stringRestrictionMap["Depth2"] = eFilterRestriction_Depth2;
- stringRestrictionMap["Depth3"] = eFilterRestriction_Depth3;
- stringRestrictionMap["Depth4"] = eFilterRestriction_Depth4;
- stringRestrictionMap["Depth5"] = eFilterRestriction_Depth5;
- stringRestrictionMap["ItemTypeAll"] = eFilterRestriction_ItemTypeAll;
- stringRestrictionMap["Chunk"] = eFilterRestriction_Chunk;
- stringRestrictionMap["SupportChunk"] = eFilterRestriction_SupportChunk;
- stringRestrictionMap["StaticSupportChunk"] = eFilterRestriction_StaticSupportChunk;
- stringRestrictionMap["Bond"] = eFilterRestriction_Bond;
- stringRestrictionMap["WorldBond"] = eFilterRestriction_WorldBond;
- stringRestrictionMap["EqualTo"] = eFilterRestriction_EqualTo;
- stringRestrictionMap["NotEqualTo"] = eFilterRestriction_NotEquaTo;
- }
-
- if (nullptr == restriction || 0 == strlen(restriction))
- return eFilterRestriction_Invalid;
-
- for (std::map<std::string, EFilterRestriction>::iterator itr = stringRestrictionMap.begin(); itr != stringRestrictionMap.end(); ++itr)
- {
- if (0 == nvidia::shdfnd::stricmp(itr->first.c_str(), restriction))
- return itr->second;
- }
-
- return eFilterRestriction_Invalid;
-}
-
-FilterPreset::FilterPreset(const char* inName)
-{
- name = inName;
-}
-
-StressSolverUserPreset::StressSolverUserPreset(const char* inName)
- : name(inName)
-{
- name = name;
- init(stressSolver);
-}
-
-FracturePreset::FracturePreset(const char* inName, FractureType inType)
- : name(inName)
- , type(inType)
-{
- init();
-}
-
-void FracturePreset::setType(FractureType inType)
-{
- type = inType;
-
- if (eFractureType_Voronoi == type)
- {
- BPPVoronoi& voronoi = fracture.voronoi;
- ::init(voronoi);
- }
- else if (eFractureType_Slice == type)
- {
- BPPSlice& slice = fracture.slice;
- ::init(slice);
- }
-}
-
-void FracturePreset::init()
-{
- if (eFractureType_Voronoi == type)
- {
- BPPVoronoi& voronoi = fracture.voronoi;
- ::init(voronoi);
- }
- else if (eFractureType_Slice == type)
- {
- BPPSlice& slice = fracture.slice;
- ::init(slice);
- }
-
- ::init(visualization);
-}
-
-BlastProject& BlastProject::ins()
-{
- static BlastProject _ins;
- return _ins;
-}
-
-BlastProject::~BlastProject()
-{
- delete[] _projectParams.cameraBookmarks.buf;
-}
-
-void BlastProject::clear()
-{
- freeBlast(_projectParams.blast);
- freeBlast(_projectParams.graphicsMaterials);
- _projectParams.fracture.general.applyMaterial = -1;
- _projectParams.fracture.general.autoSelectNewChunks = false;
- _projectParams.fracture.general.selectionDepthTest = true;
-}
-
-std::string BlastProject::getAseetNameByID(int assetID)
-{
- BPPAssetArray& assetArray = _projectParams.blast.blastAssets;
- for (int i = 0; i < assetArray.arraySizes[0]; ++i)
- {
- if (assetArray.buf[i].ID == assetID)
- return assetArray.buf[i].name.buf;
- }
- return "";
-}
-
-int BlastProject::getAssetIDByName(const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return -1;
-
- BPPAssetArray& assetArray = _projectParams.blast.blastAssets;
- for (int i = 0; i < assetArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(assetArray.buf[i].name, name) == 0)
- return assetArray.buf[i].ID;
- }
- return -1;
-}
-
-BPPAsset* BlastProject::getAsset(const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return nullptr;
-
- BPPAssetArray& assetArray = _projectParams.blast.blastAssets;
- for (int i = 0; i < assetArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(assetArray.buf[i].name, name) == 0)
- return assetArray.buf + i;
- }
- return nullptr;
-}
-
-int BlastProject::generateNewAssetID()
-{
- int id = 0;
- for (; id < (std::numeric_limits<int>::max)(); ++id)
- {
- BPPAssetArray& assetArray = _projectParams.blast.blastAssets;
- bool find = false;
-
- if (assetArray.arraySizes[0] == 0)
- find = false;
-
- for (int i = 0; i < assetArray.arraySizes[0]; ++i)
- {
- if (assetArray.buf[i].ID == id)
- {
- find = true;
- break;
- }
- }
-
- if (!find)
- {
- break;
- }
- }
-
- return id;
-}
-
-bool BlastProject::isGraphicsMaterialNameExist(const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return false;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- BPPGraphicsMaterial& item = theArray.buf[i];
- if (nvidia::shdfnd::strcmp(item.name.buf, name) == 0)
- return true;
- }
- return false;
-}
-
-BPPGraphicsMaterial* BlastProject::addGraphicsMaterial(const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return nullptr;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
- BPPGraphicsMaterial* oldBuf = theArray.buf;
- theArray.buf = new BPPGraphicsMaterial[theArray.arraySizes[0] + 1];
-
- int i = 0;
- for (; i < theArray.arraySizes[0]; ++i)
- {
- BPPGraphicsMaterial& newItem = theArray.buf[i];
- BPPGraphicsMaterial& oldItem = oldBuf[i];
- init(newItem);
- copy(newItem, oldItem);
- }
-
- BPPGraphicsMaterial& newItem = theArray.buf[i];
- init(newItem);
- copy(newItem.name, name);
- theArray.arraySizes[0] += 1;
-
- delete[] oldBuf;
-
- return &newItem;
-}
-
-void BlastProject::removeGraphicsMaterial(const char* name)
-{
- if (name == nullptr || strlen(name) == 0 || !isGraphicsMaterialNameExist(name))
- return;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
- BPPGraphicsMaterial* oldBuf = theArray.buf;
-
- theArray.buf = new BPPGraphicsMaterial[theArray.arraySizes[0] - 1];
- int index = 0;
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(oldBuf[i].name.buf, name) != 0)
- {
- BPPGraphicsMaterial& newItem = theArray.buf[index++];
- BPPGraphicsMaterial& oldItem = oldBuf[i];
- init(newItem);
- copy(newItem, oldItem);
- }
- }
- theArray.arraySizes[0] -= 1;
- delete[] oldBuf;
-}
-
-void BlastProject::renameGraphicsMaterial(const char* oldName, const char* newName)
-{
- if (oldName == nullptr || newName == nullptr)
- return;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(theArray.buf[i].name.buf, oldName) == 0)
- {
- copy(theArray.buf[i].name, newName);
- return;
- }
- }
-}
-
-void BlastProject::reloadDiffuseColor(const char* name, float r, float g, float b, float a)
-{
- if (name == nullptr)
- return;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(theArray.buf[i].name.buf, name) == 0)
- {
- theArray.buf[i].diffuseColor[0] = r;
- theArray.buf[i].diffuseColor[1] = g;
- theArray.buf[i].diffuseColor[2] = b;
- theArray.buf[i].diffuseColor[3] = a;
- return;
- }
- }
-}
-
-void BlastProject::reloadSpecularColor(const char* name, float r, float g, float b, float a)
-{
- if (name == nullptr)
- return;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(theArray.buf[i].name.buf, name) == 0)
- {
- theArray.buf[i].specularColor[0] = r;
- theArray.buf[i].specularColor[1] = g;
- theArray.buf[i].specularColor[2] = b;
- theArray.buf[i].specularColor[3] = a;
- return;
- }
- }
-}
-
-void BlastProject::reloadSpecularShininess(const char* name, float specularShininess)
-{
- if (name == nullptr)
- return;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(theArray.buf[i].name.buf, name) == 0)
- {
- theArray.buf[i].specularShininess = specularShininess;
- return;
- }
- }
-}
-
-void BlastProject::reloadDiffuseTexture(const char* name, const char* diffuseTexture)
-{
- if (name == nullptr)
- return;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(theArray.buf[i].name.buf, name) == 0)
- {
- copy(theArray.buf[i].diffuseTextureFilePath, diffuseTexture);
- return;
- }
- }
-}
-
-void BlastProject::reloadSpecularTexture(const char* name, const char* specularTexture)
-{
- if (name == nullptr)
- return;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(theArray.buf[i].name.buf, name) == 0)
- {
- copy(theArray.buf[i].specularTextureFilePath, specularTexture);
- return;
- }
- }
-}
-
-void BlastProject::reloadNormalTexture(const char* name, const char* normalTexture)
-{
- if (name == nullptr)
- return;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(theArray.buf[i].name.buf, name) == 0)
- {
- copy(theArray.buf[i].normalTextureFilePath, normalTexture);
- return;
- }
- }
-}
-
-void BlastProject::reloadEnvTexture(const char* name, const char* envTexture)
-{
- // to do
-}
-
-BPPGraphicsMaterial* BlastProject::getGraphicsMaterial(const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return nullptr;
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(theArray.buf[i].name.buf, name) == 0)
- {
- return &theArray.buf[i];
- }
- }
-
- return nullptr;
-}
-
-std::string BlastProject::generateNewMaterialName(const char* name)
-{
- std::string nName = "";
- if (name != nullptr)
- nName = name;
-
- char materialName[MAX_PATH];
-
- BPPGraphicsMaterialArray& theArray = _projectParams.graphicsMaterials;
- for (int m = 0; ;m++)
- {
- sprintf(materialName, "%s_%d", nName.c_str(), m);
-
- bool exist = false;
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- BPPGraphicsMaterial& item = theArray.buf[i];
- if (nvidia::shdfnd::strcmp(item.name.buf, materialName) == 0)
- {
- exist = true;
- break;
- }
- }
- if (!exist)
- {
- break;
- }
- }
-
- return materialName;
-}
-
-bool BlastProject::isAssetInstanceNameExist(const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return false;
-
- BPPAssetInstanceArray& theArray = _projectParams.blast.blastAssetInstances;
-
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- BPPAssetInstance& item = theArray.buf[i];
- if (nvidia::shdfnd::strcmp(item.name.buf, name) == 0)
- return true;
- }
- return false;
-}
-
-int BlastProject::getAssetInstanceCount(int assetID)
-{
- std::vector<BPPAssetInstance*> instances;
- getAssetInstances(assetID, instances);
- return instances.size();
-}
-
-void BlastProject::getAssetInstances(int assetID, std::vector<BPPAssetInstance*>& instances)
-{
- instances.clear();
-
- if (assetID < 0)
- {
- return;
- }
-
- /*
- assetID may not less than assetArray.arraySizes[0]
- for example : there is only one asset and its id is two
-
- BPPAssetArray& assetArray = _projectParams.blast.blastAssets;
- if (assetID >= assetArray.arraySizes[0])
- {
- return;
- }
- */
-
- BPPAssetInstanceArray& instanceArray = _projectParams.blast.blastAssetInstances;
- for (int i = 0; i < instanceArray.arraySizes[0]; i++)
- {
- BPPAssetInstance& instance = instanceArray.buf[i];
- if (assetID == instance.asset)
- instances.push_back(&instance);
- }
-}
-
-BPPAssetInstance* BlastProject::getAssetInstance(int assetID, int instanceIndex)
-{
- std::vector<BPPAssetInstance*> instances;
- getAssetInstances(assetID, instances);
-
- int instanceSize = instances.size();
- if (instanceSize == 0 || instanceSize <= instanceIndex)
- {
- return nullptr;
- }
-
- return instances[instanceIndex];
-}
-
-BPPAssetInstance* BlastProject::getAssetInstance(int assetID, const char* instanceName)
-{
- std::vector<BPPAssetInstance*> instances;
- getAssetInstances(assetID, instances);
-
- int instanceSize = instances.size();
- if (instanceSize == 0)
- {
- return nullptr;
- }
-
- BPPAssetInstance* instance = nullptr;
- for (int is = 0; is < instanceSize; is++)
- {
- if (::strcmp(instanceName, instances[is]->name.buf) == 0)
- {
- instance = instances[is];
- break;
- }
- }
- return instance;
-}
-
-BPPAssetInstance* BlastProject::addAssetInstance(int blastAssetIndex, const char* instanceName)
-{
- if (instanceName == nullptr)
- return nullptr;
-
- BPPAssetArray& assetArray = _projectParams.blast.blastAssets;
- if (blastAssetIndex < 0 && blastAssetIndex > assetArray.arraySizes[0])
- return nullptr;
-
- BPPAssetInstanceArray& theArray = _projectParams.blast.blastAssetInstances;
-
- BPPAssetInstance* oldBuf = theArray.buf;
- theArray.buf = new BPPAssetInstance[theArray.arraySizes[0] + 1];
-
- int i = 0;
- for (; i < theArray.arraySizes[0]; ++i)
- {
- BPPAssetInstance& newItem = theArray.buf[i];
- BPPAssetInstance& oldItem = oldBuf[i];
-
- init(newItem);
- copy(newItem, oldItem);
- }
-
- BPPAssetInstance& newItem = theArray.buf[i];
- init(newItem);
- copy(newItem.name, instanceName);
- newItem.asset = -1;
- newItem.visible = true;
-
- delete[] oldBuf;
-
- return &newItem;
-}
-
-void BlastProject::removeAssetInstance(const char* name)
-{
- if (name == nullptr || strlen(name) == 0 || !isAssetInstanceNameExist(name))
- return;
-
- BPPAssetInstanceArray& theArray = _projectParams.blast.blastAssetInstances;
- BPPAssetInstance* oldBuf = theArray.buf;
-
- theArray.buf = new BPPAssetInstance[theArray.arraySizes[0] - 1];
- int index = 0;
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(oldBuf[i].name.buf, name) != 0)
- {
- BPPAssetInstance& newItem = theArray.buf[index++];
- BPPAssetInstance& oldItem = oldBuf[i];
- init(newItem);
- copy(newItem, oldItem);
- }
- }
- theArray.arraySizes[0] -= 1;
- delete[] oldBuf;
-}
-
-BPPChunk* BlastProject::getChunk(BPPAsset& asset, int chunkID)
-{
- BPPChunkArray& chunkArray = _projectParams.blast.chunks;
-
- int count = chunkArray.arraySizes[0];
- for (int i = 0; i < count; ++i)
- {
- BPPChunk& chunk = chunkArray.buf[i];
- if (chunk.ID == chunkID && chunk.asset == asset.ID)
- return &chunk;
- }
-
- return nullptr;
-}
-
-std::vector<BPPChunk*> BlastProject::getChildrenChunks(BPPAsset& asset, int parentID)
-{
- std::vector<BPPChunk*> chunks;
-
- BPPChunkArray& chunkArray = _projectParams.blast.chunks;
-
- int count = chunkArray.arraySizes[0];
- for (int i = 0; i < count; ++i)
- {
- BPPChunk& chunk = chunkArray.buf[i];
- if (chunk.parentID == parentID && chunk.asset == asset.ID)
- chunks.push_back(&chunk);
- }
-
- return chunks;
-}
-
-std::vector<BPPChunk*> BlastProject::getChildrenChunks(BPPAsset& asset)
-{
- return getChildrenChunks(asset.ID);
-}
-
-std::vector<BPPChunk*> BlastProject::getChildrenChunks(int assetID)
-{
- std::vector<BPPChunk*> chunks;
-
- BPPChunkArray& chunkArray = _projectParams.blast.chunks;
-
- int count = chunkArray.arraySizes[0];
- for (int i = 0; i < count; ++i)
- {
- BPPChunk& chunk = chunkArray.buf[i];
- if (chunk.asset == assetID)
- chunks.push_back(&chunk);
- }
-
- return chunks;
-}
-
-std::vector<BPPBond*> BlastProject::getBondsByChunk(BPPAsset& asset, int chunkID)
-{
- std::vector<BPPBond*> bonds;
- BPPBondArray& bondArray = _projectParams.blast.bonds;
- int count = bondArray.arraySizes[0];
- for (int i = 0; i < count; ++i)
- {
- BPPBond& bond = bondArray.buf[i];
- if (bond.asset == asset.ID)
- {
- if (bond.fromChunk == chunkID)
- bonds.push_back(&bond);
- else if (bond.toChunk == chunkID)
- bonds.push_back(&bond);
- }
- }
-
- return bonds;
-}
-
-std::vector<BPPBond*> BlastProject::getChildrenBonds(BPPAsset& asset)
-{
- std::vector<BPPBond*> bonds;
-
- BPPBondArray& bondArray = _projectParams.blast.bonds;
-
- int count = bondArray.arraySizes[0];
- for (int i = 0; i < count; ++i)
- {
- BPPBond& bond = bondArray.buf[i];
- if (bond.asset == asset.ID)
- bonds.push_back(&bond);
- }
-
- return bonds;
-}
-
-bool BlastProject::isUserPresetNameExist(const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return false;
-
- for (size_t i = 0; i < _userPresets.size(); ++i)
- {
- StressSolverUserPreset& item = _userPresets[i];
- if (item.name == name)
- return true;
- }
-
- return false;
-}
-
-std::vector<StressSolverUserPreset>& BlastProject::getUserPresets()
-{
- return _userPresets;
-}
-
-void BlastProject::addUserPreset(const char* name)
-{
- _userPresets.push_back(StressSolverUserPreset(name));
-}
-
-void BlastProject::saveUserPreset()
-{
- QString presetFolder = QCoreApplication::applicationDirPath() + "/Preset/";
- QDir presetDir(presetFolder);
- QString presetFilePath = presetFolder + USER_PRESET;
- if (!presetDir.exists())
- {
- if (!presetDir.mkdir(presetFolder))
- return;
- }
- QFile file(presetFilePath);
- if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
- {
- return;
- }
- QTextStream out(&file);
-
- QDomDocument xmlDoc;
- QDomElement rootElm = xmlDoc.createElement(QObject::tr("UserPreset"));
- xmlDoc.appendChild(rootElm);
-
- for (size_t i = 0; i < _userPresets.size(); ++i)
- {
- _saveStressSolverPreset(rootElm, _userPresets[i]);
- }
-
- // 4 is count of indent
- xmlDoc.save(out, 4);
-}
-
-void BlastProject::loadUserPreset()
-{
- QString presetFilePath = QCoreApplication::applicationDirPath() + "/Preset/" + USER_PRESET;
-
- QFile file(presetFilePath);
-
- if (!file.open(QIODevice::ReadOnly))
- {
- return;
- }
-
- QDomDocument xmlDoc;
- if (!xmlDoc.setContent(&file))
- {
- file.close();
- return;
- }
- file.close();
-
- if (xmlDoc.isNull() || xmlDoc.documentElement().tagName() != QObject::tr("UserPreset"))
- {
- QMessageBox::warning(&AppMainWindow::Inst(), QObject::tr("Warning"), QObject::tr("The file you selected is empty or not a blast user preset file."));
- return;
- }
-
- QDomNodeList elms = xmlDoc.documentElement().elementsByTagName(QObject::tr("StressSolverPreset"));
- for (int i = 0; i < elms.count(); ++i)
- {
- StressSolverUserPreset preset("");
- _userPresets.push_back(preset);
- _loadStressSolverPreset(elms.at(i).toElement(), _userPresets[i]);
- }
-}
-
-bool BlastProject::isFracturePresetNameExist(const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return false;
-
- for (size_t i = 0; i < _fracturePresets.size(); ++i)
- {
- FracturePreset& item = _fracturePresets[i];
- if (item.name == name)
- return true;
- }
-
- return false;
-}
-
-std::vector<FracturePreset>& BlastProject::getFracturePresets()
-{
- return _fracturePresets;
-}
-
-void BlastProject::addFracturePreset(const char* name, FractureType type)
-{
- _fracturePresets.push_back(FracturePreset(name, type));
-}
-
-void BlastProject::saveFracturePreset()
-{
- QString presetFolder = QCoreApplication::applicationDirPath() + "/Preset/";
- QDir presetDir(presetFolder);
- QString presetFilePath = presetFolder + FRACTURE_PRESET;
- if (!presetDir.exists())
- {
- if (!presetDir.mkdir(presetFolder))
- return;
- }
- QFile file(presetFilePath);
- if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
- {
- return;
- }
- QTextStream out(&file);
-
- QDomDocument xmlDoc;
- QDomElement rootElm = xmlDoc.createElement(QObject::tr("FracturePresets"));
- xmlDoc.appendChild(rootElm);
-
- for (size_t i = 0; i < _fracturePresets.size(); ++i)
- {
- _saveFracturePreset(rootElm, _fracturePresets[i]);
- }
-
- // 4 is count of indent
- xmlDoc.save(out, 4);
-}
-
-void BlastProject::loadFracturePreset()
-{
- QString presetFilePath = QCoreApplication::applicationDirPath() + "/Preset/" + FRACTURE_PRESET;
- QFile file(presetFilePath);
-
- if (!file.open(QIODevice::ReadOnly))
- {
- return;
- }
-
- QDomDocument xmlDoc;
- if (!xmlDoc.setContent(&file))
- {
- file.close();
- return;
- }
- file.close();
-
- if (xmlDoc.isNull() || xmlDoc.documentElement().tagName() != QObject::tr("FracturePresets"))
- {
- QMessageBox::warning(&AppMainWindow::Inst(), QObject::tr("Warning"), QObject::tr("The file you selected is empty or not a blast user preset file."));
- return;
- }
-
- QDomNodeList elms = xmlDoc.documentElement().elementsByTagName(QObject::tr("FracturePreset"));
- for (int i = 0; i < elms.count(); ++i)
- {
- FracturePreset preset("", eFractureType_Voronoi);
- _fracturePresets.push_back(preset);
- _loadFracturePreset(elms.at(i).toElement(), _fracturePresets[i]);
- }
-}
-
-bool BlastProject::isFilterPresetNameExist(const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return false;
-
- for (FilterPreset preset : _filterPresets)
- {
- if (preset.name == name)
- return true;
- }
-
- return false;
-}
-
-std::vector<FilterPreset>& BlastProject::getFilterPresets()
-{
- return _filterPresets;
-}
-
-void BlastProject::addFilterPreset(const char* name)
-{
- if (name == nullptr)
- return;
-
- _filterPresets.push_back(FilterPreset(name));
-}
-
-void BlastProject::removeFilterPreset(const char* name)
-{
- if (name == nullptr || strlen(name) == 0 || !isFilterPresetNameExist(name))
- return;
-
- for (std::vector<FilterPreset>::iterator itr = _filterPresets.begin(); itr != _filterPresets.end(); ++itr)
- {
- if (itr->name == name)
- {
- _filterPresets.erase(itr);
- return;
- }
- }
-}
-
-FilterPreset* BlastProject::getFilterPreset(const char* name)
-{
- if (name == nullptr)
- return nullptr;
-
- for (std::vector<FilterPreset>::iterator itr = _filterPresets.begin(); itr != _filterPresets.end(); ++itr)
- {
- if (itr->name == name)
- {
- return &(*itr);
- }
- }
-
- return nullptr;
-}
-
-void BlastProject::renameFilterPreset(const char* oldName, const char* newName)
-{
- if (oldName == nullptr || newName == nullptr)
- return;
-
- for (std::vector<FilterPreset>::iterator itr = _filterPresets.begin(); itr != _filterPresets.end(); ++itr)
- {
- if (itr->name == oldName)
- {
- (*itr).name = newName;
- return;
- }
- }
-}
-
-void BlastProject::addFilterRestriction(const char* filterName, EFilterRestriction restriction)
-{
- if (filterName == nullptr || strlen(filterName) == 0 || !isFilterPresetNameExist(filterName))
- return;
-
- for (std::vector<FilterPreset>::iterator itr = _filterPresets.begin(); itr != _filterPresets.end(); ++itr)
- {
- if (itr->name == filterName)
- {
- (*itr).filters.push_back(restriction);
- return;
- }
- }
-}
-
-void BlastProject::removeFilterRestriction(const char* filterName, EFilterRestriction restriction)
-{
- if (filterName == nullptr || strlen(filterName) == 0 || !isFilterPresetNameExist(filterName))
- return;
-
- for (std::vector<FilterPreset>::iterator itr = _filterPresets.begin(); itr != _filterPresets.end(); ++itr)
- {
- if (itr->name == filterName)
- {
- std::vector<EFilterRestriction>& filters = (*itr).filters;
- filters.erase(std::find(filters.begin(), filters.end(), restriction));
- return;
- }
- }
-}
-
-void BlastProject::saveFilterPreset()
-{
- QString presetFolder = QCoreApplication::applicationDirPath() + "/Preset/";
- QDir presetDir(presetFolder);
- QString presetFilePath = presetFolder + FILTER_PRESET;
- if (!presetDir.exists())
- {
- if (!presetDir.mkdir(presetFolder))
- return;
- }
- QFile file(presetFilePath);
- if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
- {
- return;
- }
- QTextStream out(&file);
-
- QDomDocument xmlDoc;
- QDomElement rootElm = xmlDoc.createElement(QObject::tr("FilterPresets"));
- xmlDoc.appendChild(rootElm);
-
- for (size_t i = 0; i < _filterPresets.size(); ++i)
- {
- _saveFilterPreset(rootElm, _filterPresets[i]);
- }
-
- // 4 is count of indent
- xmlDoc.save(out, 4);
-}
-
-void BlastProject::loadFilterPreset()
-{
- QString presetFilePath = QCoreApplication::applicationDirPath() + "/Preset/" + FILTER_PRESET;
- QFile file(presetFilePath);
-
- if (!file.open(QIODevice::ReadOnly))
- {
- return;
- }
-
- QDomDocument xmlDoc;
- if (!xmlDoc.setContent(&file))
- {
- file.close();
- return;
- }
- file.close();
-
- if (xmlDoc.isNull() || xmlDoc.documentElement().tagName() != QObject::tr("FilterPresets"))
- {
- QMessageBox::warning(&AppMainWindow::Inst(), QObject::tr("Warning"), QObject::tr("The file you selected is empty or not a blast user preset file."));
- return;
- }
-
- QDomNodeList elms = xmlDoc.documentElement().elementsByTagName(QObject::tr("FilterPreset"));
- for (int i = 0; i < elms.count(); ++i)
- {
- FilterPreset preset("");
- _filterPresets.push_back(preset);
- _loadFilterPreset(elms.at(i).toElement(), _filterPresets[i]);
- }
-}
-
-BlastProject::BlastProject()
-{
- _projectParams.renderer.textureFilePath.buf = nullptr;
-
- _projectParams.renderer.lights.buf = new BPPLight[4];
- _projectParams.renderer.lights.arraySizes[0] = 4;
-
- for (int i = 0; i < 4; ++i)
- {
- _projectParams.renderer.lights.buf[i].name.buf = nullptr;
- }
-
- _projectParams.blast.fileReferences.fbxSourceAsset.buf = nullptr;
-
- _projectParams.blast.healthMask.buf = nullptr;
-
- _projectParams.fracture.general.fracturePreset.buf = nullptr;
-
- init(_projectParams.fracture.slice);
- init(_projectParams.fracture.voronoi);
-
- init(_projectParams.defaultDamage);
-
- _projectParams.fracture.general.autoSelectNewChunks = false;
- _projectParams.fracture.general.selectionDepthTest = true;
-}
-
-void BlastProject::_saveStressSolverPreset(QDomElement& parentElm, StressSolverUserPreset& stressSolverUserPreset)
-{
- QDomElement newElm = parentElm.ownerDocument().createElement(QObject::tr("StressSolverPreset"));
- parentElm.appendChild(newElm);
- newElm.setAttribute(QObject::tr("Name"), stressSolverUserPreset.name.c_str());
- _saveStressSolver(newElm, stressSolverUserPreset.stressSolver);
-}
-
-void BlastProject::_saveStressSolver(QDomElement& parentElm, BPPStressSolver& stressSolver)
-{
- QDomElement newElm = parentElm.ownerDocument().createElement(QObject::tr("StressSolver"));
- parentElm.appendChild(newElm);
- newElm.setAttribute(QObject::tr("Hardness"), stressSolver.hardness);
- newElm.setAttribute(QObject::tr("LinearFactor"), stressSolver.linearFactor);
- newElm.setAttribute(QObject::tr("AngularFactor"), stressSolver.angularFactor);
- newElm.setAttribute(QObject::tr("BondIterationsPerFrame"), stressSolver.bondIterationsPerFrame);
- newElm.setAttribute(QObject::tr("GraphReductionLevel"), stressSolver.graphReductionLevel);
-}
-
-void BlastProject::_loadStressSolverPreset(QDomElement& parentElm, StressSolverUserPreset& stressSolverUserPreset)
-{
- stressSolverUserPreset.name = parentElm.attribute(QObject::tr("Name")).toUtf8().data();
-
- QDomElement stressSolverElm = parentElm.firstChildElement(QObject::tr("StressSolver"));
- _loadStressSolver(stressSolverElm, stressSolverUserPreset.stressSolver);
-}
-
-void BlastProject::_loadStressSolver(QDomElement& parentElm, BPPStressSolver& stressSolver)
-{
- stressSolver.hardness = parentElm.attribute(QObject::tr("Hardness")).toFloat();
- stressSolver.linearFactor = parentElm.attribute(QObject::tr("LinearFactor")).toFloat();
- stressSolver.angularFactor = parentElm.attribute(QObject::tr("AngularFactor")).toFloat();
- stressSolver.bondIterationsPerFrame = parentElm.attribute(QObject::tr("BondIterationsPerFrame")).toUInt();
- stressSolver.graphReductionLevel = parentElm.attribute(QObject::tr("GraphReductionLevel")).toUInt();
-}
-
-void BlastProject::_saveFracturePreset(QDomElement& parentElm, FracturePreset& fracturePreset)
-{
- QDomElement newElm = parentElm.ownerDocument().createElement(QObject::tr("FracturePreset"));
- parentElm.appendChild(newElm);
- newElm.setAttribute(QObject::tr("Name"), fracturePreset.name.c_str());
-
- if (eFractureType_Voronoi == fracturePreset.type)
- {
- _saveFracture(newElm, fracturePreset.fracture.voronoi);
- }
- else if (eFractureType_Slice == fracturePreset.type)
- {
- _saveFracture(newElm, fracturePreset.fracture.slice);
- }
-
- QDomElement visualizationElm = parentElm.ownerDocument().createElement(QObject::tr("Visualization"));
- newElm.appendChild(visualizationElm);
- visualizationElm.setAttribute(QObject::tr("FracturePreview"), fracturePreset.visualization.fracturePreview);
- visualizationElm.setAttribute(QObject::tr("DisplayFractureWidget"), fracturePreset.visualization.displayFractureWidget);
-}
-
-void BlastProject::_saveFracture(QDomElement& parentElm, BPPVoronoi& voronoi)
-{
- QDomElement newElm = parentElm.ownerDocument().createElement(QObject::tr("Voronoi"));
- parentElm.appendChild(newElm);
- newElm.setAttribute(QObject::tr("SiteGeneration"), voronoi.siteGeneration);
- newElm.setAttribute(QObject::tr("NumSites"), voronoi.numSites);
- newElm.setAttribute(QObject::tr("NumberOfClusters"), voronoi.numberOfClusters);
- newElm.setAttribute(QObject::tr("SitesPerCluster"), voronoi.sitesPerCluster);
- newElm.setAttribute(QObject::tr("ClusterRadius"), voronoi.clusterRadius);
-}
-
-void BlastProject::_saveFracture(QDomElement& parentElm, BPPSlice& slice)
-{
- QDomElement newElm = parentElm.ownerDocument().createElement(QObject::tr("Slice"));
- parentElm.appendChild(newElm);
- newElm.setAttribute(QObject::tr("NumSlicesX"), slice.numSlicesX);
- newElm.setAttribute(QObject::tr("NumSlicesY"), slice.numSlicesY);
- newElm.setAttribute(QObject::tr("NumSlicesZ"), slice.numSlicesZ);
- newElm.setAttribute(QObject::tr("OffsetVariation"), slice.offsetVariation);
- newElm.setAttribute(QObject::tr("RotationVariation"), slice.rotationVariation);
- newElm.setAttribute(QObject::tr("NoiseAmplitude"), slice.noiseAmplitude);
- newElm.setAttribute(QObject::tr("NoiseFrequency"), slice.noiseFrequency);
- newElm.setAttribute(QObject::tr("NoiseOctaveNumber"), slice.noiseOctaveNumber);
- newElm.setAttribute(QObject::tr("NoiseSeed"), slice.noiseSeed);
- newElm.setAttribute(QObject::tr("SurfaceResolution"), slice.surfaceResolution);
-}
-
-void BlastProject::_loadFracturePreset(QDomElement& parentElm, FracturePreset& fracturePreset)
-{
- fracturePreset.name = parentElm.attribute(QObject::tr("Name")).toUtf8().data();
-
- QDomElement elm = parentElm.firstChildElement(QObject::tr("Voronoi"));
- if (!elm.isNull())
- {
- fracturePreset.type = eFractureType_Voronoi;
- _loadFracture(elm, fracturePreset.fracture.voronoi);
- }
- elm = parentElm.firstChildElement(QObject::tr("Slice"));
- if (!elm.isNull())
- {
- fracturePreset.type = eFractureType_Slice;
- _loadFracture(elm, fracturePreset.fracture.slice);
- }
-
- elm = parentElm.firstChildElement(QObject::tr("Visualization"));
- if (!elm.isNull())
- {
- /*
- std::string str0 = parentElm.attribute(QObject::tr("FracturePreview")).toStdString();
- std::string str1 = parentElm.attribute(QObject::tr("DisplayFractureWidget")).toStdString();
- uint val0 = parentElm.attribute(QObject::tr("FracturePreview")).toUInt();
- uint val1 = parentElm.attribute(QObject::tr("DisplayFractureWidget")).toUInt();
- */
- fracturePreset.visualization.fracturePreview = elm.attribute(QObject::tr("FracturePreview")).toUInt();
- fracturePreset.visualization.displayFractureWidget = elm.attribute(QObject::tr("DisplayFractureWidget")).toUInt();
- }
-}
-
-void BlastProject::_loadFracture(QDomElement& parentElm, BPPVoronoi& voronoi)
-{
- voronoi.siteGeneration = parentElm.attribute(QObject::tr("SiteGeneration")).toInt();
- voronoi.numSites = parentElm.attribute(QObject::tr("NumSites")).toUInt();
- voronoi.numberOfClusters = parentElm.attribute(QObject::tr("NumberOfClusters")).toUInt();
- voronoi.sitesPerCluster = parentElm.attribute(QObject::tr("SitesPerCluster")).toFloat();
- voronoi.clusterRadius = parentElm.attribute(QObject::tr("ClusterRadius")).toFloat();
-}
-
-void BlastProject::_loadFracture(QDomElement& parentElm, BPPSlice& slice)
-{
- slice.numSlicesX = parentElm.attribute(QObject::tr("NumSlicesX")).toUInt();
- slice.numSlicesY = parentElm.attribute(QObject::tr("NumSlicesY")).toUInt();
- slice.numSlicesZ = parentElm.attribute(QObject::tr("NumSlicesZ")).toUInt();
- slice.offsetVariation = parentElm.attribute(QObject::tr("OffsetVariation")).toFloat();
- slice.rotationVariation = parentElm.attribute(QObject::tr("RotationVariation")).toFloat();
- slice.noiseAmplitude = parentElm.attribute(QObject::tr("NoiseAmplitude")).toFloat();
- slice.noiseFrequency = parentElm.attribute(QObject::tr("NoiseFrequency")).toFloat();
- slice.noiseOctaveNumber = parentElm.attribute(QObject::tr("NoiseOctaveNumber")).toUInt();
- slice.noiseSeed = parentElm.attribute(QObject::tr("NoiseSeed")).toUInt();
- slice.surfaceResolution = parentElm.attribute(QObject::tr("SurfaceResolution")).toUInt();
-}
-
-void BlastProject::_saveFilterPreset(QDomElement& parentElm, FilterPreset& filterPreset)
-{
- QDomElement newElm = parentElm.ownerDocument().createElement(QObject::tr("FilterPreset"));
- parentElm.appendChild(newElm);
- newElm.setAttribute(QObject::tr("Name"), filterPreset.name.c_str());
-
- for (EFilterRestriction restriction : filterPreset.filters)
- _saveRestriction(newElm, restriction);
-}
-
-void BlastProject::_saveRestriction(QDomElement& parentElm, EFilterRestriction& restriction)
-{
- QDomElement newElm = parentElm.ownerDocument().createElement(QObject::tr("Restriction"));
- parentElm.appendChild(newElm);
- newElm.setAttribute(QObject::tr("Value"), convertFilterRestrictionToString(restriction));
-}
-
-void BlastProject::_loadFilterPreset(QDomElement& parentElm, FilterPreset& filterPreset)
-{
- filterPreset.name = parentElm.attribute(QObject::tr("Name")).toUtf8().data();
-
- QDomNodeList nodeList = parentElm.childNodes();
- for (int i = 0; i < nodeList.count(); ++i)
- {
- QDomNode& node = nodeList.at(i);
- QDomElement elm = node.toElement();
- if (elm.isNull() || elm.nodeName() != "Restriction")
- continue;
-
- EFilterRestriction restriction;
- _loadRestriction(elm, restriction);
- filterPreset.filters.push_back(restriction);
- }
-}
-
-void BlastProject::_loadRestriction(QDomElement& parentElm, EFilterRestriction& restriction)
-{
- restriction = (EFilterRestriction)(convertStringToFilterRestriction(parentElm.attribute(QObject::tr("Value")).toUtf8().data()));
-}
-
-void BlastProject::_addStringItem(BPPStringArray& theArray, const char* name)
-{
- if (name == nullptr)
- return;
-
- NvParameterized::DummyStringStruct* oldBuf = theArray.buf;
- theArray.buf = new NvParameterized::DummyStringStruct[theArray.arraySizes[0] + 1];
-
- int i = 0;
- for (; i < theArray.arraySizes[0]; ++i)
- {
- NvParameterized::DummyStringStruct& newItem = theArray.buf[i];
- NvParameterized::DummyStringStruct& oldItem = oldBuf[i];
- newItem.buf = nullptr;
- copy(newItem, oldItem);
- }
-
- NvParameterized::DummyStringStruct& newItem = theArray.buf[i];
- newItem.buf = nullptr;
- copy(newItem, name);
- theArray.arraySizes[0] += 1;
-
- delete[] oldBuf;
-}
-
-void BlastProject::_removeStringItem(BPPStringArray& theArray, const char* name)
-{
- if (name == nullptr || strlen(name) == 0)
- return;
-
- bool nameExist = false;
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- NvParameterized::DummyStringStruct& item = theArray.buf[i];
- if (nvidia::shdfnd::strcmp(item.buf, name) == 0)
- {
- nameExist = true;
- break;
- }
- }
-
- if (!nameExist)
- return;
-
- NvParameterized::DummyStringStruct* oldBuf = theArray.buf;
-
- theArray.buf = new NvParameterized::DummyStringStruct[theArray.arraySizes[0] - 1];
- int index = 0;
- for (int i = 0; i < theArray.arraySizes[0]; ++i)
- {
- if (nvidia::shdfnd::strcmp(oldBuf[i].buf, name) != 0)
- {
- NvParameterized::DummyStringStruct& newItem = theArray.buf[index++];
- NvParameterized::DummyStringStruct& oldItem = oldBuf[i];
- newItem.buf = nullptr;
- copy(newItem, oldItem);
- }
- }
- theArray.arraySizes[0] -= 1;
- delete[] oldBuf;
-}
-
-static bool LoadParamVec2Array(NvParameterized::Interface* iface,
- const char* paramName,
- nvidia::NvVec2** outValue)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- int arraySize;
- handle.getArraySize(arraySize);
- *outValue = new nvidia::NvVec2[arraySize];
- handle.getParamVec2Array((nvidia::NvVec2*)*outValue, arraySize);
- return true;
- }
- return false;
-}
-
-static bool LoadParamVec3Array(NvParameterized::Interface* iface,
- const char* paramName,
- nvidia::NvVec3** outValue)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- int arraySize;
- handle.getArraySize(arraySize);
- *outValue = new nvidia::NvVec3[arraySize];
- handle.getParamVec3Array((nvidia::NvVec3*)*outValue, arraySize);
- return true;
- }
- return false;
-}
-
-static bool LoadParamVec4Array(NvParameterized::Interface* iface,
- const char* paramName,
- nvidia::NvVec4** outValue)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- int arraySize;
- handle.getArraySize(arraySize);
- *outValue = new nvidia::NvVec4[arraySize];
- handle.getParamVec4Array((nvidia::NvVec4*)*outValue, arraySize);
- return true;
- }
- return false;
-}
-
-static bool LoadParamU8Array(NvParameterized::Interface* iface,
- const char* paramName,
- NvUInt8** outValue)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- int arraySize;
- handle.getArraySize(arraySize);
- *outValue = new NvUInt8[arraySize];
- handle.getParamU8Array((NvUInt8*)*outValue, arraySize);
- return true;
- }
- return false;
-}
-
-static bool LoadParamU32Array(NvParameterized::Interface* iface,
- const char* paramName,
- NvUInt32** outValue)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- int arraySize;
- handle.getArraySize(arraySize);
- *outValue = new NvUInt32[arraySize];
- handle.getParamU32Array((NvUInt32*)*outValue, arraySize);
- return true;
- }
- return false;
-}
-
-static bool LoadParamString(NvParameterized::Interface* iface,
- const char* paramName,
- char* outString)
-{
- if (outString == NV_NULL)
- {
- return false;
- }
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- const char* var;
- handle.getParamString(var);
- if (var)
- {
- strcpy(outString, var);
- }
- else
- {
- outString[0] = '\0';
- }
- return true;
- }
- return false;
-}
-
-static bool SaveParamVec2Array(NvParameterized::Interface* iface,
- const char* paramName,
- const nvidia::NvVec2* value,
- int arraySize)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- handle.resizeArray(arraySize);
- handle.setParamVec2Array((nvidia::NvVec2*)value, arraySize);
- return true;
- }
- return false;
-}
-
-static bool SaveParamVec3Array(NvParameterized::Interface* iface,
- const char* paramName,
- const nvidia::NvVec3* value,
- int arraySize)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- handle.resizeArray(arraySize);
- handle.setParamVec3Array((nvidia::NvVec3*)value, arraySize);
- return true;
- }
- return false;
-}
-
-static bool SaveParamVec4Array(NvParameterized::Interface* iface,
- const char* paramName,
- const nvidia::NvVec4* value,
- int arraySize)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- handle.resizeArray(arraySize);
- handle.setParamVec4Array((nvidia::NvVec4*)value, arraySize);
- return true;
- }
- return false;
-}
-
-static bool SaveParamU8Array(NvParameterized::Interface* iface,
- const char* paramName,
- const NvUInt8* value,
- int arraySize)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- handle.resizeArray(arraySize);
- handle.setParamU8Array((NvUInt8*)value, arraySize);
- return true;
- }
- return false;
-}
-
-static bool SaveParamU32Array(NvParameterized::Interface* iface,
- const char* paramName,
- const NvUInt32* value,
- int arraySize)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- handle.resizeArray(arraySize);
- handle.setParamU32Array((NvUInt32*)value, arraySize);
- return true;
- }
- return false;
-}
-
-static bool SaveParamString(NvParameterized::Interface* iface,
- const char* paramName,
- const char* inString)
-{
- NvParameterized::Handle handle(iface);
- if (iface->getParameterHandle(paramName, handle) == NvParameterized::ERROR_NONE)
- {
- handle.setParamString(inString);
- return true;
- }
- return false;
-}
-
-bool CreateProjectParamsContext()
-{
- FoundationHolder::GetFoundation();
-
- ProjectParamsContext* context = new ProjectParamsContext;
- g_projectParamsContext = context;
- if (context == nullptr)
- return false;
-
- //context->mFoundation = FoundationHolder::GetFoundation();
- //assert(context->mFoundation != NV_NULL);
- context->mTraits = NvParameterized::createTraits();
- context->mBlastProjectParametersFactory = new BlastProjectParametersFactory;
- context->mTraits->registerFactory(*context->mBlastProjectParametersFactory);
- return true;
-}
-
-void ReleaseProjectParamsContext()
-{
- g_projectParamsContext->mTraits->release();
- delete g_projectParamsContext->mBlastProjectParametersFactory;
- delete g_projectParamsContext;
-}
-
-bool ProjectParamsLoad(const char* filePath,
- SimpleScene* scene)
-{
- if (g_projectParamsContext == NV_NULL) return false;
- NvFileBuf* stream = new NvFileBufferBase(filePath, NvFileBuf::OPEN_READ_ONLY);
- if (!stream || !stream->isOpen())
- {
- // file open error
- if (stream) stream->release();
- return false;
- }
- NvParameterized::Serializer::DeserializedData data;
- NvParameterized::Serializer::ErrorType serError = NvParameterized::Serializer::ERROR_NONE;
- NvParameterized::XmlSerializer serializer(g_projectParamsContext->mTraits);
- bool isUpdated;
- serError = serializer.deserialize(*stream, data, isUpdated);
- if (data.size() < 1)
- {
- if (stream) stream->release();
- return false;
- }
-
-// scene->Clear();
-
- for (int idx = 0; idx < (int)data.size(); ++idx) {
- NvParameterized::Interface* iface = data[idx];
- if (::strcmp(iface->className(), BlastProjectParameters::staticClassName()) == 0)
- {
- scene->LoadParameters(iface);
- }
- }
- stream->release();
- return true;
-}
-
-bool ProjectParamsSave(const char* filePath,
- SimpleScene* scene)
-{
- if (g_projectParamsContext == NV_NULL) return false;
- NvParameterized::XmlSerializer serializer(g_projectParamsContext->mTraits);
- NvFileBuf* stream = new NvFileBufferBase(filePath, NvFileBuf::OPEN_WRITE_ONLY);
- if (!stream || !stream->isOpen())
- {
- // file open error
- if (stream) stream->release();
- return false;
- }
- NvParameterized::Traits* traits = g_projectParamsContext->mTraits;
- int numObjects = 0;
- const int kMaxObjects = 1;
- NvParameterized::Interface* objects[kMaxObjects];
-
- if (1)
- {
- BlastProjectParameters* params = new BlastProjectParameters(traits);
- objects[numObjects++] = params;
- NvParameterized::Interface* iface = static_cast<NvParameterized::Interface*>(params);
- scene->SaveParameters(iface);
- }
-
- NV_ASSERT(numObjects <= kMaxObjects);
- NvParameterized::Serializer::ErrorType serError = NvParameterized::Serializer::ERROR_NONE;
- bool isUpdate = false;
- serError = serializer.serialize(*stream, (const NvParameterized::Interface**)&objects[0], numObjects, isUpdate);
- //for (int idx = 0; idx < numObjects; ++idx)
- //{
- // delete objects[idx];
- //}
- stream->release();
- return true;
-}
-
-// Utility function to get the child parameter handle from the parent handle.
-bool ParamGetChild(NvParameterized::Handle& parentHandle, NvParameterized::Handle& outChildHandle, const char* childName)
-{
- if (parentHandle.getChildHandle(parentHandle.getInterface(), childName, outChildHandle) == NvParameterized::ERROR_NONE)
- {
- return true;
- }
- return false;
-}