/// <summary> /// Returns a pair of connectors at distinct positions on tile which match glue1 and glue2 in GlueRelation. /// If no such pair exist, then both returned connectors are null. /// Method is used for insertion of the "tile" between existing connectors with "glue1" and "glue2" /// </summary> public Tuple <ConnectorOnTile, ConnectorOnTile> MatchingConectors(Tile tile, Glue glue1, Glue glue2) { ConnectorOnTile conn2 = null; var conn1 = tile.Connectors.FirstOrDefault( connector1 => tile.Vertices.ContainsPoint(connector1.Positions[0]) && GlueRelation.MatchAsymmetric(glue1, connector1.Glue) && (conn2 = tile.Connectors.FirstOrDefault( connector2 => !connector1.Positions[0].MyEquals(connector2.Positions[0]) && tile.Vertices.ContainsPoint(connector2.Positions[0]) && GlueRelation.MatchAsymmetric(glue2, connector2.Glue))) != null); return(Tuple.Create(conn1, conn2)); }