Использование классификаций при реализации правила

После добавления к текущей базе данных классификаций, их можно использовать в подключаемых модулях стандартов расчета площади. Можно определить классификацию исходя из пространства, если к нему применено правило с существующим API .NET для AutoCAD Architecture 2022 toolset. Но это может оказаться сложным, особенно из-за того, что в правилах требуется всегда использовать глобальные имена классификаций для работы со всеми локальными версиями выводимых имен классификаций. Для упрощения используется класс AecSpaceOffsetClassification.

Считывание имени глобальной классификации из объекта пространства

В классе AecSpaceOffsetClassification имеется метод для получения имени глобальной классификации из объекта пространства, которое можно сравнить с именами, определенными таблицей строк ресурсов, для определения границ смещения. Метод представляет собой открытую строку GetClassificationName(Object Id objId). В следующем примере показано правило ограничивающих смежностей, использующее классификации, описанные в примерной таблице выше. Правилу требуется доступ к объекту AecSpaceOffsetClassification стандарта, поэтому стандарт передается конструктору и назначается членам правила. Это означает, что в реализации стандарта InitRules() необходимо создать правило с "такой" ссылкой на текущий стандарт.

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);
}
}