Make it possible to use a property reference for the solid property of a material. e.g.: <solid><property>/sim/ice</property></solid>
This commit is contained in:
@@ -1,37 +0,0 @@
|
|||||||
// Copyright (C) 2008 - 2012 Mathias Froehlich - Mathias.Froehlich@web.de
|
|
||||||
//
|
|
||||||
// This library is free software; you can redistribute it and/or
|
|
||||||
// modify it under the terms of the GNU Library General Public
|
|
||||||
// License as published by the Free Software Foundation; either
|
|
||||||
// version 2 of the License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This library is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
// Library General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program; if not, write to the Free Software
|
|
||||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <simgear_config.h>
|
|
||||||
|
|
||||||
#include "BVHMaterial.hxx"
|
|
||||||
|
|
||||||
namespace simgear {
|
|
||||||
|
|
||||||
BVHMaterial::BVHMaterial() :
|
|
||||||
_solid(true),
|
|
||||||
_friction_factor(1),
|
|
||||||
_rolling_friction(0.02),
|
|
||||||
_bumpiness(0),
|
|
||||||
_load_resistance(1e30)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
BVHMaterial::~BVHMaterial()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -19,19 +19,24 @@
|
|||||||
#define BVHMaterial_hxx
|
#define BVHMaterial_hxx
|
||||||
|
|
||||||
#include <simgear/structure/SGReferenced.hxx>
|
#include <simgear/structure/SGReferenced.hxx>
|
||||||
|
#include <simgear/props/props.hxx>
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
namespace simgear {
|
namespace simgear {
|
||||||
|
|
||||||
class BVHMaterial : public SGReferenced {
|
class BVHMaterial : public SGReferenced {
|
||||||
public:
|
public:
|
||||||
BVHMaterial();
|
BVHMaterial() = default;
|
||||||
virtual ~BVHMaterial();
|
virtual ~BVHMaterial() = default;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return if the surface material is solid, if it is not solid, a fluid
|
* Return if the surface material is solid, if it is not solid, a fluid
|
||||||
* can be assumed, that is usually water.
|
* can be assumed, that is usually water.
|
||||||
*/
|
*/
|
||||||
bool get_solid () const { return _solid; }
|
bool get_solid () const {
|
||||||
|
return _solid_is_prop ? _solid_property->getBoolValue() : _solid;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the friction factor for that material
|
* Get the friction factor for that material
|
||||||
@@ -55,21 +60,26 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
// True if the material is solid, false if it is a fluid
|
// True if the material is solid, false if it is a fluid
|
||||||
bool _solid;
|
bool _solid = true;
|
||||||
|
|
||||||
// the friction factor of that surface material
|
// the friction factor of that surface material
|
||||||
double _friction_factor;
|
double _friction_factor = 1.0;
|
||||||
|
|
||||||
// the rolling friction of that surface material
|
// the rolling friction of that surface material
|
||||||
double _rolling_friction;
|
double _rolling_friction = 0.02;
|
||||||
|
|
||||||
// the bumpiness of that surface material
|
// the bumpiness of that surface material
|
||||||
double _bumpiness;
|
double _bumpiness = 0.0;
|
||||||
|
|
||||||
// the load resistance of that surface material
|
// the load resistance of that surface material
|
||||||
double _load_resistance;
|
double _load_resistance = 1e30;
|
||||||
|
|
||||||
|
// Placeholder for the solid property, if defined
|
||||||
|
SGPropertyNode_ptr _solid_property;
|
||||||
|
bool _solid_is_prop = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#,endif
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ set(SOURCES
|
|||||||
BVHStaticNode.cxx
|
BVHStaticNode.cxx
|
||||||
BVHStaticTriangle.cxx
|
BVHStaticTriangle.cxx
|
||||||
BVHSubTreeCollector.cxx
|
BVHSubTreeCollector.cxx
|
||||||
BVHMaterial.cxx
|
|
||||||
BVHTransform.cxx
|
BVHTransform.cxx
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -385,7 +385,13 @@ SGMaterial::read_properties(const SGReaderWriterOptions* options,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// surface values for use with ground reactions
|
// surface values for use with ground reactions
|
||||||
_solid = props->getBoolValue("solid", _solid);
|
string propval = props->getStringValue("solid/property", "");
|
||||||
|
if (propval != "") {
|
||||||
|
_solid_property = prop_root->getNode(propval, true);
|
||||||
|
_solid_is_prop =true;
|
||||||
|
} else {
|
||||||
|
_solid = props->getBoolValue("solid", _solid);
|
||||||
|
}
|
||||||
_friction_factor = props->getDoubleValue("friction-factor", _friction_factor);
|
_friction_factor = props->getDoubleValue("friction-factor", _friction_factor);
|
||||||
_rolling_friction = props->getDoubleValue("rolling-friction", _rolling_friction);
|
_rolling_friction = props->getDoubleValue("rolling-friction", _rolling_friction);
|
||||||
_bumpiness = props->getDoubleValue("bumpiness", _bumpiness);
|
_bumpiness = props->getDoubleValue("bumpiness", _bumpiness);
|
||||||
|
|||||||
Reference in New Issue
Block a user