TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: DanB on March 14, 2005, 01:12:03 PM
-
Can anyone help me with determining the Midpoint of a selected arc. Currently I am able to extract the center point with:
(setq ent (entsel "\nSelect ARC: "))
(setq arc_list (entget (car ent)) ; entity list
cpt (cdr (assoc 10 arc_list)) ; center point
Is there a similar format for the midpoint as well?
Thanks
-
No, but here's a few useful functions put to use:
(setq crv (car (entsel "\nSelect ARC: ")))
(setq startPt (vlax-curve-getstartpoint crv)
endPt (vlax-curve-getendpoint crv)
len (vlax-curve-getdistatpoint crv endPt)
midPt (vlax-curve-getpointatdist crv (/ len 2))
)
-
For a dxf version I wrote this a long time ago, but as you can see, the VL version is easier and smaller. (Partial code)
(setq ent1 (ssname ss cnt)
elist1 (entget ent1)
etype1 (strcase (cdr (assoc 0 elist1)) 1)
ssl (sslength ss)
ent (ssname ss cnt)
elist (entget ent)
rad (cdr (assoc 40 elist))
cen (trans (cdr (assoc 10 elist)) 0 1)
ang1 (cdr (assoc 50 elist))
ang2 (cdr (assoc 51 elist))
delta (- ang2 ang1)
cnt (1+ cnt)
) ;_ setq
(if (minusp delta)
(setq delta (+ delta (* pi 2)))
) ;_ if
(setq pt1 (polar cen ang1 rad)
pt2 (polar cen ang2 rad)
alen (* rad delta)
hdelt (/ delta 2)
pt3 (polar cen (+ hdelt ang1) rad)
rang (angtos (angle pt1 pt2))
alens (rtos (/ alen 12) 2 2)
)
-
Thanks, I'll try these out.
Dan
-
Or, a simple but slightly less secure solution:
(osnap (polar (cdr (assoc 10 entl))(cdr (assoc 51 entl))
(cdr (assoc 40 entl)))
"mid"
)
entl being the arc_list in your example