/*
* Example session of using Cassowary.net
* Author: Jo Vermeulen <jo@lumumba.uhasselt.be>
*
* Be sure to link against Cassowary.dll, otherwise
* this won't work!
*
* When using the Mono commandline compiler, add the
* argument -r:Cassowary.dll like this:
* $ mcs -r:Cassowary.dll CassowaryExample.cs
*
* When using Visual Studio, right click on your
* project in the Solution view and choose
* 'Add reference'. Then browse to the Cassowary.dll
* library.
*/
using System;
// we want to use the Cassowary library
using Cassowary;
public class CassowaryExample
{
public static void Main(string[] args)
{
try
{
// create the constraint solver
ClSimplexSolver solver = new ClSimplexSolver();
// add a few variables: x and y
ClVariable x = new ClVariable("x");
ClVariable y = new ClVariable("y");
// we want x to be greater than or equal to
// twice times y
// [x >= 2*y]
solver.AddConstraint(
new ClLinearInequality(x, Cl.GEQ, Cl.Times(2, y)));
// we also like x to be equal to 20, but give it a weak strength
// (meaning stronger constraints will have greater precedence)
// [x = 20]
//
// remember: the default strength is required
solver.AddConstraint(
new ClLinearEquation(x, 20, ClStrength.Weak));
// let's enforce that x and y together are less than or equal to 50
// [x + y <= 50]
//
// unfortunately, we have to wrap a few things in ClLinearExpression
// instances for now (will hopefully be improved in a future release)
solver.AddConstraint(
new ClLinearInequality(Cl.Plus(x, new ClLinearExpression(y)),
Cl.LEQ, new ClLinearExpression(50)));
// there is no need to explicitly call solver.Solve(): by default
// the solver auto solves after each AddConstraint() call
// now print out the solution
Console.WriteLine("x == " + x.Value); // should be x == 20
Console.WriteLine("y == " + y.Value); // should be y == 10
}
catch (ExClRequiredFailure rf)
{
Console.WriteLine("The constraint system could not be solved:");
Console.WriteLine(rf.StackTrace);
}
catch (ExClInternalError ie)
{
Console.WriteLine("There was an internal Cassowary error:");
Console.WriteLine(ie.StackTrace);
}
catch (ExClError e)
{
Console.WriteLine("Other error -- " + e.GetType() + ":");
Console.WriteLine(e.StackTrace);
}
}
}