;Fillet by example (ARKANCE - www.cadforum.cz) (defun C:FBE ( / ent obj pick param idx p1 p2 bulge rad) (vl-load-com) (if (setq e (nentsel "\nPick an existing fillet: "))(progn (setq ent (car e)) (setq pick (cadr e)) (setq obj (vlax-ename->vla-object ent)) (setq rad (vl-catch-all-apply 'getpropertyvalue (list ent "Radius"))) ; has property? (ARC) (if (vl-catch-all-error-p rad)(progn ; otherwise POLY (setq rad 0.0 idx 0) ; preset ;; Parameter at picked point (setq param (vl-catch-all-apply 'vlax-curve-getParamAtPoint (list obj (osnap pick "_NEA")))) (if (not (vl-catch-all-error-p param)) (setq idx (fix param))) ;; Get bulge of that segment (setq bulge (vl-catch-all-apply 'vla-getBulge (list obj idx))) (if (or (vl-catch-all-error-p param) (vl-catch-all-error-p bulge) (equal bulge 0.0 1e-12)) ; err? (progn (princ "\nThis segment is straight, no radius.") (vlr-beep-reaction) ) (progn ;; Endpoints of the segment (setq p1 (vlax-curve-getPointAtParam obj idx)) (setq p2 (vlax-curve-getPointAtParam obj (+ idx 1))) ;; Compute radius (setq rad (/ (distance p1 p2) (* 2 (sin (/ (* 4 (atan bulge)) 2.0))) ) ) ) ) )) ; if rad )) ; if sel (princ (strcat "\nApply the radius " (rtos (abs rad) 2 6) " - ")) (setvar "FILLETRAD" (abs rad)) (initcommandversion 2) (vl-cmdf "_FILLET") (princ) ) (princ "\nFBE (fillet by example) loaded.") (princ)