//this is where the logic of the command is defined
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            string filterStr;

            using (GetString getter = new GetString())
            {
                getter.AcceptString(true);
                getter.SetCommandPrompt("Enter the boolean filter statement (in quotes)");
                if (getter.Get() != GetResult.String)
                {
                    RhinoApp.WriteLine("Invalid Input for tag");
                    return(getter.CommandResult());
                }
                filterStr = getter.StringResult();
            }

            Stopwatch watch = new Stopwatch();

            watch.Start();
            List <Guid> filtered = TagUtil.Evaluate(filterStr, ref doc);

            Debug.WriteLine(watch.ElapsedMilliseconds, "Time");
            watch.Stop();

            doc.Objects.UnselectAll();
            doc.Objects.Select(filtered);
            doc.Views.Redraw();

            return(Result.Success);
        }