private void CartesianProduct(RelationSymbol returnSymbol, SetSymbol parameterSymbolA, SetSymbol parameterSymbolB, Func <TriangleMesh, TriangleMesh, bool> operation) { foreach (var ifcEntityA in parameterSymbolA.Entites) { var meshA = GetMesh(ifcEntityA); if (meshA == null) { continue; } foreach (var ifcEntityB in parameterSymbolB.Entites) { var meshB = GetMesh(ifcEntityB); if (meshB == null) { continue; } if (operation(meshA, meshB)) { returnSymbol.AddTuple(new[] { ifcEntityA, ifcEntityB }); } } } }
public void SouthStrict(RelationSymbol returnSymbol, SetSymbol parameterSymbolA, SetSymbol parameterSymbolB) { CartesianProduct(returnSymbol, parameterSymbolA, parameterSymbolB, directionalOperators.SouthOfStrict); }
public void Distance(RelationSymbol returnSymbol, SetSymbol parameterSymbolA, SetSymbol parameterSymbolB) { CartesianProduct(returnSymbol, parameterSymbolA, parameterSymbolB, directionalOperators.AboveOfRelaxed); }
public void NorthRelaxed(RelationSymbol returnSymbol, SetSymbol parameterSymbolA, SetSymbol parameterSymbolB) { CartesianProduct(returnSymbol, parameterSymbolA, parameterSymbolB, directionalOperators.NorthOfRelaxed); }
public void Overlap(RelationSymbol returnSymbol, SetSymbol parameterSymbolA, SetSymbol parameterSymbolB) { CartesianProduct(returnSymbol, parameterSymbolA, parameterSymbolB, overlapOperator.Overlap); }
public void DeassociaterSet(SetSymbol parameterSym1, string[] exAtts, RelationSymbol returnSym) { Console.WriteLine("Deassociater'ing..."); returnSym.SetTuples(GetTuplesSet(parameterSym1.Entites, exAtts)); }
public void AttributeFilterSet(SetSymbol parameterSym1, PredicateNode predicateNode, SetSymbol returnSym) { Console.WriteLine("AttributeFilter'ing..."); var result = parameterSym1.Entites.Where(e => AttributeSetTestLocal(e, predicateNode)); returnSym.EntityDic = result.ToDictionary(e => e.Id); }
protected void OnSetSymbol(TSymbol symbol, int row, int column) { SetSymbol?.Invoke(symbol, row, column); }