... weil Du der Variablen ERG das Ergebnis aus der (foreach ...) Schleife zuweist, etc...
-> ach ja, der Rueckgabewert.... einleuchtend, was Du erklaerst! Warum ich selber nicht draufkam, ist, dass mir die ganze Funktion eingegeben "ATT1" und "ATT4" zurueckgibt, nicht nur "ATT4". (siehe Beispiel)
Wenn's um Perfomance geht: CAR, CDR und diese Funktionen sind absolute Basisfunktionen in LISP, und die sind auch bestimmt bei 10maligem Aufruf immer noch sehr viel schneller als ein (setq ...) mit anschließender Referenzierung einer Variablen.
-> hab nicht gewusst, dass der Unterschied soo gross ist! Sollte man sich das Verhaeltnis 10:1 beim Geschwindigkeitsunterschied als Faustregel merken?
Schreibe hier mal die ganze Funktion, die unnoetigen SETQ's schon weggelassen:
(defun getPKdePuntos (eleCL pkini ptLst / pto ptoInt pk)
(mapcar '(lambda (x)
;(setq ptoInt (vlax-curve-getClosestPointTo (vlax-ename->vla-object eleCL) (car x) ))
(entmake (list'(0 . "LINE")(cons 10 (car x))(cons 11 (vlax-curve-getClosestPointTo (vlax-ename->vla-object eleCL) (car x) ))))
(setq lastent (entlast))
;(setq pk (vlax-curve-getDistAtPoint (vlax-ename->vla-object eleCL) ptoInt))
(setq linlen (distance (vlax-curve-getClosestPointTo (vlax-ename->vla-object eleCL) (car x) ) (car x)))
(entdel lastent)
(list (+ (vlax-curve-getDistAtPoint (vlax-ename->vla-object eleCL)
(vlax-curve-getClosestPointTo (vlax-ename->vla-object eleCL) (car x) )) pkini)
(cadr (car x))(caar x) (cadr x) (caddr x) (foreach i (cddr x)(print i)))
) ptlst)
); ende funktion
Testeingabewerte:
(setq eleCL (car (entsel "Select Polyline: ")))
(setq ptlst (list (list '(2498557.5429 4456587.6318 0.0) "LAY/BLKname" "ATT1" "ATT2" "ATT3" "ATT4")))
(setq pkini 272500.0)
(getPKdePuntos eleCL pkini ptlst)
Rueckgabewert:
((272501.0 4.45659e+006 2.49856e+006 "LAY/BLKname" "ATT1" "ATT4"))
------------------
Jovi (sin Bon).
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP