| OCR Text |
Show 41 stralnts do not contain a constraint relation. The constraint system assumes that if one of the constrained objects is modified, the constraint is unsatisfied. An example constraint is the plus2 constraint which constrains three objects by a c b + c . procedure plua2Conatraint( a, b, c); begin fire( b+c, a, b, c); fire( a-c, b, a, c); fire ( a-b, c, a·, b ) ; end; The firing clause fire ( b+c, a, b, c ) should be interpreted as "in order to com-pute a given that b and c have valid values, assign a the value b+C". A may only be assigned to H a was not one of the values which was modified and invalidated the constraint. B or c may not have valid values if the modeler has not supplied any values and the constraint system has not yet deduced any values for them. As an example, assume that a has been modified and c does not yet have a value. When the constraint fires, it cannot change a, and it cannot deduce a new value for b because c does not have a value. The only possible way for the constraint to fire is to compute c. 5.2 Constraint Instances. When a constraint is placed on a set of objects, a constraint instance is created. A constraint instance contains a pointer to a constraint procedure, a list of constrained objects, a constraint group identifier, a list of dependent constraint group identifiers, and a graph traversal mark. % define new object type, Constraintinstance dafObject( Constraintinstance, ) ; Constraint, % constraint Objects, % list of constrained objects Group, Dependants, Suspect, Binda, Mark % constraint group identifier % list of dependent constraint groups % is the constraint unsatisfied? % Objects recomputed by constraint % connected component traversal mark The constraint is 'fired' by executing the constraint procedure with the constrained ob- |