public override Wrapper VisitPose(PreposeGesturesParser.PoseContext context) { var bt = new CompositeBodyTransform(); var br = new CompositeBodyRestriction(); var ds = new CompositeDelayedStatement(); foreach (var s in context.statement()) { Contract.Assert(s != null); var w = this.Visit(s); Contract.Assert(w != null); var statement = w.GetValue(); if (statement != null) { if (statement is CompositeBodyTransform) { bt = bt.Compose((CompositeBodyTransform)statement); continue; } if (statement is CompositeBodyRestriction) { br = br.And((CompositeBodyRestriction)statement); continue; } if (statement is CompositeDelayedStatement) { ds = ds.Compose((CompositeDelayedStatement)statement); continue; } throw new ArgumentException("Wrong return type"); } } var pose = new Pose(context.ID().GetText(), bt, br, ds); if (this.Poses.ContainsKey(pose.Name)) { throw new ArgumentException("Pose " + pose.Name + " has been previosly seen."); } this.Poses.Add(pose.Name, pose); return(new Wrapper(pose)); }
public override Wrapper VisitPose(PreposeGesturesParser.PoseContext context) { var bt = new BodyTransform(); var br = new CompositeBodyRestriction(); foreach (var s in context.statement()) { Contract.Assert(s != null); var w = this.Visit(s); if (w == null) { throw new PreposeParserException("Failed to parse statement", s); } var statement = w.GetValue(); if (statement != null) { if (statement is BodyTransform) { bt = bt.Compose((BodyTransform)statement); continue; } if (statement is CompositeBodyRestriction) { br = br.And((CompositeBodyRestriction)statement); continue; } throw new PreposeParserException("Invalid return type", s); } } var pose = new Pose(context.ID().GetText(), bt, br); if (this.Poses.ContainsKey(pose.Name)) { throw new PreposeParserException("Pose " + pose.Name + " has been previously seen.", context); } this.Poses.Add(pose.Name, pose); return(new Wrapper(pose)); }