mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 07:09:47 +02:00
ModelEntities spawned with no dimension autoresize
This commit is contained in:
parent
a1c154e7be
commit
75f0a6442f
6 changed files with 44 additions and 53 deletions
|
@ -296,37 +296,12 @@ var toolBar = (function () {
|
||||||
function addModel(url) {
|
function addModel(url) {
|
||||||
var entityID = createNewEntity({
|
var entityID = createNewEntity({
|
||||||
type: "Model",
|
type: "Model",
|
||||||
dimensions: DEFAULT_DIMENSIONS,
|
|
||||||
modelURL: url
|
modelURL: url
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
if (entityID) {
|
if (entityID) {
|
||||||
print("Model added: " + url);
|
print("Model added: " + url);
|
||||||
|
|
||||||
var checkCount = 0;
|
|
||||||
function resize() {
|
|
||||||
var entityProperties = Entities.getEntityProperties(entityID);
|
|
||||||
var naturalDimensions = entityProperties.naturalDimensions;
|
|
||||||
|
|
||||||
checkCount++;
|
|
||||||
|
|
||||||
if (naturalDimensions.x == 0 && naturalDimensions.y == 0 && naturalDimensions.z == 0) {
|
|
||||||
if (checkCount < RESIZE_MAX_CHECKS) {
|
|
||||||
Script.setTimeout(resize, RESIZE_INTERVAL);
|
|
||||||
} else {
|
|
||||||
print("Resize failed: timed out waiting for model (" + url + ") to load");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Entities.editEntity(entityID, { dimensions: naturalDimensions });
|
|
||||||
|
|
||||||
// Reset selection so that the selection overlays will be updated
|
|
||||||
selectionManager.setSelections([entityID]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
selectionManager.setSelections([entityID]);
|
selectionManager.setSelections([entityID]);
|
||||||
|
|
||||||
Script.setTimeout(resize, RESIZE_INTERVAL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2325,9 +2325,14 @@ SelectionDisplay = (function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
that.checkMove = function() {
|
that.checkMove = function() {
|
||||||
if (SelectionManager.hasSelection() &&
|
if (SelectionManager.hasSelection()) {
|
||||||
(!Vec3.equal(Camera.getPosition(), lastCameraPosition) || !Quat.equal(Camera.getOrientation(), lastCameraOrientation))){
|
SelectionManager._update();
|
||||||
that.updateRotationHandles();
|
|
||||||
|
if (!Vec3.equal(Camera.getPosition(), lastCameraPosition) ||
|
||||||
|
!Quat.equal(Camera.getOrientation(), lastCameraOrientation)) {
|
||||||
|
|
||||||
|
that.updateRotationHandles();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,12 @@
|
||||||
EntityItemPointer RenderableModelEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) {
|
EntityItemPointer RenderableModelEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) {
|
||||||
return std::make_shared<RenderableModelEntityItem>(entityID, properties);
|
return std::make_shared<RenderableModelEntityItem>(entityID, properties);
|
||||||
}
|
}
|
||||||
|
RenderableModelEntityItem::RenderableModelEntityItem(const EntityItemID& entityItemID,
|
||||||
|
const EntityItemProperties& properties) :
|
||||||
|
ModelEntityItem(entityItemID, properties),
|
||||||
|
_dimensionsInitialized { properties.dimensionsChanged() }
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
RenderableModelEntityItem::~RenderableModelEntityItem() {
|
RenderableModelEntityItem::~RenderableModelEntityItem() {
|
||||||
assert(_myRenderer || !_model); // if we have a model, we need to know our renderer
|
assert(_myRenderer || !_model); // if we have a model, we need to know our renderer
|
||||||
|
@ -35,6 +41,11 @@ RenderableModelEntityItem::~RenderableModelEntityItem() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RenderableModelEntityItem::setDimensions(const glm::vec3& value) {
|
||||||
|
_dimensionsInitialized = true;
|
||||||
|
ModelEntityItem::setDimensions(value);
|
||||||
|
}
|
||||||
|
|
||||||
bool RenderableModelEntityItem::setProperties(const EntityItemProperties& properties) {
|
bool RenderableModelEntityItem::setProperties(const EntityItemProperties& properties) {
|
||||||
QString oldModelURL = getModelURL();
|
QString oldModelURL = getModelURL();
|
||||||
bool somethingChanged = ModelEntityItem::setProperties(properties);
|
bool somethingChanged = ModelEntityItem::setProperties(properties);
|
||||||
|
@ -189,7 +200,6 @@ void makeEntityItemStatusGetters(RenderableModelEntityItem* entity, render::Item
|
||||||
|
|
||||||
bool RenderableModelEntityItem::addToScene(EntityItemPointer self, std::shared_ptr<render::Scene> scene,
|
bool RenderableModelEntityItem::addToScene(EntityItemPointer self, std::shared_ptr<render::Scene> scene,
|
||||||
render::PendingChanges& pendingChanges) {
|
render::PendingChanges& pendingChanges) {
|
||||||
|
|
||||||
_myMetaItem = scene->allocateID();
|
_myMetaItem = scene->allocateID();
|
||||||
|
|
||||||
auto renderData = std::make_shared<RenderableModelEntityItemMeta>(self);
|
auto renderData = std::make_shared<RenderableModelEntityItemMeta>(self);
|
||||||
|
@ -223,9 +233,6 @@ void RenderableModelEntityItem::removeFromScene(EntityItemPointer self, std::sha
|
||||||
void RenderableModelEntityItem::render(RenderArgs* args) {
|
void RenderableModelEntityItem::render(RenderArgs* args) {
|
||||||
PerformanceTimer perfTimer("RMEIrender");
|
PerformanceTimer perfTimer("RMEIrender");
|
||||||
assert(getType() == EntityTypes::Model);
|
assert(getType() == EntityTypes::Model);
|
||||||
|
|
||||||
glm::vec3 position = getPosition();
|
|
||||||
glm::vec3 dimensions = getDimensions();
|
|
||||||
|
|
||||||
if (hasModel()) {
|
if (hasModel()) {
|
||||||
if (_model) {
|
if (_model) {
|
||||||
|
@ -290,19 +297,28 @@ void RenderableModelEntityItem::render(RenderArgs* args) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::quat rotation = getRotation();
|
|
||||||
bool movingOrAnimating = isMoving() || isAnimatingSomething();
|
bool movingOrAnimating = isMoving() || isAnimatingSomething();
|
||||||
if ((movingOrAnimating || _needsInitialSimulation) && _model->isActive()) {
|
if ((movingOrAnimating || _needsInitialSimulation) && _model->isActive()) {
|
||||||
_model->setScaleToFit(true, dimensions);
|
if (!_dimensionsInitialized) {
|
||||||
|
EntityItemProperties properties;
|
||||||
|
auto extents = _model->getMeshExtents();
|
||||||
|
properties.setDimensions(extents.maximum - extents.minimum);
|
||||||
|
|
||||||
|
qCDebug(entitiesrenderer) << "Autoresizing:" << (!getName().isEmpty() ? getName() : getModelURL());
|
||||||
|
DependencyManager::get<EntityScriptingInterface>()->editEntity(getEntityItemID(), properties);
|
||||||
|
}
|
||||||
|
|
||||||
|
_model->setScaleToFit(true, getDimensions());
|
||||||
_model->setSnapModelToRegistrationPoint(true, getRegistrationPoint());
|
_model->setSnapModelToRegistrationPoint(true, getRegistrationPoint());
|
||||||
_model->setRotation(rotation);
|
_model->setRotation(getRotation());
|
||||||
_model->setTranslation(position);
|
_model->setTranslation(getPosition());
|
||||||
|
|
||||||
// make sure to simulate so everything gets set up correctly for rendering
|
// make sure to simulate so everything gets set up correctly for rendering
|
||||||
{
|
{
|
||||||
PerformanceTimer perfTimer("_model->simulate");
|
PerformanceTimer perfTimer("_model->simulate");
|
||||||
_model->simulate(0.0f);
|
_model->simulate(0.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
_needsInitialSimulation = false;
|
_needsInitialSimulation = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,16 +25,12 @@ class RenderableModelEntityItem : public ModelEntityItem {
|
||||||
public:
|
public:
|
||||||
static EntityItemPointer factory(const EntityItemID& entityID, const EntityItemProperties& properties);
|
static EntityItemPointer factory(const EntityItemID& entityID, const EntityItemProperties& properties);
|
||||||
|
|
||||||
RenderableModelEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) :
|
RenderableModelEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties);
|
||||||
ModelEntityItem(entityItemID, properties),
|
|
||||||
_model(NULL),
|
|
||||||
_needsInitialSimulation(true),
|
|
||||||
_needsModelReload(true),
|
|
||||||
_myRenderer(NULL),
|
|
||||||
_originalTexturesRead(false) { }
|
|
||||||
|
|
||||||
virtual ~RenderableModelEntityItem();
|
virtual ~RenderableModelEntityItem();
|
||||||
|
|
||||||
|
virtual void setDimensions(const glm::vec3& value) override;
|
||||||
|
|
||||||
virtual EntityItemProperties getProperties(EntityPropertyFlags desiredProperties = EntityPropertyFlags()) const;
|
virtual EntityItemProperties getProperties(EntityPropertyFlags desiredProperties = EntityPropertyFlags()) const;
|
||||||
virtual bool setProperties(const EntityItemProperties& properties);
|
virtual bool setProperties(const EntityItemProperties& properties);
|
||||||
virtual int readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
|
virtual int readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead,
|
||||||
|
@ -74,14 +70,15 @@ public:
|
||||||
private:
|
private:
|
||||||
void remapTextures();
|
void remapTextures();
|
||||||
|
|
||||||
Model* _model;
|
Model* _model = nullptr;
|
||||||
bool _needsInitialSimulation;
|
bool _needsInitialSimulation = true;
|
||||||
bool _needsModelReload;
|
bool _needsModelReload = true;
|
||||||
EntityTreeRenderer* _myRenderer;
|
EntityTreeRenderer* _myRenderer = nullptr;
|
||||||
QString _currentTextures;
|
QString _currentTextures;
|
||||||
QStringList _originalTextures;
|
QStringList _originalTextures;
|
||||||
bool _originalTexturesRead;
|
bool _originalTexturesRead = false;
|
||||||
QVector<QVector<glm::vec3>> _points;
|
QVector<QVector<glm::vec3>> _points;
|
||||||
|
bool _dimensionsInitialized = false;
|
||||||
|
|
||||||
render::ItemID _myMetaItem;
|
render::ItemID _myMetaItem;
|
||||||
};
|
};
|
||||||
|
|
|
@ -263,8 +263,8 @@ void RenderableParticleEffectEntityItem::updateRenderItem() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// update transform
|
// update transform
|
||||||
glm::quat rot = _transform.getRotation();
|
glm::quat rot = getRotation();
|
||||||
glm::vec3 pos = _transform.getTranslation();
|
glm::vec3 pos = getPosition();
|
||||||
Transform t;
|
Transform t;
|
||||||
t.setRotation(rot);
|
t.setRotation(rot);
|
||||||
payload.setModelTransform(t);
|
payload.setModelTransform(t);
|
||||||
|
|
|
@ -88,9 +88,7 @@ EntityItemPointer EntityTypes::constructEntityItem(EntityType entityType, const
|
||||||
factory = _factories[entityType];
|
factory = _factories[entityType];
|
||||||
}
|
}
|
||||||
if (factory) {
|
if (factory) {
|
||||||
EntityItemProperties mutableProperties = properties;
|
newEntityItem = factory(entityID, properties);
|
||||||
mutableProperties.markAllChanged();
|
|
||||||
newEntityItem = factory(entityID, mutableProperties);
|
|
||||||
}
|
}
|
||||||
return newEntityItem;
|
return newEntityItem;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue