import Rhino
import scriptcontext as sc
import rhinoscriptsyntax as rs


def ScaleToDim():
    
    ids = rs.GetObjects("Select object to scale", preselect=True)
    if not ids: return
    
    
    axis= rs.GetPoints(True, False,"Set axis base point.", "Set axis direction." , 2)
    if not axis: retrurn
    if len(axis) !=2:return
    
    oldTarg = 1
    if sc.sticky.has_key("SCALETODIM_TARG"):
        oldTarg =sc.sticky["SCALETODIM_TARG"]
    
    tol = sc.doc.ModelAbsoluteTolerance *10
    targ = rs.GetReal("Set target dimension along axis",oldTarg, tol)
    if not targ: return
    sc.sticky["SCALETODIM_TARG"] = oldTarg
    
    vecDir = axis[1]-axis[0]
    plane = Rhino.Geometry.Plane(axis[0], vecDir)

    for id in ids:
        bb = rs.BoundingBox(id, plane)
        factor = targ/rs.Distance(bb[0], bb[4])
        rs.ScaleObject(id, plane.Origin, [factor, factor, factor])
    
if __name__ == "__main__":
    ScaleToDim()