internal override bool ParseNodeBodyElement(string id, VRMLParser parser) { int line = parser.Line; if (id == "center") { Center = parser.ParseSFVec3fValue(); } else if (id == "info") { Info.AddRange(parser.ParseSFStringOrMFStringValue()); } else if (id == "joints") { List <X3DNode> nodes = parser.ParseSFNodeOrMFNodeValue(); foreach (X3DNode node in nodes) { IX3DHAnimJointNode joint = node as IX3DHAnimJointNode; if (joint == null) { parser.ErrorParsingNode(VRMLReaderError.UnexpectedNodeType, this, id, node, line); } else { Joints.Add(joint); } } } else if (id == "name") { Name = parser.ParseStringValue(); } else if (id == "rotation") { Rotation = parser.ParseSFRotationValue(); } else if (id == "scale") { Scale = parser.ParseSFVec3fValue(); } else if (id == "scaleOrientation") { ScaleOrientation = parser.ParseSFRotationValue(); } else if (id == "segments") { List <X3DNode> nodes = parser.ParseSFNodeOrMFNodeValue(); foreach (X3DNode node in nodes) { IX3DHAnimeSegmentNode segment = node as IX3DHAnimeSegmentNode; if (segment == null) { parser.ErrorParsingNode(VRMLReaderError.UnexpectedNodeType, this, id, node, line); } else { Segments.Add(segment); } } } else if (id == "sites") { List <X3DNode> nodes = parser.ParseSFNodeOrMFNodeValue(); foreach (X3DNode node in nodes) { IX3DHAnimSiteNode site = node as IX3DHAnimSiteNode; if (site == null) { parser.ErrorParsingNode(VRMLReaderError.UnexpectedNodeType, this, id, node, line); } else { Sites.Add(site); } } } else if (id == "skeleton") { List <X3DNode> nodes = parser.ParseSFNodeOrMFNodeValue(); foreach (X3DNode node in nodes) { IX3DHAnimHumanoidSkeleton skeleton = node as IX3DHAnimHumanoidSkeleton; if (skeleton == null) { parser.ErrorParsingNode(VRMLReaderError.UnexpectedNodeType, this, id, node, line); } else { Skeleton.Add(skeleton); } } } else if (id == "skin") { List <X3DNode> nodes = parser.ParseSFNodeOrMFNodeValue(); foreach (X3DNode node in nodes) { X3DChildNode skin = node as X3DChildNode; if (skin == null) { parser.ErrorParsingNode(VRMLReaderError.UnexpectedNodeType, this, id, node, line); } else { Skin.Add(skin); } } } else if (id == "skinCoord") { X3DNode node = parser.ParseSFNodeValue(); if (node != null) { SkinCoord = node as X3DCoordinateNode; if (SkinCoord == null) { parser.ErrorParsingNode(VRMLReaderError.UnexpectedNodeType, this, id, node, line); } } } else if (id == "skinNormal") { X3DNode node = parser.ParseSFNodeValue(); if (node != null) { SkinNormal = node as X3DNormalNode; if (SkinNormal == null) { parser.ErrorParsingNode(VRMLReaderError.UnexpectedNodeType, this, id, node, line); } } } else if (id == "translation") { Translation = parser.ParseSFVec3fValue(); } else if (id == "version") { Version = parser.ParseStringValue(); } else if (id == "viewpoints") { List <X3DNode> nodes = parser.ParseSFNodeOrMFNodeValue(); foreach (X3DNode node in nodes) { X3DViewpointNode vp = node as X3DViewpointNode; // x3d-Spec specs. x3dHAnimSite change to interface if neccessary if (vp == null) { parser.ErrorParsingNode(VRMLReaderError.UnexpectedNodeType, this, id, node, line); } else { Viewpoints.Add(vp); } } } else if (id == "bboxCenter") { BBoxCenter = parser.ParseSFVec3fValue(); } else if (id == "bboxSize") { BBoxSize = parser.ParseSFVec3fValue(); } else { return(false); } return(true); }