Ovo treba ovako - po mom misljenju... Ali ova sub funkcija i nije potrebna - vidi poslednju liniju ukupne rutine (setq p1 (getpointatdist ... ))
;;(IS-ON-PL? ENAME PKT) => PKT - point is on curve or nil - point isn't on curve
(defun IS-ON-PL? (ENAME PKT)
(if (vlax-curve-getdistatpoint ENAME PKT)
PKT
)
)
Ovo je uredu... Ali Pitanje varijabla treba da bude globalna, znaci izbaci je iz prve linije (defun C:skarpe (/ Gornja Donja Pitanje Razmera Razmera_total count p1 p2 boja)
(setq Pitanje
(cond
( (getint
(strcat "\n Odaberi Razmeru 1:[1000/500/2500] <"
(itoa
(cond
(Pitanje)
( (setq Pitanje 1000) )
)
)">: "
)
)
)
(Pitanje)
)
)
Ovo treba ovako - po mom misljenju - treba check-irati da li je pored pick-ovanja entitet kriva - curve...
(if (and (setq Gornja (car (entsel "\nSelektuj gornju povrsinu: ")))
(not (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getstartpoint (list Gornja))))
(setq Donja (car (entsel "\nSelektuj donju povrsinu: ")))
(not (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getstartpoint (list Donja))))
(setq boja 256))
Dovoljno je :
(setq p1 (vlax-curve-getStartPoint
Gornja
;;; (vlax-ename->vla-object Gornja) - nepotrebna koverzija ename->vla-object - vlax-curve-xxx funkcije rade brze i efikasnije sa ename argumentom
) ;_ end of vlax-curve-getStartPoint
) ;_ end of setq
Znaci otprilike ovako bi izgledala kompletna rutina po mom misljenju koliko toliko kvalitetnija...
(defun c:skarpe ( / Gornja Donja Razmera Razmera_total count p1 p2 boja )
(vl-load-com)
(vl-cmdf "_.LAYER" "_M" "Skarpe" "_C" "8" "Skarpe" "")
(initget "1000 500 2500")
(setq Pitanje
(cond
( (getint
(strcat "\n Odaberi Razmeru 1:[1000/500/2500] <"
(itoa
(cond
(Pitanje)
( (setq Pitanje 1000) )
)
)">: "
)
)
)
(Pitanje)
)
)
(cond
( (= Pitanje 1000)
(setq Razmera 1)
)
( (= Pitanje 500)
(setq Razmera 0.5)
)
( (= Pitanje 2500)
(setq Razmera 2.5)
)
)
(if (and (setq Gornja (car (entsel "\nSelektuj gornju povrsinu: ")))
(not (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getstartpoint (list Gornja))))
(setq Donja (car (entsel "\nSelektuj donju povrsinu: ")))
(not (vl-catch-all-error-p (vl-catch-all-apply 'vlax-curve-getstartpoint (list Donja))))
(setq boja 256)
)
(progn
(setq Razmera_total 0)
(setq count 0)
(setq p1 (vlax-curve-getStartPoint Gornja))
(while p1
(if (= (rem count 2) 0)
(setq p2 (vlax-curve-getClosestPointTo Donja p1))
(setq p2 (mapcar '(lambda ( x ) (/ x 2)) (mapcar '+ p1 (vlax-curve-getClosestPointTo Donja p1))))
)
(entmake
(list
'(0 . "LINE")
(cons 10 p1)
(cons 11 p2)
;'(62 . 1) ; standard boja
(cons 62 boja) ; boja 256 - ByLayer
)
)
(setq p1 (vlax-curve-getpointatdist Gornja (setq Razmera_total (+ Razmera_total Razmera))))
(setq count (1+ count))
)
)
)
(princ)
)
HTH., M.R.