Hi, @Kent1Cooper .
I'm tempted to just write the thing, but I like explaining it first so I can tell if I know what I'm talking about first.
;;----------------------------------------
;; Function to get absolutely last entity:
;;
(defun @entlast ( / elast e)
(setq elast (entlast))
(while (setq e (entnext elast))
(setq elast e)
)
elast
)
1. (setq e (@entlast))
2. -Hatchedit the hatch and recreate the boundaries (which will include the holes), and do NOT associate.
3. Create a selection set of the boundaries...
(setq ss (ssadd))
(while (setq e (entnext e))
(ssadd e ss)
)
4. Iterate through ss and determine the outer boundary, probably by its area, and call it 'outer.
5. Create a selection set of the holes...
(setq holes (ssdel outer ss))
6. Create a point list ("ptlist") of the outer using a custom function that adds tight points along bulged segments.
We can call it @complexify.
7. Use the point list and a filter of choice to...
(setq ssouter (ssget "_CP" ptlist filter))
8. For each of the holes, do steps #6 and #7 on the hole, deleting any of its selection from ssouter.
9. Done. Except for @complexify, it's all pretty easy.
Now remember, it won't be exact because of all the pitfalls we surmised with the @inside discussions, but I doubt anyone will take the user to court. Anyway, he could...
(command "_.select" ssouter pause)
to add/remove anything he thinks should/shouldn't be selected.
You could also try using 'intersectwith the hatch, but the hatch pattern would have to be really tight because solid hatches are "not acceptable."