# Convert Non-designable Models to Designable Models

It is quite straightforward to convert non-designable parametric models into designable models. The example below shows how. The highlighted sections are the changes you need to make to convert a non-designable model (left) to a designable model (right). Essentially, all you need to do is to redefine model parameters of interest to be design variables.
Non-Designable, Parametric Model
ax = 0
ay = 0
bx = 40
by = 200

# Define the points A, B
pa = Point (ax,ay,0)
pb = Point (bx,by,0)

# Revolute joint at A
zploc = pa + [0,0,1]
p1.A = Marker (body=p1, qp=pa, zp=zploc)
p2.A = Marker (body=p2, qp=pa, zp=zploc)
ja = Joint (type="REVOLUTE", i=p2.A, j=p1.A)

# spherical joint at B
p2.B = Marker (body=p2, qp=pb)
p3.B = Marker (body=p3, qp=pb)
jb = Joint (type="SPHERICAL", i=p3.B, j=p2.B)
Designable Model
ax = Dv (b=0, label="ax")
ay = Dv (b=0, label="ay")
bx = Dv (b=40, label="bx")
by = Dv (b=200, label="by")

# Define the points A, B
pa = Point (ax,ay,0)
pb = Point (bx,by,0)

# Revolute joint at A
zploc = pa + [0,0,1]
p1.A = Marker (body=p1, qp=pa, zp=zploc)
p2.A = Marker (body=p2, qp=pa, zp=zploc)
ja = Joint (type="REVOLUTE", i=p2.A, j=p1.A)

# spherical joint at B
p2.B = Marker (body=p2, qp=pb)
p3.B = Marker (body=p3, qp=pb)
jb = Joint (type="SPHERICAL", i=p3.B, j=p2.B)