Detect mismatch between maxNodes and Nodes in a gmsh block. Fixes #2342
PiperOrigin-RevId: 745967745 Change-Id: If1b5fcd71079a0e6a6def9b442758678e31a5828
This commit is contained in:
committed by
Copybara-Service
parent
eadd13038a
commit
3429a4881a
@@ -1167,6 +1167,11 @@ void mjCFlexcomp::LoadGMSH41(char* buffer, int binary, int nodeend,
|
|||||||
throw mjCError(NULL, "All nodes must be in single block");
|
throw mjCError(NULL, "All nodes must be in single block");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// require maximum number of nodes be equal to maximum number of nodes in a block
|
||||||
|
if (maxNodeTag != numNodesInBlock){
|
||||||
|
throw mjCError(NULL, "Maximum number of nodes must be equal to number of nodes in a block");
|
||||||
|
}
|
||||||
|
|
||||||
// check dimensionality and save
|
// check dimensionality and save
|
||||||
if (entityDim < 1 || entityDim > 3) {
|
if (entityDim < 1 || entityDim > 3) {
|
||||||
throw mjCError(NULL, "Entity must be 1D, 2D or 3D");
|
throw mjCError(NULL, "Entity must be 1D, 2D or 3D");
|
||||||
|
|||||||
Vendored
+67
@@ -0,0 +1,67 @@
|
|||||||
|
$MeshFormat
|
||||||
|
4.1 0 8
|
||||||
|
$EndMeshFormat
|
||||||
|
$Entities
|
||||||
|
0 0 0 1
|
||||||
|
1 -0.5 -0.5 0 0.5 0.5 1 0 0
|
||||||
|
$EndEntities
|
||||||
|
$Nodes
|
||||||
|
1 14 1 100
|
||||||
|
3 1 0 14
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
6
|
||||||
|
7
|
||||||
|
8
|
||||||
|
9
|
||||||
|
10
|
||||||
|
11
|
||||||
|
12
|
||||||
|
13
|
||||||
|
14
|
||||||
|
-0.5 -0.5 0
|
||||||
|
0.5 -0.5 0
|
||||||
|
0.5 0.5 0
|
||||||
|
-0.5 0.5 0
|
||||||
|
-0.5 -0.5 1
|
||||||
|
0.5 -0.5 1
|
||||||
|
0.5 0.5 1
|
||||||
|
-0.5 0.5 1
|
||||||
|
0 0 0
|
||||||
|
0 -0.5 0.5
|
||||||
|
0.5 0 0.5
|
||||||
|
0 0.5 0.5
|
||||||
|
-0.5 0 0.5
|
||||||
|
0 0 1
|
||||||
|
$EndNodes
|
||||||
|
$Elements
|
||||||
|
1 24 1 24
|
||||||
|
3 1 4 24
|
||||||
|
1 10 9 12 11
|
||||||
|
2 10 12 13 14
|
||||||
|
3 9 10 12 13
|
||||||
|
4 10 12 14 11
|
||||||
|
5 9 10 1 2
|
||||||
|
6 7 11 12 3
|
||||||
|
7 4 1 9 13
|
||||||
|
8 13 12 4 8
|
||||||
|
9 1 10 13 5
|
||||||
|
10 13 8 5 14
|
||||||
|
11 12 8 14 7
|
||||||
|
12 14 5 10 6
|
||||||
|
13 14 6 11 7
|
||||||
|
14 9 4 12 3
|
||||||
|
15 3 11 9 2
|
||||||
|
16 11 6 10 2
|
||||||
|
17 6 10 14 11
|
||||||
|
18 1 10 9 13
|
||||||
|
19 12 4 9 13
|
||||||
|
20 5 10 13 14
|
||||||
|
21 8 13 12 14
|
||||||
|
22 12 14 11 7
|
||||||
|
23 9 12 11 3
|
||||||
|
24 10 9 11 2
|
||||||
|
$EndElements
|
||||||
Vendored
+27
@@ -0,0 +1,27 @@
|
|||||||
|
<mujoco model="gmsh">
|
||||||
|
<option timestep="0.01" integrator="implicitfast" solver="CG" />
|
||||||
|
|
||||||
|
<asset>
|
||||||
|
<texture type="skybox" builtin="gradient" rgb1=".3 .5 .7" rgb2="0 0 0" width="512" height="512" />
|
||||||
|
<texture name="grid" type="2d" builtin="checker" width="512" height="512" rgb1=".1 .2 .3"
|
||||||
|
rgb2=".2 .3 .4" />
|
||||||
|
<material name="grid" texture="grid" texrepeat="1 1" texuniform="true" reflectance=".2" />
|
||||||
|
</asset>
|
||||||
|
|
||||||
|
<visual>
|
||||||
|
<headlight diffuse="0.9 0.9 0.9" ambient="0.3 0.3 0.3" specular="0 0 0" />
|
||||||
|
<map force="0.1" zfar="30" />
|
||||||
|
<rgba haze="0.15 0.25 0.35 1" />
|
||||||
|
<quality shadowsize="4096" />
|
||||||
|
<global offwidth="800" offheight="800" />
|
||||||
|
</visual>
|
||||||
|
|
||||||
|
<worldbody>
|
||||||
|
<geom name="floor" size="20 20 .05" type="plane" material="grid" condim="3" />
|
||||||
|
<light directional="false" diffuse=".2 .2 .2" specular="0 0 0" pos="0 0 5" dir="0 0 -1" />
|
||||||
|
<flexcomp name="cube" type="gmsh" dim="3" rgba=".8 .2 .2 1" radius="0.001" pos="0 0 4" mass="10"
|
||||||
|
scale="1 1 1" file="malformed_cube_41_ascii_mismatch_between_max_nodes_and_nodes_in_block.msh">
|
||||||
|
<edge equality="true" />
|
||||||
|
</flexcomp>
|
||||||
|
</worldbody>
|
||||||
|
</mujoco>
|
||||||
@@ -697,6 +697,18 @@ TEST_F(UserFlexTest, LoadMSHASCII_41_MissingElement_Fail) {
|
|||||||
mj_deleteModel(m);
|
mj_deleteModel(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(UserFlexTest,
|
||||||
|
LoadMSHASCII_41_MismatchBetweenMaxNodesAndNodesInBlock_Fail) {
|
||||||
|
const std::string xml_path =
|
||||||
|
GetTestDataFilePath(
|
||||||
|
"user/testdata/malformed_cube_41_ascii_mismatch_between_max_nodes_and_nodes_in_block.xml");
|
||||||
|
std::array<char, 1024> error;
|
||||||
|
mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size());
|
||||||
|
EXPECT_THAT(error.data(), HasSubstr(
|
||||||
|
"XML Error: Error: Maximum number of nodes must be equal to number of nodes in a block\nElement 'flexcomp', line 22\n"));
|
||||||
|
mj_deleteModel(m);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(UserFlexTest, LoadMSHASCII_22_MissingNumNodes_Fail) {
|
TEST_F(UserFlexTest, LoadMSHASCII_22_MissingNumNodes_Fail) {
|
||||||
const std::string xml_path =
|
const std::string xml_path =
|
||||||
GetTestDataFilePath(
|
GetTestDataFilePath(
|
||||||
|
|||||||
Reference in New Issue
Block a user