//// this is the rotate action working as a transform //// this was temporarily changed to make the rotate action work as a restriction as shown blow //public override Wrapper VisitRotate_direction_transform(PreposeGesturesParser.Rotate_direction_transformContext context) //{ // BodyTransform transform = new BodyTransform(); // var direction = (Direction)this.Visit(context.direction()); // var degreesText = context.NUMBER().GetText(); // var degrees = Convert.ToInt32(degreesText); // foreach (var b in context.body_part()) // { // var converted = (JointGroup)this.Visit(b); // transform = transform.Compose( // converted.Aggregate(j => // BodyTransformBuilder.RotateTransform(j, degrees, direction))); // } // return new Wrapper(transform); //} //point_to_transform : // 'point' 'your' body_part direction; public override Wrapper VisitPoint_to_transform(PreposeGesturesParser.Point_to_transformContext context) { var direction = (Direction)this.Visit(context.direction()); CompositeBodyTransform transform = new CompositeBodyTransform(); foreach (var b in context.body_part()) { var converted = (JointGroup)this.Visit(b); transform = transform.Compose(converted.Aggregate(j => BodyTransformBuilder.PointToTransform(j, direction))); } return(new Wrapper(transform)); }
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)); }
// rotate_transform : // 'rotate' 'your' body_part degrees angular_direction 'on' 'the' ? reference_plane; public override Wrapper VisitRotate_plane_transform(PreposeGesturesParser.Rotate_plane_transformContext context) { CompositeBodyTransform transform = new CompositeBodyTransform(); var direction = (RotationDirection)this.Visit(context.angular_direction()); var plane = (BodyPlaneType)this.Visit(context.reference_plane()); var degreesText = context.NUMBER().GetText(); var degrees = Convert.ToInt32(degreesText); foreach (var b in context.body_part()) { var converted = (JointGroup)this.Visit(b); transform = transform.Compose( converted.Aggregate(j => BodyTransformBuilder.RotateTransform(j, degrees, plane, direction))); } return(new Wrapper(transform)); }
internal Wrapper(CompositeBodyTransform transform) { this.value = transform; }