完善MECMAS21参数配置与分组交互

This commit is contained in:
ljz committed 2026-08-03 23:51:27 +08:00
1 parent 32f21f08ff
commit be54070855
28 files changed
+3418 -202

No files matched your search

+201
View File
@@ -164,8 +164,193 @@ class ComponentCatalogTests(unittest.TestCase):
}
self.assertEqual(components["amesim_mecmas21"]["category"]["id"], "mechanical")
self.assertEqual([port["name"] for port in components["amesim_mecmas21"]["ports"]], ["port_2", "port_1"])
self.assertEqual(components["amesim_mecmas21"]["modelVersion"], "0.2.0")
self.assertEqual(
components["amesim_mecmas21"]["parameterGroups"],
[
{
"id": "friction",
"label": "摩擦",
"parameters": [
"frictionType",
"strib",
"astrib",
"fstick",
"fcoul",
"rvisc",
"wind",
"dvel",
],
"order": 10,
"defaultExpanded": False,
},
{
"id": "endstops",
"label": "限位",
"parameters": [
"discContactOption",
"xmax",
"Kbmax",
"Dbmax",
"Pdmax",
"xmin",
"Kbmin",
"Dbmin",
"Pdmin",
"restcoeff",
"restdvel",
],
"order": 20,
"defaultExpanded": False,
},
],
)
self.assertNotIn("parameterGroups", components["amesim_f000"])
self.assertEqual(mecmas_parameters["mass"]["unit"], "kg")
self.assertEqual(mecmas_parameters["Kbmin"]["unit"], "N/m")
self.assertEqual(mecmas_parameters["theta"]["label"], "倾角(度)")
self.assertIn("+90°", mecmas_parameters["theta"]["description"])
self.assertIn("-90°", mecmas_parameters["theta"]["description"])
self.assertEqual(
{
name: (
mecmas_parameters[name]["editor"],
[
(option["value"], option["label"])
for option in mecmas_parameters[name]["options"]
],
)
for name in (
"useFriction",
"stoptype",
"discContactOption",
"strib",
"frictionType",
)
},
{
"useFriction": ("choice", [(1.0, "否"), (2.0, "是")]),
"stoptype": (
"choice",
[
(1.0, "理想限位"),
(2.0, "弹性限位"),
(3.0, "恢复碰撞"),
(4.0, "无限位"),
],
),
"discContactOption": (
"choice",
[
(1.0, "允许负接触力"),
(2.0, "不允许负接触力"),
],
),
"strib": ("choice", [(1.0, "否"), (2.0, "是")]),
"frictionType": (
"choice",
[(1.0, "简单"), (2.0, "高级")],
),
},
)
self.assertEqual(
{
name: mecmas_parameters[name]["visibleWhen"]
for name in (
"fstick",
"fcoul",
"rvisc",
"wind",
"dvel",
"restdvel",
"restcoeff",
"astrib",
"xmin",
"Kbmin",
"Dbmin",
"Pdmin",
"xmax",
"Kbmax",
"Dbmax",
"Pdmax",
"discContactOption",
"strib",
"frictionType",
)
},
{
"fstick": [
{"parameter": "stoptype", "values": [1.0, 2.0, 4.0]},
{"parameter": "useFriction", "values": [2.0]},
],
"fcoul": [
{"parameter": "stoptype", "values": [1.0, 2.0, 4.0]},
{"parameter": "useFriction", "values": [2.0]},
],
"rvisc": [
{"parameter": "useFriction", "values": [2.0]},
],
"wind": [
{"parameter": "useFriction", "values": [2.0]},
],
"dvel": [
{"parameter": "stoptype", "values": [1.0, 2.0, 4.0]},
{"parameter": "useFriction", "values": [2.0]},
{"parameter": "frictionType", "values": [2.0]},
],
"restdvel": [
{"parameter": "stoptype", "values": [3.0]},
],
"restcoeff": [
{"parameter": "stoptype", "values": [3.0]},
],
"astrib": [
{"parameter": "stoptype", "values": [1.0, 2.0, 4.0]},
{"parameter": "useFriction", "values": [2.0]},
{"parameter": "frictionType", "values": [2.0]},
{"parameter": "strib", "values": [2.0]},
],
"xmin": [
{"parameter": "stoptype", "values": [1.0, 2.0, 3.0]},
],
"Kbmin": [
{"parameter": "stoptype", "values": [2.0]},
],
"Dbmin": [
{"parameter": "stoptype", "values": [2.0]},
],
"Pdmin": [
{"parameter": "stoptype", "values": [2.0]},
],
"xmax": [
{"parameter": "stoptype", "values": [1.0, 2.0, 3.0]},
],
"Kbmax": [
{"parameter": "stoptype", "values": [2.0]},
],
"Dbmax": [
{"parameter": "stoptype", "values": [2.0]},
],
"Pdmax": [
{"parameter": "stoptype", "values": [2.0]},
],
"discContactOption": [
{"parameter": "stoptype", "values": [2.0]},
],
"strib": [
{"parameter": "stoptype", "values": [1.0, 2.0, 4.0]},
{"parameter": "useFriction", "values": [2.0]},
{"parameter": "frictionType", "values": [2.0]},
],
"frictionType": [
{"parameter": "stoptype", "values": [1.0, 2.0, 4.0]},
{"parameter": "useFriction", "values": [2.0]},
],
},
)
for name in ("mass", "theta", "useFriction", "stoptype", "v0", "x0"):
with self.subTest(always_visible=name):
self.assertNotIn("visibleWhen", mecmas_parameters[name])
lstp_parameters = {
parameter["name"]: parameter
for parameter in components["amesim_lstp00a"]["parameters"]
@@ -317,6 +502,7 @@ class ComponentCatalogTests(unittest.TestCase):
self.assertIn("modelVersion", schema["$defs"]["component"]["required"])
self.assertIn("version", schema["$defs"]["library"]["required"])
parameter_schema = schema["$defs"]["parameter"]
parameter_group_schema = schema["$defs"]["parameterGroup"]
self.assertEqual(
parameter_schema["properties"]["description"],
{"type": "string", "minLength": 1},
@@ -324,6 +510,21 @@ class ComponentCatalogTests(unittest.TestCase):
self.assertNotIn("description", parameter_schema["required"])
self.assertFalse(parameter_schema["additionalProperties"])
self.assertNotIn("unknownField", parameter_schema["properties"])
self.assertEqual(
parameter_group_schema["required"],
["id", "label", "parameters", "order", "defaultExpanded"],
)
self.assertTrue(
parameter_group_schema["properties"]["parameters"]["uniqueItems"]
)
self.assertIn(
"parameterGroups",
schema["$defs"]["component"]["properties"],
)
self.assertNotIn(
"parameterGroups",
schema["$defs"]["component"]["required"],
)
if __name__ == "__main__":