Revit でトランスフォームを使用して、個々の梁の立面図を表示しています (詳細化のため)。これは、梁が平らである限り (始点と終点のオフセットが同じ) うまく機能しますが、梁が傾斜している場合は、終点を「平らにする」必要があります。
実際の始点/終点に沿って単位ベクトルを定義しようとしました。また、変換の定義された「.Origin」を通る XY 平面上でそのベクトルに垂直な線を定義しようとしました。次に、単純な方程式を使用して、これら 2 つのベクトルの法線を定義しました... double newx = first.Y * second.Z - first.Z * second.Y; double newy = first.Z * second.X - first.X * second.Z; double newz = first.X * second.Y - first.Y * second.X; double vectlong = Math.Sqrt(newx * newx + newy * newy + newz * newz); XYZ 法線 = new Autodesk.Revit.DB.XYZ(newx / vectlong, newy / vectlong, newz / vectlong);
次に、これらの 3 つのベクトルを ".set_Basis" 0、1、および 2 として使用しました。
このコードは、梁の始点と終点を強制的に平坦にしている限り (生成された「法線」が有効であることを示しています) 機能しますが、コードを削除して平坦化し、終点の実際の Z 値を使用するとこれらの値を使用しようとすると、プログラムが失敗します。
ビームの中央を通るセクションを生成する SDK サンプル (CreateViewSection) も同じ問題を発見したようですが、プログラマーはあきらめて、同じ XY 平面上に既に存在するビームのみを受け入れるようにプログラムを単純に強制しました。ビームの実際の「ルール」です。
3 つのベクトルの計算値をエクスポートし、それらがすべて単位長で正規直交であることを確認しました。変換に必要なのはこれだけです。これらの基底値が失敗する理由を誰か説明できますか?