Here is a lisp that removes hatches from a dwg.
(defun c:dlhatch (/ adoc)
(vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for blk_def (vla-get-blocks adoc)
(if (equal (vla-get-isxref blk_def) :vlax-false)
(vlax-for ent blk_def
(if (= (vla-get-objectname ent) "AcDbHatch")
(vl-catch-all-apply
(function
(lambda ()
(vla-erase ent)
) ;_ end of lambda
) ;_ end of function
) ;_ end of vl-catch-all-apply
) ;_ end of if
) ;_ end of vlax-for
) ;_ end of if
) ;_ end of vlax-for
(vla-endundomark adoc)
(princ)
)
Untested but maybe this?
(defun c:foohatch (/ adoc)
(vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for blk_def (vla-get-blocks adoc)
(if (equal (vla-get-isxref blk_def) :vlax-false)
(vlax-for ent blk_def
(if (= (vla-get-objectname ent) "AcDbHatch")
(vl-catch-all-apply
(function
(lambda ()
(vla-sendtoback ent)
) ;_ end of lambda
) ;_ end of function
) ;_ end of vl-catch-all-apply
) ;_ end of if
) ;_ end of vlax-for
) ;_ end of if
) ;_ end of vlax-for
(vla-endundomark adoc)
(princ)
)
Just changed the erase to a sendback
(vla-sendtoback ent)
Sorry I just tried this. It does not work. My best guess is it has something to do with the pointing system when blocks are created.