TRY @dexus
https://www.theswamp.org/index.php?topic=59838.0
try this
;-------------------------------------------------------------------------------
; EVS extract_vertices_from_solid
; EVSD extract_vertices_from_solid and dwaw point
; EVSE extract_vertices_from_solid and erase solid
; EVSED extract_vertices_from_solid and erase solid and draw points
;------------------------------------------------------------------------------
; Written by Giovanni Anzani,
; University of florence
; Departement DIDA of architecture
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
(defun c:EVS () (extract_vertices_from_solid (car (entsel "\nSelect solid:")) nil nil))
(defun c:EVSD () (extract_vertices_from_solid (car (entsel "\nSelect solid:")) nil T))
(defun c:EVSE () (extract_vertices_from_solid (car (entsel "\nSelect solid:")) T nil))
(defun c:EVSED () (extract_vertices_from_solid (car (entsel "\nSelect solid:")) T T))
;-------------------------------------------------------------------------------------------------
(defun CMD-0 () (setq cm_old (getvar "cmdecho" )) (setvar "cmdecho" 0 ))
(defun OSM-0 () (setq os_old (getvar "osmode" )) (setvar "osmode" 0 ))
(defun BLI-0 () (setq bl_old (getvar "blipmode" )) (setvar "blipmode" 0 ))
;--------------------------------------------------------------------------------------------------
(defun CMD-P () (setvar "cmdecho" cm_old ))
(defun OSM-P () (setvar "osmode" os_old ))
(defun BLI-P () (setvar "blipmode" bl_old ))
;--------------------------------------------------------------------------------------------------
(defun VAR-0 () (CMD-0) (OSM-0) (BLI-0))
(defun VAR-P () (CMD-P) (OSM-P) (BLI-P) (command "_redraw") (princ))
;--------------------------------------------------------------------------------------------------
(defun Draw_lPu (lPu / Pu) (VAR-0) (foreach Pu lPu (vl-cmdf "._point" Pu)) (VAR-P))
;--------------------------------------------------------------------------------------------------
(defun remove_duplicates_from_list (l_raw / element l_clean)
(while l_raw (setq element (car l_raw)
l_clean (cons element l_clean)
l_raw (vl-remove element l_raw)))
(reverse l_clean))
;--------------------------------------------------------------------------------------------------
(defun entnext_from_ent_to_end (ent0 / ent1 lent)
(while (setq ent1 (entnext ent0))
(setq lent (cons ent1 lent)
ent0 ent1)
lent))
;--------------------------------------------------------------------------------------------------
; if you want, you can eliminate duplicates
(defun extract_edges_from_solid (ent0 erase_solid / Pu0 ent1 lis_ent)
(setq Pu0 '(0.0 0.0 0.0))
(command-s "._copy" ent0 "" Pu0 Pu0)
(setq ent1 (entlast))
(command-s "._copy" ent1 "" Pu0 Pu0)
(repeat 2 (foreach ent (entnext_from_ent_to_end ent1) (command-s "._explode" ent "")))
(setq lis_ent (entnext_from_ent_to_end ent1))
(if erase_solid (command-s "._erase" ent0 ent1 "")
(command-s "._erase" ent1 ""))
lis_ent)
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
(defun extract_vertices_from_solid (ent0 erase_solid draw_points / eent Pu1 Pu2 lis_Pu)
(foreach ent (extract_edges_from_solid ent0 erase_solid)
(if ent (progn (setq eent (vlax-ename->vla-object ent)
Pu1 (vlax-curve-getStartPoint eent)
eent_open (not (vlax-curve-isClosed eent))
Pu2 (if eent_open (vlax-curve-getEndPoint eent)))
(command-s "._erase" ent "")))
(if Pu1 (setq lis_Pu (if (member Pu1 lis_Pu) lis_Pu (cons Pu1 lis_Pu))))
(if Pu2 (setq lis_Pu (if (member Pu2 lis_Pu) lis_Pu (cons Pu2 lis_Pu)))))
(setq lis_Pu (remove_duplicates_from_list lis_Pu))
(if draw_points (Draw_lPu lis_Pu)) lis_Pu)
;-----------------------------------------------------------------------------------------------
; EOF
;-----