/// <summary>
        /// Gets all objects in the current document within the polygon and layer filter defined
        /// </summary>
        /// <param name="polyPoints"></param>
        /// <param name="layerFilter"></param>
        /// <returns></returns>
        public static SelectionSet GetSelectionSet(Point3dCollection polyPoints, string layerFilter, bool isCrossing, bool isFence)
        {
            SelectionSet selectionSet = null;

            Document currentDoc = Active.MdiDocument;
            Editor   editor     = currentDoc.Editor;

            Acaddb.TypedValue[] typedValues = new Acaddb.TypedValue[5];
            int i = 0;

            Acaddb.TypedValue beginningOr  = new Acaddb.TypedValue((int)Acaddb.DxfCode.Operator, "<or");
            Acaddb.TypedValue endingOr     = new Acaddb.TypedValue((int)Acaddb.DxfCode.Operator, "or>");
            Acaddb.TypedValue beginningAnd = new Acaddb.TypedValue((int)Acaddb.DxfCode.Operator, "<and");
            Acaddb.TypedValue endingAnd    = new Acaddb.TypedValue((int)Acaddb.DxfCode.Operator, "and>");

            typedValues[i++] = beginningOr;
            typedValues[i++] = beginningAnd;

            Acaddb.TypedValue tv = new Acaddb.TypedValue((int)Acaddb.DxfCode.LayerName, layerFilter);
            typedValues[i++] = tv;

            typedValues[i++] = endingAnd;
            typedValues[i++] = endingOr;

            // Assign the filter criteria to a SelectionFilter object
            SelectionFilter selectionFilter = new SelectionFilter(typedValues);

            // Request for objects to be selected in the drawing area
            PromptSelectionResult promptResult;

            if (isFence == true)
            {
                promptResult = editor.SelectFence(polyPoints, selectionFilter);
            }
            else
            {
                if (isCrossing == true)
                {
                    promptResult = editor.SelectCrossingPolygon(polyPoints, selectionFilter);
                }
                else
                {
                    promptResult = editor.SelectWindowPolygon(polyPoints, selectionFilter);
                }
            }

            // If the prompt status is OK, objects were selected
            if (promptResult.Status == PromptStatus.OK)
            {
                selectionSet = promptResult.Value;
            }

            return(selectionSet);
        }
        /// <summary>
        /// Gets the selection set.
        /// </summary>
        /// <param name="prompt">The prompt.</param>
        /// <param name="layerFilter">The layer filter.</param>
        /// <param name="objectFilter">The object filter.</param>
        /// <returns></returns>
        public static SelectionSet GetSelectionSet(string prompt, string layerFilter, string objectFilter)
        {
            PGA.MessengerManager.MessengerManager.AddLog("Start GetSelectionSet");
            SelectionSet selectionSet = null;

            Document currentDoc = Active.MdiDocument;
            Editor   editor     = currentDoc.Editor;

            PromptSelectionOptions options = new PromptSelectionOptions();

            if (string.IsNullOrEmpty(prompt))
            {
                prompt = "\nSelect objects:";
            }
            options.MessageForAdding = prompt;
            options.RejectObjectsFromNonCurrentSpace = true;
            options.RejectObjectsOnLockedLayers      = true;
            options.RejectPaperspaceViewport         = true;

            Acaddb.TypedValue[] typedValues = new Acaddb.TypedValue[2];
            int i = 0;

            Acaddb.TypedValue tvLayer = new Acaddb.TypedValue((int)Acaddb.DxfCode.LayerName, layerFilter);
            typedValues[i++] = tvLayer;

            Acaddb.TypedValue tvObject = new Acaddb.TypedValue((int)Acaddb.DxfCode.Start, objectFilter);
            typedValues[i++] = tvObject;

            // Assign the filter criteria to a SelectionFilter object
            SelectionFilter selectionFilter = new SelectionFilter(typedValues);

            // Request for objects to be selected in the drawing area
            PromptSelectionResult promptResult;

            promptResult = editor.GetSelection(options, selectionFilter);

            // If the prompt status is OK, objects were selected
            if (promptResult.Status == PromptStatus.OK)
            {
                selectionSet = promptResult.Value;
            }

            PGA.MessengerManager.MessengerManager.AddLog("End GetSelectionSet");
            return(selectionSet);
        }
        /// <summary>
        /// Gets the filtered layers selection set.
        /// </summary>
        /// <param name="layerNames">The layer names.</param>
        /// <returns></returns>
        public static SelectionSet GetObjectsOnLayers(IList <string> layerNames)
        {
            SelectionSet selectionSet = null;

            Editor editor = Active.Editor;

            Acaddb.TypedValue[] typedValues = new Acaddb.TypedValue[(layerNames.Count * 3) + 2];
            int i = 0;

            Acaddb.TypedValue beginningOr  = new Acaddb.TypedValue((int)Acaddb.DxfCode.Operator, "<or");
            Acaddb.TypedValue endingOr     = new Acaddb.TypedValue((int)Acaddb.DxfCode.Operator, "or>");
            Acaddb.TypedValue beginningAnd = new Acaddb.TypedValue((int)Acaddb.DxfCode.Operator, "<and");
            Acaddb.TypedValue endingAnd    = new Acaddb.TypedValue((int)Acaddb.DxfCode.Operator, "and>");

            typedValues[i++] = beginningOr;

            foreach (string layerName in layerNames)
            {
                typedValues[i++] = beginningAnd;
                Acaddb.TypedValue tv = new Acaddb.TypedValue((int)Acaddb.DxfCode.LayerName, layerName);
                typedValues[i++] = tv;
                typedValues[i++] = endingAnd;
            }

            typedValues[i++] = endingOr;

            // Assign the filter criteria to a SelectionFilter object
            SelectionFilter selectionFilter = new SelectionFilter(typedValues);

            // Request for objects to be selected in the drawing area
            PromptSelectionResult promptResult;

            promptResult = editor.SelectAll(selectionFilter);

            // If the prompt status is OK, objects were selected
            if (promptResult.Status == PromptStatus.OK)
            {
                selectionSet = promptResult.Value;
            }

            return(selectionSet);
        }