クエリーを使用してポイントグループにポイントを追加する

ポイントは、標準の(StandardPointGroupQuery オブジェクト)クエリーまたはカスタム(CustomPointGroupQuery オブジェクト)クエリーのいずれかを使用して選択し、ポイント グループに追加することができます。どちらのクエリーも PointGroupQuery ベース クラスから継承されます。

StandardPointGroupQuery は、GUI を使用してクエリーを作成する「基本的な方法」をカプセル化します。この基本的な方法については、『Civil 3D ユーザ ガイド』の「基本的な方法でポイント グループを作成する」セクションで説明されています。この方法は、[ポイント グループを作成]ダイアログ ボックスのタブを使用して、未処理注釈に基づいてポイントを照合したり、特定のポイントまたはポイントの範囲を含めるか除外したり、他のポイント グループのポイントを含めます。API を使用して同じ効果を実現するには、最初に StandardPointGroupQuery オブジェクトのインスタンスを作成し、次に各種の Include* および Exclude* プロパティを設定してクエリーを作成します。

StandardPointGroupQuery は、クエリーを作成するための次のプロパティを備えています。

StandardPointGroupQuery プロパティ
プロパティ 有効な値

IncludeElevations

ExcludeElevations

カンマ区切りの次の任意の組み合わせ。

  • 1 つの数値
  • ハイフンで区切られた下限と上限で指定される標高範囲(1-100 など)
  • > または < に続く数値これにより、指定した数値よりより大きいか、または小さいすべての標高が指定されます。

: “<-100,1-100,110.01,>200” – -100 未満、1 以上かつ 100 以下、110.01 に等しい、または 200 超のいずれかの条件を満たす標高を持つすべてのポイントが指定されます。

IncludeFullDescriptions

ExcludeFullDescriptions

IncludeRawDescriptions

ExcludeRawDescriptions

カンマ区切りの 1 つまたは複数の注釈。* は、任意の文字列に一致するワイルドカードです。

: “IP*” は、IP で始まるすべての注釈に一致します。

IncludeNames

ExcludeNames

カンマ区切りの 1 つまたは複数のポイント名。* は、任意の文字列に一致するワイルドカードです。

IncludeNumbers

ExcludeNumbers

カンマ区切りの次の任意の組み合わせ。

  • 個々 のポイント番号
  • ハイフンで区切られた下限と上限で指定されるポイント番号の範囲(100-105 など)。

すべての Include* プロパティがまとめて OR 演算され、さらにすべての Exclude* プロパティがまとめて OR 演算されて、最終的なクエリー文字列が作成されます。次の例は、プロパティからクエリー文字列を作成する方法を示しています。

// _civildoc is the active CivilDocument instance.
ObjectId pointGroupId = _civildoc.PointGroups.Add("Example Point Group1");
PointGroup pointGroup = pointGroupId.GetObject(OpenMode.ForWrite) as PointGroup;

StandardPointGroupQuery standardQuery = new StandardPointGroupQuery();
standardQuery.IncludeElevations = "100-200";
standardQuery.IncludeFullDescriptions = "FLO*";
standardQuery.IncludeNumbers = ">2200";
standardQuery.ExcludeElevations = "150-155";
standardQuery.ExcludeNames = "BRKL";
standardQuery.UseCaseSensitiveMatch = true;

pointGroup.SetQuery(standardQuery);
pointGroup.Update();

_editor.WriteMessage("Number of points selected: {0}\n  Query string: {1}\n\n",
    pointGroup.PointsCount, standardQuery.QueryString);

// output:
// Query string: (FullDescription='FLO*' OR PointElevation=100-200 OR 
// PointNumber>2200) AND '' NOT (Name='BRKL' OR PointElevation=150-155)

CustomPointGroupQuery を使用すると、直接クエリー文字列を指定できますが、クエリー演算子のより高度な知識が必要です。このクエリー作成メソッドを使用すると、StandardPointGroupQuery オブジェクトを使用した場合は指定できないネストされたクエリーを作成することができます。

カスタム クエリーは、次の 3 つの部分からなる式で構成されます。

  1. プロパティ
  2. 比較演算子 > < >= <= =

複数の式は、論理的な集合演算子 AND、OR、NOT で区切られます。式の優先順位と式のセットは、括弧を使用して指定することができます。

クエリーの評価の優先順位は、次のとおりです。

  1. 括弧内の式。最初に最も内側の式が評価されます。
  2. NOT
  3. 比較演算子
  4. AND
  5. または

次の例は、ポイント グループを作成し、そのポイント グループにカスタム クエリーを追加する方法を示しています。

ObjectId pointGroupId2 = _civildoc.PointGroups.Add("Example Point Group2");
PointGroup pointGroup2 = pointGroupId2.GetObject(OpenMode.ForWrite) as PointGroup;
CustomPointGroupQuery customQuery = new CustomPointGroupQuery();
string queryString = "(RawDescription='GR*') AND (PointElevation>=100 AND PointElevation<=300)";
customQuery.QueryString = queryString;
pointGroup2.SetQuery(customQuery);
pointGroup2.Update();
_editor.WriteMessage("PointGroup2: \n # points selected: {0}\n",
    pointGroup2.PointsCount);

PointGroup の保留中の変更には、PointGroup.GetPendingChanges() メソッドからアクセスできます。このメソッドは、PointGroupChangeInfo オブジェクトを返します。PointGroup の保留中の変更情報は、次の場合に更新されます。

クエリー自体が変更されると、変更が登録されないことに注意してください。

次の例では、上記のカスタム クエリーに一致するポイントを追加し、PointGroup からポイントを削除して、追加および削除した両方のポイントの変更を PointGroupPointGroupChangeInfo に登録します。

Point3d point3d = new Point3d(100,200,225); // elevation will be matched
string rawDesc = "GRND"; // raw description will be matched
_civildoc.CogoPoints.Add(point3d, rawDesc);

// Point # 779 is in the point group:
_civildoc.CogoPoints.Remove(779);

PointGroupChangeInfo pointGroupChangeInfo = pointGroup2.GetPendingChanges();
_editor.WriteMessage("Point group {0} pending changes: \n add: {1} \n remove: {2}\n",
    pointGroup2.Name, pointGroupChangeInfo.PointsToAdd.Length, pointGroupChangeInfo.PointsToRemove.Length);

// changes are applied with update:
pointGroup2.Update();

ポイント グループのクエリーの詳細は、『Civil 3D ユーザ ガイド』の「ポイント グループのクエリーを理解するを参照してください