ポイントは、標準の(StandardPointGroupQuery オブジェクト)クエリーまたはカスタム(CustomPointGroupQuery オブジェクト)クエリーのいずれかを使用して選択し、ポイント グループに追加することができます。どちらのクエリーも PointGroupQuery ベース クラスから継承されます。
StandardPointGroupQuery は、GUI を使用してクエリーを作成する「基本的な方法」をカプセル化します。この基本的な方法については、『Civil 3D ユーザ ガイド』の「基本的な方法でポイント グループを作成する」セクションで説明されています。この方法は、[ポイント グループを作成]ダイアログ ボックスのタブを使用して、未処理注釈に基づいてポイントを照合したり、特定のポイントまたはポイントの範囲を含めるか除外したり、他のポイント グループのポイントを含めます。API を使用して同じ効果を実現するには、最初に StandardPointGroupQuery オブジェクトのインスタンスを作成し、次に各種の Include* および Exclude* プロパティを設定してクエリーを作成します。
StandardPointGroupQuery は、クエリーを作成するための次のプロパティを備えています。
プロパティ | 有効な値 |
---|---|
IncludeElevations ExcludeElevations |
カンマ区切りの次の任意の組み合わせ。
例: “<-100,1-100,110.01,>200” – -100 未満、1 以上かつ 100 以下、110.01 に等しい、または 200 超のいずれかの条件を満たす標高を持つすべてのポイントが指定されます。 |
IncludeFullDescriptions ExcludeFullDescriptions IncludeRawDescriptions ExcludeRawDescriptions |
カンマ区切りの 1 つまたは複数の注釈。* は、任意の文字列に一致するワイルドカードです。 例: “IP*” は、IP で始まるすべての注釈に一致します。 |
IncludeNames ExcludeNames |
カンマ区切りの 1 つまたは複数のポイント名。* は、任意の文字列に一致するワイルドカードです。 |
IncludeNumbers ExcludeNumbers |
カンマ区切りの次の任意の組み合わせ。
|
すべての 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 つの部分からなる式で構成されます。
複数の式は、論理的な集合演算子 AND、OR、NOT で区切られます。式の優先順位と式のセットは、括弧を使用して指定することができます。
クエリーの評価の優先順位は、次のとおりです。
次の例は、ポイント グループを作成し、そのポイント グループにカスタム クエリーを追加する方法を示しています。
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 からポイントを削除して、追加および削除した両方のポイントの変更を PointGroup の PointGroupChangeInfo に登録します。
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 ユーザ ガイド』の「ポイント グループのクエリーを理解する」 を参照してください。