"""Plot candidate poses (pure Python -> SVG -> PNG with ImageMagick): y-z view (looking along x) and x-y plan.
python design_plot.py s u px cle version door out_prefix"""
import json, math, os, sys, subprocess
HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
import design_kin as K
import design_explore as E
MAGICK = r"E:\Tools\ImageMagick-7.1.2-Q16-HDRI\magick.exe"
def poses(s, u, px, cle, version, door, frames):
r = E.evaluate(s, u, px, 0.0, 0.0, cle, door=door, version=version)
arm = K.Arm(s)
out = []
side = +1 if door.endswith("Aft") else -1
tr = E.TRACK[door]
xs = [p[0] for p in tr]
x_cl, x_op = tr[0][0], (min(xs) if side > 0 else max(xs))
yb = (E.RAIL["y0"] + E.RAIL["y1"]) / 2
for f in frames:
q = r["q"][f - 1]
dx, dy, dz = tr[f - 1]
c = r["c_lo"] + (dx - x_op) * (r["c_hi"] - r["c_lo"]) / (x_cl - x_op)
base = (c, yb, r["zb"])
F = K.fk(arm, q)
W = lambda v: tuple(base[i] + K.c2w(v)[i] for i in range(3))
t, kk, L = arm.rod(q["phi_l"], q["phi_f"])
c1, s1 = math.cos(q["q1"]), math.sin(q["q1"])
P = lambda pl: W((pl[0] * c1, pl[0] * s1, pl[1]))
# knee point
el = (math.cos(q["phi_l"]), math.sin(q["phi_l"]))
out.append(dict(f=f, q=q, door=(dx, dy, dz), base=base, J1=W((0, 0, 0)), J2=W(F["J2"]), J3=W(F["J3"]), WC=W(F["WC"]),
FL=W(F["flange"]), TR=P(t), KN=P(kk), tool=r["d_t"], xt=K.c2w(K.col(F["R6"], 0))))
return r, out
def svg_yz(r, P, fn, s):
sc = 90.0
ox, oy = 1000, 60
X = lambda y: ox + (y + 5.8) * sc
Y = lambda z: oy + (-3.3 - z) * sc
L = ['')
open(fn, "w").write("\n".join(L))
def svg_xy(r, P, fn, s, door):
sc = 70.0
side = +1 if door.endswith("Aft") else -1
ox = 80 if side > 0 else -600
X = lambda x: ox + (x + 9.5) * sc
Y = lambda y: 40 + (y + 10) * sc # +y down the page (inboard down)
L = ['')
open(fn, "w").write("\n".join(L))
if __name__ == "__main__":
s, u, px, cle = map(float, sys.argv[1:5])
version, door, pref = sys.argv[5], sys.argv[6], sys.argv[7]
frames = (1, 6, 12, 30, 48)
r, P = poses(s, u, px, cle, version, door, frames)
for p in P:
print("f%d q1 %.0f q2 %.0f q3 %.0f q4 %.0f q5 %.0f q6 %.0f elbow %.0f D %.2f rod %.2f" % (p["f"], *[math.degrees(p["q"][k]) for k in ("q1", "q2", "q3", "q4", "q5", "q6", "elbow_inner")], p["q"]["D"],
math.dist(p["TR"], p["KN"])))
svg_yz(r, P, pref + "_yz.svg", s)
svg_xy(r, P, pref + "_xy.svg", s, door)
for k in ("_yz", "_xy"):
subprocess.run([MAGICK, pref + k + ".svg", pref + k + ".png"])