Add support for fluid shapes to Unity plugin
This commit is contained in:
@@ -22,6 +22,10 @@ namespace Mujoco {
|
|||||||
[Serializable]
|
[Serializable]
|
||||||
public struct MjGeomSettings {
|
public struct MjGeomSettings {
|
||||||
|
|
||||||
|
public enum FluidShapeTypes {
|
||||||
|
None,
|
||||||
|
Ellipsoid,
|
||||||
|
}
|
||||||
|
|
||||||
[Tooltip("Priority")]
|
[Tooltip("Priority")]
|
||||||
public int Priority;
|
public int Priority;
|
||||||
@@ -35,11 +39,15 @@ public struct MjGeomSettings {
|
|||||||
[Tooltip("Contact friction parameters for dynamically generated contact pairs.")]
|
[Tooltip("Contact friction parameters for dynamically generated contact pairs.")]
|
||||||
public GeomFriction Friction;
|
public GeomFriction Friction;
|
||||||
|
|
||||||
|
[Tooltip("Shape used for fluid simulation.")]
|
||||||
|
public FluidShapeTypes FluidShapeType;
|
||||||
|
|
||||||
// Default geom settings.
|
// Default geom settings.
|
||||||
public static MjGeomSettings Default = new MjGeomSettings() {
|
public static MjGeomSettings Default = new MjGeomSettings() {
|
||||||
Solver = GeomSolver.Default,
|
Solver = GeomSolver.Default,
|
||||||
Filtering = CollisionFiltering.Default,
|
Filtering = CollisionFiltering.Default,
|
||||||
Friction = GeomFriction.Default
|
Friction = GeomFriction.Default,
|
||||||
|
FluidShapeType = FluidShapeTypes.None
|
||||||
};
|
};
|
||||||
|
|
||||||
public void FromMjcf(XmlElement mjcf) {
|
public void FromMjcf(XmlElement mjcf) {
|
||||||
@@ -76,6 +84,10 @@ public struct MjGeomSettings {
|
|||||||
Friction.Sliding = friction[0];
|
Friction.Sliding = friction[0];
|
||||||
Friction.Torsional = friction[1];
|
Friction.Torsional = friction[1];
|
||||||
Friction.Rolling = friction[2];
|
Friction.Rolling = friction[2];
|
||||||
|
|
||||||
|
// Fluid shape settings.
|
||||||
|
FluidShapeType = mjcf.GetEnumAttribute<FluidShapeTypes>(
|
||||||
|
"fluidshape", FluidShapeTypes.None, ignoreCase: true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ToMjcf(XmlElement mjcf) {
|
public void ToMjcf(XmlElement mjcf) {
|
||||||
@@ -97,6 +109,9 @@ public struct MjGeomSettings {
|
|||||||
|
|
||||||
// Inertia and friction settings.
|
// Inertia and friction settings.
|
||||||
mjcf.SetAttribute("friction", MjEngineTool.MakeLocaleInvariant($"{Friction.Sliding} {Friction.Torsional} {Friction.Rolling}"));
|
mjcf.SetAttribute("friction", MjEngineTool.MakeLocaleInvariant($"{Friction.Sliding} {Friction.Torsional} {Friction.Rolling}"));
|
||||||
|
|
||||||
|
// Fluid shape settings.
|
||||||
|
mjcf.SetAttribute("fluidshape", FluidShapeType.ToString().ToLower());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -109,6 +109,13 @@ public class MjGeomSettingsGenerationTests {
|
|||||||
_settings.ToMjcf(_mjcf);
|
_settings.ToMjcf(_mjcf);
|
||||||
Assert.That(_doc.OuterXml, Does.Contain(@"friction=""5 6 7"""));
|
Assert.That(_doc.OuterXml, Does.Contain(@"friction=""5 6 7"""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void FluidShapeTypeMjcf() {
|
||||||
|
_settings.FluidShapeType = MjGeomSettings.FluidShapeTypes.Ellipsoid;
|
||||||
|
_settings.ToMjcf(_mjcf);
|
||||||
|
Assert.That(_doc.OuterXml, Does.Contain(@"fluidshape=""ellipsoid"""));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestFixture]
|
[TestFixture]
|
||||||
@@ -199,5 +206,14 @@ public class MjGeomSettingsParsingTests {
|
|||||||
Assert.That(_settings.Friction.Torsional, Is.EqualTo(6));
|
Assert.That(_settings.Friction.Torsional, Is.EqualTo(6));
|
||||||
Assert.That(_settings.Friction.Rolling, Is.EqualTo(7));
|
Assert.That(_settings.Friction.Rolling, Is.EqualTo(7));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void FluidShapeTypeMjcf() {
|
||||||
|
_mjcf.SetAttribute("fluidshape", "ellipsoid");
|
||||||
|
_settings.FromMjcf(_mjcf);
|
||||||
|
Assert.That(_settings.FluidShapeType, Is.EqualTo(
|
||||||
|
MjGeomSettings.FluidShapeTypes.Ellipsoid
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user