;NextVertex - a Lisp trick to access successive vertices of entity (assoc 10 EDDY)
;Inspired by "AutoLisp Question re: Leaders" of chrisj5 of this Forum
;www.homescript.com
;------------------
(defun C:NextVertex()
;Select Objects - for debugging/tutorial - later you drop this
;and call NextVertex1(yourEntity)
;from within your function, with yourEntities from your SelectionSet as argument
;In Lisp tutorials I use this naming convention:
;Suzy for selection set
;Suzilen for number of elements picked
;Sneaky for counter
;EDNA for entity name
;EDDY for full list of entity data
;ShortEDDY for truncated entity list - came into being today, solely for this example.
(setq Suzy (ssget))
(setq Suzilen (sslength Suzy))
(setq Sneaky 0)
(while (< Sneaky Suzilen)
(setq EDNA (ssname Suzy Sneaky))
(setq EDDY (entget EDNA))
(print Sneaky)(Princ "\nEDDY ... ")
(print EDDY)
(setq Sneaky (+ 1 Sneaky))
(NextVertex1 EDDY)
)
)
;-----------------
(defun dxf (n ed) (cdr (assoc n ed)))
;-------------------
(defun NextVertex1(ShortEDDY)
(princ "\nSuccessive access to (Assoc 10 EDDY) ... ")
(while (setq ShortEDDY (member (assoc 10 ShortEDDY) ShortEDDY))
;for debugging
(princ "\n(assoc 10 ShortEddy)..")
(princ (assoc 10 ShortEDDY))
;after debugging, put other function calls here
;to do things with vertex coordinates
;or assign the coordinates to a parameter, to use elsewhere
(setq nextVertexCoords (cdr (assoc 10 ShortEDDY)))
(setq ShortEddy (cdr ShortEddy))
)
(princ)
)
;---------------------
This was for polylines which have all the vertices in one entity list - no SEQUEND there. Multiple (10 xx) appear in the entity list and the lisp above extracts them.
For other entities with SEQUEND, it is all together a different issue, the solution for which, given by Striker is:
You could also show how to access each individual vertice on a complex entity pline, such as a regular polyline or 3dpoly. I personally would do it like this....
ELIST is the entity list of a complex POLYLINE entity