protected override void loadObjectAdditionalFromXml(XmlNode objectNode) { XmlNode markersNode = objectNode.SelectSingleNode(MARKERS); if (markersNode != null) foreach (XmlNode markerNode in markersNode.SelectNodes(MARKER)) { int frame = int.Parse(markerNode.Attributes[FRAME].Value); String markType = markerNode.Attributes[TYPE].Value; switch (markType) { case "LOCATION": var lm = new GlyphBoxLocationMark2D(frame); lm.readFromXml(markerNode); setBounding(frame, lm); break; case "DELETE": delete(frame); break; } } XmlNode markers3DNodes = objectNode.SelectSingleNode(MARKERS3D); if (markers3DNodes != null) foreach (XmlNode markerNode in markers3DNodes.SelectNodes(MARKER)) { int frame = int.Parse(markerNode.Attributes[FRAME].Value); var lm = new GlyphBoxLocationMark3D(frame); lm.readFromXml(markerNode); set3DBounding(frame, lm); } boxPrototype = getPrototype(); }
public void set3DBounding(int frameNumber, int glyphSize, List<List<Point3>> glyphBounds, List<GlyphFace> faces, float scale = 1, Point3 translation = new Point3()) { List<List<Point3>> inversedScaledGlyphBounds = glyphBounds.Select(glyphBound => glyphBound.scaleBound(1 / scale, new Point3(-translation.X / scale, -translation.Y / scale, -translation.Z / scale))).ToList(); LocationMark3D ob = new GlyphBoxLocationMark3D(frameNumber, glyphSize, inversedScaledGlyphBounds, faces); object3DMarks[frameNumber] = ob; }