## Polyline solution ~~~ import "Apros/Legacy" connect (ma,ca) (mb,cb) = aconnect ma ca mb cb addPolyline :: String -> String -> (Double,Double) -> [(Double,Double)] -> () addPolyline diagram name position xyPoints = ignore $ addRecursively 1 position xyPoints where addRecursively n position xyPoints | length xyPoints <= 30 = addSmallPolyline n position xyPoints addRecursively n (x,y) xyPoints = do swPoint = fst (xyPoints!29) brName = name + "_BR" + show n lvName = name + "_LV" + show n swName = name + "_SW" + show n aadd diagram "BranchAnalog" brName (x-20, y+5) aadd diagram "LV_CHECKER" lvName (x, y) amodi lvName "LVC_LIMIT_VALUE" (fst (xyPoints!29)) aadd diagram "ANALOG_SWITCH" swName (x+20, y+5) (in1, out1) = addSmallPolyline n (x, y+10) (take 30 xyPoints) (in2, out2) = addRecursively (n+1) (x, y+20) (drop 29 xyPoints) connect (brName, "AMUX_OUTPUT_SIGN(1)") (lvName, "LVC_INPUT_SIGN") connect (brName, "AMUX_OUTPUT_SIGN(2)") in1 connect (brName, "AMUX_OUTPUT_SIGN(4)") in2 connect (lvName, "LVC_OUTPUT_SIGN_1") (swName, "SWITCH_CONTROL_S") connect out1 (swName, "SWITCH_INP_SIGN_1") connect out2 (swName, "SWITCH_INP_SIGN_2") ((brName, "AMUX_INPUT_SIGN"), (swName, "SWITCH_OUTP_SIGN")) addSmallPolyline n position xyPoints = do fullName = name + "_" + show n aadd diagram "Polyline" fullName position for [1..length xyPoints] $ \i -> do (x,y) = xyPoints!(i-1) amodi fullName "FUNCTION_X_COORDINATE(\(i))" x amodi fullName "FUNCTION_Y_COORDINATE(\(i))" y amodi fullName "FUNCTION_OK(\(i))" True ((fullName, "FUNCTION_INPUT_SIGN"), (fullName, "FUNCTION_OUTPUT_SIGN")) ~~~