public List <Transformation> SnapTo(SnapInformation obj, List <ISnappableWorldTarget> targets)
        {
            List <Transformation> transformations = new List <Transformation>();

            for (int i = 0; i < targets.Count; i++)
            {
                for (int k = 0; k < obj.SnapList.Count; k++)
                {
                    var target = targets[i];
                    for (int l = 0; l < target.SnapInformation.SnapList.Count; l++)
                    {
                        var objSnapObjectType    = obj.SnapList[k];
                        var targetSnapObjectType = target.SnapInformation.SnapList[l];


                        if (objSnapObjectType.TileFaceType.GetRoot() == targetSnapObjectType.TileFaceType.GetRoot())
                        {
                            for (int index = 0; index < snappers.Count; index++)
                            {
                                ISnapObjectSnapper t = snappers[index];

                                var snapper = t;


                                if (snapper.SnapObjectTypeA == objSnapObjectType.GetType() &&
                                    snapper.SnapObjectTypeB == targetSnapObjectType.GetType())
                                {
                                    snapper.SnapAToB(objSnapObjectType, targetSnapObjectType, target.Transformation, transformations);
                                }
                                else if (snapper.SnapObjectTypeB == objSnapObjectType.GetType() &&
                                         snapper.SnapObjectTypeA == targetSnapObjectType.GetType())
                                {
                                    snapper.SnapBToA(targetSnapObjectType, objSnapObjectType, target.Transformation, transformations);
                                }
                            }
                        }
                    }
                }
            }


            return(transformations);
        }
 public void AddSnapper(ISnapObjectSnapper snapper)
 {
     snappers.Add(snapper);
 }