Merge pull request #1508 from Balint-H:fix/limit-auto-parsing
PiperOrigin-RevId: 616680348 Change-Id: I55edeec1d522ab6f04514747b3c4ad5dfb2cd45f
This commit is contained in:
@@ -165,14 +165,7 @@ namespace Mujoco {
|
||||
ImpFriction.FromMjcf(mjcf, "solimpfriction");
|
||||
FrictionLoss = mjcf.GetFloatAttribute("frictionloss", 0.0f);
|
||||
|
||||
bool defaultLimited = false;
|
||||
if ((mjcf.OwnerDocument.GetElementsByTagName("compiler")[0]?["compiler"])
|
||||
?.GetBoolAttribute("autolimits", true) ??
|
||||
true) {
|
||||
defaultLimited = mjcf.HasAttribute("range");
|
||||
}
|
||||
|
||||
Limited = mjcf.GetBoolAttribute("limited", defaultLimited);
|
||||
Limited = mjcf.GetLimitedAttribute("limited", mjcf.HasAttribute("range"));
|
||||
Margin = mjcf.GetFloatAttribute("margin", defaultValue: 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,13 +82,10 @@ public class MjActuator : MjComponent {
|
||||
LengthRange = mjcf.GetVector2Attribute("lengthrange", defaultValue: Vector2.zero);
|
||||
Gear = mjcf.GetFloatArrayAttribute("gear", defaultValue: new float[] { 1.0f }).ToList();
|
||||
|
||||
bool autolimits = (mjcf.OwnerDocument.GetElementsByTagName("compiler")[0]?["compiler"])
|
||||
?.GetBoolAttribute("autolimits", true) ??
|
||||
false;
|
||||
CtrlLimited = mjcf.GetBoolAttribute("ctrllimited",
|
||||
defaultValue: autolimits ? CtrlRange != Vector2.zero : false);
|
||||
ForceLimited = mjcf.GetBoolAttribute("forcelimited",
|
||||
defaultValue: autolimits ? ForceRange != Vector2.zero : false);
|
||||
CtrlLimited = mjcf.GetLimitedAttribute("ctrllimited",
|
||||
rangeDefined: mjcf.HasAttribute("ctrlrange"));
|
||||
ForceLimited = mjcf.GetLimitedAttribute("forcelimited",
|
||||
rangeDefined: mjcf.HasAttribute("forcerange"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,28 @@ public static class XmlElementExtensions {
|
||||
}
|
||||
}
|
||||
|
||||
public static bool GetLimitedAttribute(
|
||||
this XmlElement element, string name, bool rangeDefined) {
|
||||
var strValue = element.GetStringAttribute(name, "auto");
|
||||
if (strValue == "auto" && rangeDefined && element.GetAutolimitsEnabled()) return true;
|
||||
if (strValue == "auto") return false;
|
||||
|
||||
bool parsedValue;
|
||||
if (bool.TryParse(strValue, out parsedValue)) {
|
||||
return parsedValue;
|
||||
} else {
|
||||
throw new ArgumentException($"'{strValue}' is not a bool.");
|
||||
}
|
||||
}
|
||||
|
||||
public static bool GetAutolimitsEnabled(
|
||||
this XmlElement element) {
|
||||
bool autolimits = (element.OwnerDocument?.GetElementsByTagName("compiler")[0]?["compiler"])
|
||||
?.GetBoolAttribute("autolimits", true) ??
|
||||
true;
|
||||
return autolimits;
|
||||
}
|
||||
|
||||
public static float GetFloatAttribute(
|
||||
this XmlElement element, string name, float defaultValue = 0.0f) {
|
||||
if (!element.HasAttribute(name)) {
|
||||
|
||||
Reference in New Issue
Block a user