Just for try, if can be more faster.
If it the case, it can be modified for your convenience.
(vl-load-com)
(defun c:surf_curve-closed ( / AcDoc Space loop js pt_in new_pl area_obj nw_obj ename ent_text dxf_ent key)
(setq
AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Space
(if (= 1 (getvar "CVPORT"))
(vla-get-PaperSpace AcDoc)
(vla-get-ModelSpace AcDoc)
)
loop T
)
(princ "\nSelect a closed object or <Enter/Right-click> for a point in interior of area")
(while loop
(setq
js
(ssget "_+.:E:S"
'(
(-4 . "<OR")
(-4 . "<AND")
(0 . "*POLYLINE")
(-4 . "<AND")
(-4 . "<NOT") (-4 . "&") (70 . 120) (-4 . "NOT>")
(-4 . "&") (70 . 1)
(-4 . "AND>")
(-4 . "AND>")
(0 . "CIRCLE")
(-4 . "<AND")
(0 . "SPLINE")
(-4 . "&") (70 . 1)
(-4 . "AND>")
(-4 . "<AND")
(0 . "ELLIPSE")
(41 . 0.0)
(42 . 6.283185307179586)
(-4 . "AND>")
(-4 . "OR>")
)
)
area_obj nil
)
(cond
((null js)
(setq
pt_in (getpoint "\nGive interior point or <Enter/Right-click> for quit?: ")
new_pl (bpoly pt_in nil '(0 0 1))
)
(if (eq (type new_pl) 'ENAME)
(setq area_obj (vlax-get-property (setq ename (vlax-ename->vla-object new_pl)) "Area"))
(setq loop nil)
)
)
(T
(setq area_obj (vlax-get-property (setq ename (vlax-ename->vla-object (ssname js 0))) "Area"))
)
)
(cond
(area_obj
(if (zerop (getvar "USERR1")) (setvar "USERR1" (/ (getvar "VIEWSIZE") 75.0)))
(setq nw_obj
(vla-addMtext Space
(vlax-3d-point (trans (getvar "VIEWCTR") 1 0))
0.0
(strcat
(rtos (* area_obj 0.0001) 2 3)
"ha \\P"
(rtos (* area_obj 0.0002471053814) 2 2)
"ac"
)
)
)
(mapcar
'(lambda (pr val)
(vlax-put nw_obj pr val)
)
(list 'AttachmentPoint 'Height 'DrawingDirection 'StyleName 'Layer 'Rotation 'BackgroundFill 'Color)
(list 1 (getvar "USERR1") 5 (getvar "TEXTSTYLE") (getvar "CLAYER") 0.0 -1 256)
)
(setq
ent_text (entlast)
dxf_ent (entget ent_text)
dxf_ent (subst (cons 90 1) (assoc 90 dxf_ent) dxf_ent)
dxf_ent (subst (cons 63 255) (assoc 63 dxf_ent) dxf_ent)
)
(entmod dxf_ent)
(while (and (setq key (grread T 4 0)) (/= (car key) 3))
(cond
((eq (car key) 5)
(setq dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent))
(entmod dxf_ent)
)
)
)
(vlax-put
(vlax-ename->vla-object (entlast))
'TextString
(strcat
"{\\fArial|b0|i0|c0|p34;"
"%<\\AcObjProp.16.2 Object(%<\\_ObjId "
(itoa (vla-get-ObjectID ename))
">%).Area \\f \"%lu2%pr3%ps[,ha ]%ct8[0.0001]\">%\\P"
"%<\\AcObjProp.16.2 Object(%<\\_ObjId "
(itoa (vla-get-ObjectID ename))
">%).Area \\f \"%lu2%pr2%ps[,ac]%ct8[0.0002471053814]\">%"
)
)
)
(T (setq loop nil))
)
(princ "\nSelect a closed object or <Enter/Right-click> for a point in interior of area")
)
(prin1)
)