2

グリッド間の交差を計算するプラグインを作成しました。交差計算からの座標は、座標の原点として基点位置を使用しています。座標をサーベイポイントの位置に変換したい。このコードで基点の座標を取得しようとしました:

ElementCategoryFilter filter = new ElementCategoryFilter(BuiltInCategory.OST_ProjectBasePoint);

FilteredElementCollector collector = new FilteredElementCollector(doc);
IList<Element> elements = collector.WherePasses(filter).ToElements();

foreach (Element element in elements)
{
    double x = element.get_Parameter(BuiltInParameter.BASEPOINT_EASTWEST_PARAM).AsDouble();
    double y = element.get_Parameter(BuiltInParameter.BASEPOINT_NORTHSOUTH_PARAM).AsDouble();
    double elevation = element.get_Parameter  (BuiltInParameter.BASEPOINT_ELEVATION_PARAM).AsDouble();
}

基点座標を使用して、交差点の計算で見つけた座標を調整し、測量点を原点として使用したいと思いました。しかし、ベースポイントからの値を使用して座標を調整する方法がわかりません。ベースポイントの値は、原点としてサーベイポイントを使用していないようですが、内部座標を使用している可能性があります。または多分私はベースポイントの値を誤解しました。私が試すことができるものへのポインタはありますか?

4

1 に答える 1

1

数日間の作業の後、私は最終的に私の間違いと私の質問への答えを見つけました. iと同じ問題を抱えている人には、これが座標を正しい座標に変換する方法です:

  • 基点から取得した値は測量点からのオフセットですが、私の間違いは私がヨーロッパ人であることです:p 基点から取得した値は単位としてフィートを使用しましたが、私のプロジェクトでは単位としてミリメートルが使用されていました. そこで、revit api から取得したすべての値 (私の場合: ベースポイント値とグリッド交差関数) をプロジェクト単位 (ミリメートル) に変換する変換関数を作成しました。これは、件名に関する素晴らしいブログ投稿です http://thebuildingcoder.typepad.com/blog/2011/12/unit-conversion-and-display-string-formatting.html

  • 私がしなければならなかった 2 番目のことは、基点オフセットを使用して座標を変換することです。ただし、基点座標系には回転がある場合があります。だから私は最初に座標を回転させなければなりませんでした

    double x = (pos.X * Math.Cos(angle)) - (pos.Y * Math.Sin(angle));
    double y = (pos.X * Math.Sin(angle)) + (pos.Y * Math.Cos(angle));
    

そして、座標を変換できます:

new XYZ(position.X + projectBasePoint.X, newPos.Y + projectBasePoint.Y, 0);
于 2012-11-22T07:26:50.963 に答える