예제 #1
0
        public bool Perform()
        {
            successful = true;
            // mesh.ConsiderIntersectCellInteractsAsSimple = useICInAuto;
            mesh.ConsiderMultipleLoops = considerMultipleLoopsInAuto;
            mesh.UseColoring           = useColoringInAuto;
            mesh.UseCellColoring       = useCellColoringInAuto;
            // TODO: add settings for use derived/merge in auto.
            mesh.UseDerivedColoring = false;
            mesh.UseMerging         = false;
            mesh.ColoringCheats     = false;
            Edge      closest = mesh.Edges[edgeIndex];
            EdgeState toggled = Toggle(closest.State, buttons);

            actionsPerformed = new List <IAction>();
            if (closest.State != EdgeState.Empty)
            {
                IAction unsetAction = new UnsetAction(mesh, edgeIndex);
                bool    res         = unsetAction.Perform();
                if ((!res || !unsetAction.Successful) && disallowFalseMove)
                {
                    if (res && !unsetAction.Successful)
                    {
                        actionsPerformed.Add(unsetAction);
                    }
                    Unperform();
                    return(false);
                }
                else if (!res || !unsetAction.Successful)
                {
                    successful = false;
                }
                actionsPerformed.Add(unsetAction);
            }
            if (toggled != EdgeState.Empty)
            {
                bool res = mesh.Perform(edgeIndex, toggled, actionsPerformed, autoMove);
                if (!res && disallowFalseMove)
                {
                    Unperform();
                    return(false);
                }
                else if (!res)
                {
                    successful = false;
                }
            }
            return(true);
        }
예제 #2
0
 public bool Perform()
 {
     successful = true;
     mesh.ConsiderIntersectCellInteractsAsSimple = useICInAuto;
     mesh.ConsiderMultipleLoops = considerMultipleLoopsInAuto;
     mesh.UseColoring = useColoringInAuto;
     mesh.UseCellPairs = useCellPairsInAuto;
     mesh.UseEdgeRestricts = useEdgeRestrictsInAuto;
     mesh.UseCellColoring = useCellColoringInAuto;
     // TODO: add settings for use derived/merge in auto.
     mesh.UseDerivedColoring = false;
     mesh.UseMerging = false;
     mesh.ColoringCheats = false;
     mesh.UseCellPairsTopLevel = false;
     Edge closest = mesh.Edges[edgeIndex];
     EdgeState toggled = Toggle(closest.State, buttons);
     actionsPerformed = new List<IAction>();
     if (closest.State != EdgeState.Empty)
     {
         IAction unsetAction = new UnsetAction(mesh, edgeIndex);
         bool res = unsetAction.Perform();
         if ((!res || !unsetAction.Successful) && disallowFalseMove)
         {
             if (res && !unsetAction.Successful)
                 actionsPerformed.Add(unsetAction);
             Unperform();
             return false;
         }
         else if (!res || !unsetAction.Successful)
             successful = false;
         actionsPerformed.Add(unsetAction);
     }
     if (toggled != EdgeState.Empty)
     {
         bool res = mesh.Perform(edgeIndex, toggled, actionsPerformed, autoMove);
         if (!res && disallowFalseMove)
         {
             Unperform();
             return false;
         }
         else if (!res)
             successful = false;
     }
     return true;
 }