- (defun c:plarcedcorner ( / osm p1 p2 p3 r LM:PointCircleTangents p1plst p3plst p11 p12 p31 p32 p1p p3p p13pm p13pa obj plen )
- (vl-load-com)
- (setq osm (getvar 'osmode))
- (setq p1 (getpoint "\nPick or specify start point : "))
- (setq p2 (getpoint "\nPick or specify middle corner point : " p1))
- (setq p3 (getpoint "\nPick or specify end point : " p2))
- (initget 7)
- (setq r (getdist "\nPick or specify radius of arc around middle corner point : " p2))
-
- ;; Point-Circle Tangents - Lee Mac
- ;; Returns the two points for which a line from 'pt' to each point returned
- ;; is tangent to the circle with centre c1 and radius r1
- (defun LM:PointCircleTangents ( pt c1 r1 / a1 a2 d1 )
- (if (< r1 (setq a1 (angle c1 pt) d1 (distance pt c1)))
- (progn
- (setq a2 (atan (sqrt (- (* d1 d1) (* r1 r1))) r1))
- (list
- (polar c1 (+ a1 a2) r1)
- (polar c1 (- a1 a2) r1)
- )
- )
- )
- )
-
- (setvar 'osmode 0)
- (setq p1plst (LM:PointCircleTangents p1 p2 r))
- (setq p3plst (LM:PointCircleTangents p3 p2 r))
-
- (setq p11 (car p1plst))
- (setq p12 (cadr p1plst))
- (setq p31 (car p3plst))
- (setq p32 (cadr p3plst))
-
- (if (> (min (distance p11 p31) (distance p11 p32)) (min (distance p12 p31) (distance p12 p32)))
- (setq p1p p11)
- (setq p1p p12)
- )
- (if (> (min (distance p31 p11) (distance p31 p12)) (min (distance p32 p11) (distance p32 p12)))
- (setq p3p p31)
- (setq p3p p32)
- )
-
- (setq p13pm (mapcar '(lambda ( a b ) (/ (+ a b) 2.0)) p1p p3p))
- (setq p13pa (polar p2 (angle p2 p13pm) r))
-
- (command "_.pline" p1 p1p "_A" "_S" p13pa p3p "_L" p3 "")
- (setq obj (vlax-ename->vla-object (entlast)))
- (setq plen (vlax-get-property obj 'length))
- (prompt (strcat "Pline is : " (rtos plen 2 15) " long"))
- (setvar 'osmode osm)
- (princ)
- )
M.R。 |