概要 - 境界オブジェクト規則

(SpaceOffsetRulesManager.AecBoundingObjectRule 基本クラス)

境界オブジェクト規則を使用すると、構造部材など、スペースのベース輪郭を区切っているオブジェクトを、区切っていないものとしてマークし、オフセット輪郭を作成する際に処理されないようにすることができます。 各標準は、それぞれの境界オフセット タイプに対して、複数の境界オブジェクト規則を定義して適用することができます。

境界オブジェクト規則の実装

カスタム境界オブジェクト規則を実装するには、SpaceOffsetRulesManager.AecBoundingObjectRule 基本クラスから派生した新しいクラスを追加する必要があります。 新しいクラスは、基本クラスの Apply インタフェースを実装する必要があり、AecSpaceOffsetRuleBase.RegisterType() 基本メソッドを呼び出すことで、コンストラクタにおいて呼び出される必要のあるオブジェクト タイプに登録する必要があります。 この規則タイプの Apply メソッドの構文は次のとおりです。

public abstract bool Apply(Autodesk.AutoCAD.DatabaseServices.ObjectId idSpace,
Autodesk.AutoCAD.DatabaseServices.ObjectId idObject);

1 番目の引数は、オフセット境界の輪郭を計算する現在のスペースです。 2 番目の引数 idObject は、スペースを区切るオブジェクトのオブジェクト ID です。 Apply メソッド内で、スペース オブジェクトと境界オブジェクトを開いて特定のプロパティを検索し、生成する輪郭にこのオブジェクトが影響を与えるかどうかを決定することができます。 メソッドが False を返す場合は、オブジェクトの境界がオフセット プロファイルから除去されます。これは、オフセット規則が適用されるときに、そのオブジェクトがそれ以上考慮されないことを意味します。 次の例は、BoundingObjectRuleGross と呼ばれる新しいスペース規則クラスに対するフレームワークを示します。

namespace AecSpaceOffsetStandardSample
{
public class BoundingObjectRuleBasic: AecBoundingObjectRule
{
public BoundingObjectRuleGross()
{
RegisterType(typeof(kAllTypes));
} public override bool Apply(ObjectId idSpace, ObjectId idObject) {
//return false to mark object as non-contributing
}
}
}

サンプル境界オブジェクト規則 BoundingObjectRuleGross

次の例では、サンプル プロジェクトのグロス輪郭に対して使用される境界オブジェクト規則の実装を示します。 このルールは、輪郭から構造部材によって区切られているすべてのセグメントを除去します。 これは、構造部材がスペースのベース輪郭を区切っていたとしても考慮されない場合に、スペースのグロス面積を定義する一般的な場合です。

public class BoundingObjectRuleGross : AecBoundingObjectRule
{
public BoundingObjectRuleGross()
{
RegisterType(typeof(kAllTypes));
} public override bool Apply(ObjectId idSpace, ObjectId idObject) {
bool result=true;
Autodesk.AutoCAD.DatabaseServices.Database db =idObject.Database;
using (Autodesk.AutoCAD.DatabaseServices.Transaction transaction =db.TransactionManager.StartTransaction())
{
Member member = transaction.GetObject(idObject, OpenMode.ForRead) as Member;
if ( member == null )
{
MemberType memType = member.MemberType;
if ( memType == MemberType.Column )
{
result = false;
}
}
transaction.Commit(); } return result;
}
}

下の図に、ネット境界(緑)は柱を含むが、グロス境界(青)は柱を無視するという、この規則の適用例を示します。