diff --git a/doc/XMLreference.rst b/doc/XMLreference.rst index 62c0c191..6ce1ce42 100644 --- a/doc/XMLreference.rst +++ b/doc/XMLreference.rst @@ -3319,6 +3319,11 @@ coordinates results in compiler error. See :ref:`CComposite` in the modeling gui :at:`vertex`: :at-val:`real(3*nvert), optional` Vertex 3D positions in global coordinates (cable only). +.. _body-composite-face: + +:at:`face`: :at-val:`real(3*nvert), optional` + Face connectivity of the vertices (shell only). + .. _body-composite-initial: :at:`initial`: :at-val:`[free, ball, none], "0"` diff --git a/doc/XMLschema.rst b/doc/XMLschema.rst index ee7ad48c..2210168f 100644 --- a/doc/XMLschema.rst +++ b/doc/XMLschema.rst @@ -390,7 +390,9 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | | | | | :ref:`offset` | :ref:`flatinertia` | :ref:`solrefsmooth` | :ref:`solimpsmooth` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`vertex` | :ref:`initial` | :ref:`curve` | :ref:`size` | | +| | | | :ref:`vertex` | :ref:`face` | :ref:`initial` | :ref:`curve` | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`size` | | | | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_2| composite |br| |_2| |L| | | .. table:: | diff --git a/src/user/user_composite.cc b/src/user/user_composite.cc index b44b1600..7a8558c6 100644 --- a/src/user/user_composite.cc +++ b/src/user/user_composite.cc @@ -236,7 +236,7 @@ bool mjCComposite::Make(mjCModel* model, mjCBody* body, char* error, int error_s } // check spacing - if (type==mjCOMPTYPE_GRID || type==mjCOMPTYPE_PARTICLE) { + if (type==mjCOMPTYPE_GRID || (type==mjCOMPTYPE_PARTICLE && uservert.empty())) { if (spacing < mju_max(def[0].geom.size[0], mju_max(def[0].geom.size[1], def[0].geom.size[2]))) { return comperr(error, "Spacing must be larger than geometry size", @@ -2192,7 +2192,7 @@ void mjCComposite::MakeSkin3(mjCModel* model) { } // box - if (type==mjCOMPTYPE_BOX || type==mjCOMPTYPE_PARTICLE) { + else if (type==mjCOMPTYPE_BOX || type==mjCOMPTYPE_PARTICLE) { // z-faces MakeSkin3Box(skin, count[0], count[1], 1, vcnt, "%sB%d_%d_0"); fmt = "%sB%d_%d_" + string(cnt2); diff --git a/src/xml/xml_native_reader.cc b/src/xml/xml_native_reader.cc index 3f04b6e5..3026dfb5 100644 --- a/src/xml/xml_native_reader.cc +++ b/src/xml/xml_native_reader.cc @@ -270,8 +270,8 @@ static const char* MJCF[nMJCF][mjXATTRNUM] = { {"light", "*", "15", "name", "class", "directional", "castshadow", "active", "pos", "dir", "attenuation", "cutoff", "exponent", "ambient", "diffuse", "specular", "mode", "target"}, - {"composite", "*", "12", "prefix", "type", "count", "spacing", "offset", - "flatinertia", "solrefsmooth", "solimpsmooth", "vertex", + {"composite", "*", "13", "prefix", "type", "count", "spacing", "offset", + "flatinertia", "solrefsmooth", "solimpsmooth", "vertex", "face", "initial", "curve", "size"}, {"<"}, {"plugin", "*", "2", "plugin", "instance"}, @@ -1943,6 +1943,9 @@ void mjXReader::OneComposite(XMLElement* elem, mjCBody* pbody, mjCDef* def) { String2Vector(text, comp.uservert); } + // shell + ReadAttrTxt(elem, "face", comp.userface); + // process curve string std::istringstream iss(curves); int i = 0;