(vl-load-com)
(defun PL-Coords->PKTLIST( OBJEKT NODOUBLE? / OBJEKTDATEN DIMS ZAHLLISTE PKT PUNKTLISTE)
(if (and(=(type OBJEKT) 'ENAME)
(member (cdr(assoc 0 (setq OBJEKTDATEN(entget OBJEKT)))) '("LWPOLYLINE" "POLYLINE"))
)
(progn
(setq DIMS (cond
((=(cdr(assoc 0 OBJEKTDATEN)) "LWPOLYLINE") 2)
((=(cdr(assoc 0 OBJEKTDATEN)) "POLYLINE") 3)
)
)
(setq ZAHLLISTE (vlax-safearray->list
(vlax-variant-value
(vlax-get-property (vlax-ename->vla-object OBJEKT) 'coordinates)
)
)
)
(repeat (/(length ZAHLLISTE)DIMS)
(cond
((= DIMS 2)
(setq PKT (list(car ZAHLLISTE)(cadr ZAHLLISTE) 0.0))
(setq ZAHLLISTE (cddr ZAHLLISTE))
)
((= DIMS 3)
(setq PKT (list(car ZAHLLISTE)(cadr ZAHLLISTE) (caddr ZAHLLISTE)))
(setq ZAHLLISTE (cdddr ZAHLLISTE))
)
)
(if NODOUBLE?
(if (not(member PKT PUNKTLISTE))
(setq PUNKTLISTE (cons PKT PUNKTLISTE))
)
(setq PUNKTLISTE (cons PKT PUNKTLISTE))
)
)
PUNKTLISTE
)
)
)
(defun C:ECKENANZAHL( / PKTLIST)
(if(setq PKTLIST(PL-Coords->PKTLIST(car(entsel "\nPolylinie wählen: "))'T))
(progn
(princ "\nAnzahl ECKPUNKTE: ")
(prin1(length PKTLIST))
)
)
(princ)
)
Funzt bei 2D und LW-Polylinien und ignoriert auch doppelte Punkte.
------------------
- Thomas -
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP