Тема: LISP. Построение перпендикуляров к любым линейным примитивам
Строит перпендикуляры к линиям, полилиниям, аркам, окружностям, эллипсам, сплайнам, лучам и х-линям в указанной точке. Перпендикуляр в точке пересечения первого перпендикуляра с дуговыми и криволинейными сегментами даёт возмодность построить касательную.
(defun c:per(/ oldEcho oldOsm uPnt sSet sCurve Dr Ang *error*) (vl-load-com) (defun *error* (msg) (setvar "CMDECHO" oldEcho) (setvar "OSMODE" oldOsm) (princ) ); end of *error* (setq oldEcho(getvar "CMDECHO") oldOsm(getvar "OSMODE") ); end setq (setvar "CMDECHO" 0) (setvar "OSMODE" 819) (if (and (setq uPnt(getpoint "\nSelect point at line or curve -> ")) (setq sSet(ssget uPnt '((0 . "*LINE,ARC,ELLIPSE,CIRCLE,RAY,XLINE") (-4 . "<NOT")(0 . "MLINE")(-4 . "NOT>")))) (setq sCurve(vlax-ename->vla-object(ssname sSet 0))) (setq Dr(vlax-curve-getFirstDeriv sCurve (vlax-curve-getParamAtPoint sCurve uPnt))) ); end and (progn (setq Ang(angtos(- pi(atan(/(car dr)(cadr dr)))))) (setvar "OSMODE" 0) (command "_.xline" "_a" Ang uPnt "") ); end progn ); end if (setvar "CMDECHO" oldEcho) (setvar "OSMODE" oldOsm) (princ) ); end of c:per