Beispiel #1
0
 /// <summary>   TODO low priority: move to class Connector when PSystem is available as singleton
 /// Checks whether two connector are mutually compatible (dimension, size, glues).
 /// Order of connectors matters due to possibly asymmetric glue relation!
 /// </summary>
 /// <param name="connector1"></param>
 /// <param name="connector2"></param>
 public bool AreCompatible(ConnectorOnTile connector1, ConnectorOnTile connector2)
 {
     return(GlueRelation.ContainsKey(Tuple.Create(connector1.Glue, connector2.Glue)) &&
            (connector1.Positions.Count == 1 && connector2.Positions.Count == 1 &&
             (connector1.OnTile.Vertices is Segment3D || connector2.OnTile.Vertices is Segment3D)
             ||
             connector1.Positions.Count == 2 && connector2.Positions.Count == 2 &&
             Math.Abs(connector1.Positions[0].DistanceTo(connector1.Positions[1]) -
                      connector2.Positions[0].DistanceTo(connector2.Positions[1])) <= Tolerance));
 }
Beispiel #2
0
        /// <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));
        }