Używanie klasyfikacji przy implementowaniu reguł

Po dodaniu klasyfikacji do bieżącej bazy danych można ich użyć w standardowym dodatku plug-in do obliczania powierzchni. W zasadzie użytkownik może ustalić klasyfikację na podstawie pomieszczenia przesłanego do reguły przy użyciu istniejącego interfejsu API środowiska .NET w programie AutoCAD Architecture. Jest to jednak zadanie skomplikowane, zwłaszcza z tego powodu, że trzeba stale używać globalnej nazwy klasyfikacji w regułach, aby pracować ze wszystkimi lokalizacjami wyświetlanej nazwy klasyfikacji. Z tego powodu klasa AecSpaceOffsetClassification udostępnia funkcję upraszającą ten proces.

Odczytanie globalnej nazwy klasyfikacji z obiektu pomieszczenia

Klasa AecSpaceOffsetClassification posiada metodę uzyskiwania globalnej nazwy klasyfikacji z obiektu pomieszczenia, dzięki czemu można ją porównać z nazwami zdefiniowanymi przez tabelę łańcuchów źródłowych w celu podjęcia decyzji o sposobie odsunięcia obwiedni. Ta metoda jest publicznym łańcuchem GetClassificationName(Object Id objId). W poniższym przykładzie pokazano regułę przylegania obwiedni, w której zastosowano klasyfikacje opisane w przykładowej tabeli powyżej. Z uwagi na to, że reguła musi być w stanie uzyskać dostęp do obiektu AecSpaceOffsetClassification normy, norma jest przesyłana przez konstruktora i przypisywana do członka reguły. Oznacza to, że trzeba utworzyć regułę w implementacji InitRules() normy z odnośnikiem „this” do bieżącej normy.

public class BoundingAdjacencyRuleGross : AecBoundingAdjacencyRule
{
private AecSpaceOffsetStandardISA standard;
public BoundingAdjacencyRuleGross(AecSpaceOffsetStandardISA standardISA)
{
standard = standardISA;
} public override AecSpaceOffsetInfo Apply(ObjectId idSpace, ObjectId idObject, ObjectId idAdjSpace) {
String classificationNameThis = "";
String classificationNameAdjacent = "";
if (!idSpace.IsNull)
{
classificationNameThis = standard.Classification.GetClassificationName(idSpace);
} if (!idAdjSpace.IsNull) {
classificationNameAdjacent = standard.Classification.GetClassificationName(idAdjSpace);
} if (idAdjSpace.IsNull || classificationNameAdjacent =="Exterior") {
return new AecSpaceOffsetInfo(AecSpaceOffsetType.Opposite);
} if (!idAdjSpace.IsNull && classificationNameThis == "Exterior") {
return new AecSpaceOffsetInfo(AecSpaceOffsetType.Adjacent);
} if (classificationNameThis == "Office") {
return new AecSpaceOffsetInfo(AecSpaceOffsetType.Adjacent);
} // for the rest return new AecSpaceOffsetInfo(AecSpaceOffsetType.Center);
}
}