Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 08/12/2025 in Posts

  1. 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 ;-----
    1 point
  2. Some more. Note the Lst is sorted as in the spagetti code, sort on description 1st then point number. ; groupby provided by Dexus (defun _groupBy (fun lst0 / itm old rtn) (while lst0 (setq itm (fun (car lst0)) rtn (if (setq old (assoc itm rtn)) (subst (cons itm (cons (car lst0) (cdr old))) old rtn) (cons (cons itm (list (car lst0))) rtn) ) lst0 (cdr lst0)) ) rtn ) (setq lst2 (_groupBy (lambda (e) (car e)) lst))
    1 point
×
×
  • Create New...