Mmmm... in giro mi sono imbattuto in un lisp che crea anche i profili che hai elencato, se serve posso tentare di rintracciarlo.
Nel frattempo vedi se puoi risolvere con questo, visto che alla fine sposti tutto sulle coordinate 0,0 ho impostato i punti direttamente in quella posizione.
Completalo con le tue esigenze (layer, wblock, ecc.)
(defun c:PH ( )
(setq H (getreal "\nAltezza profilo "))
(setq B (getreal "\nLarghezza profilo "))
(setq s1 (getreal "\nSpessore ala "))
(setq s2 (getreal "\nSpessore anima "))
(setq r (getreal "\nRaccordo ala-anima "))
(setq corda (sqrt (+ (* r r) (* r r))))
(setq p1 (list 0 0))
(setq p2 (polar p1 (* pi 0.5) s1))
(setq p3 (polar p2 0 (/ (- B s2 r r) 2)))
(setq p4 (polar p3 (* pi 0.25) corda))
(setq p5 (polar p4 (* pi 0.5) (- H s1 s1 r r)))
(setq p6 (polar p5 (* pi 0.75) corda))
(setq p7 (polar p6 pi (/ (- B s2 r r) 2)))
(setq p8 (polar p7 (* pi 0.5) s1))
(setq p9 (polar p8 0 B))
(setq p10 (polar p9 (* pi 1.5) s1))
(setq p11 (polar p10 pi (/ (- B s2 r r) 2)))
(setq p12 (polar p11 (* pi 1.25) corda))
(setq p13 (polar p12 (* pi 1.5) (- H s1 s1 r r)))
(setq p14 (polar p13 (* pi 1.75) corda))
(setq p15 (polar p14 0 (/ (- B s2 r r) 2)))
(setq p16 (polar p1 0 B))
(setq pc (polar p1 (angle p1 p9) (* (distance p1 p9) 0.5)))
(setq px1 (polar pc pi (+ 50. (* s2 0.5))))
(setq px2 (polar pc 0 (+ 50. (* s2 0.5))))
(setq py1 (polar pc (* pi 0.5) (+ 50. (* H 0.5))))
(setq py2 (polar pc (* pi 1.5) (+ 50. (* H 0.5))))
(command
"_pline"
"_non" p1
"_non" p2
"_non" p3
"_a"
"_non" p4
"_l"
"_non" p5
"_a"
"_non" p6
"_l"
"_non" p7
"_non" p8
"_non" p9
"_non" p10
"_non" p11
"_a"
"_non" p12
"_l"
"_non" p13
"_a"
"_non" p14
"_l"
"_non" p15
"_non" p16
"_c"
)
;assi
(command "_line" "_non" px1 "_non" px2 "")
(command "_line" "_non" py1 "_non" py2 "")
)