Hey ScottMC!
I believe I have a solution to eliminate the picking 2 points part. Try the code below. I am using the SOLIDEDIT command to copy the face, then getting the centroid of the resulting region. Afterward I delete the copied face. It works for the most part, but it cannot determine the face to copy if you flip the face; need to make sure the face is selected right the first time so I eliminated the Xflip/Yflip/Accept loop. I haven't figured out a solution yet to workaround this problem, but it seems to work pretty good for me.
(defun c:scp (/ fa cen s cmd *error*) ;; Next glitch not fixed yet.. 5-25-20
(vl-load-com)
(defun *error* ()
(command)
(vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object)))
(if cmd (setvar 'cmdecho cmd))
(if (not (vlax-erased-p fa))(vla-delete fa))
(if (tblsearch "UCS" "mucs")
(progn (vl-cmdf "._ucs" "_restore" "mucs")(vl-cmdf "._ucs" "_delete" "mucs"))
)
)
(vla-StartUndoMark (vla-get-activedocument (vlax-get-acad-object)))
(setq cmd (getvar 'cmdecho))
(setvar 'cmdecho 0)
(vl-cmdf "._ucs" "_save" "mucs");;save current ucs
(princ "\nSelect Face for Center Point: ")
(command "._ucs" "_fa" pause "") ;; get face ucs to place point
(vl-cmdf "._solidedit" "_F" "_C" (getvar 'lastpoint) "" "0,0,0" "@" "" "")
(setq fa (vlax-ename->vla-object (entlast))
cen (vla-get-centroid fa)
s (vlax-safearray->list (vlax-variant-value cen))
)
(vla-delete fa)
(vl-cmdf "._point" "_non" s)
(vl-cmdf "._ucs" "_restore" "mucs")
(vl-cmdf "._ucs" "_delete" "mucs")
(setvar 'cmdecho cmd)
(vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object)))
(princ)
)