mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-16 09:54:11 +02:00
Add SendModelsOperation
This commit is contained in:
parent
051bbd5d34
commit
7bd1628465
3 changed files with 38 additions and 0 deletions
|
@ -9,6 +9,9 @@
|
|||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include "ModelEditPacketSender.h"
|
||||
#include "ModelItem.h"
|
||||
|
||||
#include "ModelTree.h"
|
||||
|
||||
ModelTree::ModelTree(bool shouldReaverage) : Octree(shouldReaverage) {
|
||||
|
@ -204,6 +207,32 @@ void ModelTree::deleteModel(const ModelItemID& modelID) {
|
|||
}
|
||||
}
|
||||
|
||||
void ModelTree::sendModels(ModelEditPacketSender* packetSender, float x, float y, float z) {
|
||||
SendModelsOperationArgs args;
|
||||
args.packetSender = packetSender;
|
||||
args.root = glm::vec3(x, y, z);
|
||||
recurseTreeWithOperation(sendModelsOperation, &args);
|
||||
packetSender->releaseQueuedMessages();
|
||||
}
|
||||
|
||||
bool ModelTree::sendModelsOperation(OctreeElement* element, void* extraData) {
|
||||
SendModelsOperationArgs* args = static_cast<SendModelsOperationArgs*>(extraData);
|
||||
ModelTreeElement* modelTreeElement = static_cast<ModelTreeElement*>(element);
|
||||
|
||||
const QList<ModelItem>& modelList = modelTreeElement->getModels();
|
||||
|
||||
for (int i = 0; i < modelList.size(); i++) {
|
||||
uint32_t creatorTokenID = ModelItem::getNextCreatorTokenID();
|
||||
ModelItemID id(NEW_MODEL, creatorTokenID, false);
|
||||
ModelItemProperties properties;
|
||||
properties.copyFromModelItem(modelList.at(i));
|
||||
properties.setPosition(properties.getPosition() + args->root);
|
||||
args->packetSender->queueModelEditMessage(PacketTypeModelAddOrEdit, id, properties);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// scans the tree and handles mapping locally created models to know IDs.
|
||||
// in the event that this tree is also viewing the scene, then we need to also
|
||||
// search the tree to make sure we don't have a duplicate model from the viewing
|
||||
|
|
|
@ -84,10 +84,13 @@ public:
|
|||
void setFBXService(ModelItemFBXService* service) { _fbxService = service; }
|
||||
const FBXGeometry* getGeometryForModel(const ModelItem& modelItem) {
|
||||
return _fbxService ? _fbxService->getGeometryForModel(modelItem) : NULL;
|
||||
|
||||
}
|
||||
void sendModels(ModelEditPacketSender* packetSender, float x, float y, float z);
|
||||
|
||||
private:
|
||||
|
||||
static bool sendModelsOperation(OctreeElement* element, void* extraData);
|
||||
static bool updateOperation(OctreeElement* element, void* extraData);
|
||||
static bool findAndUpdateOperation(OctreeElement* element, void* extraData);
|
||||
static bool findAndUpdateWithIDandPropertiesOperation(OctreeElement* element, void* extraData);
|
||||
|
|
|
@ -44,6 +44,12 @@ public:
|
|||
bool isViewing;
|
||||
};
|
||||
|
||||
class SendModelsOperationArgs {
|
||||
public:
|
||||
glm::vec3 root;
|
||||
ModelEditPacketSender* packetSender;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class ModelTreeElement : public OctreeElement {
|
||||
|
|
Loading…
Reference in a new issue