0

Revit で変換されたファイルの 2D ビューアで部屋を色で塗りつぶそうとしています。

「部屋」が定義された Revit ファイルがあります。Revit ファイルには、「Floor one」、「Floor two」と定義されたシートもあります。Forge APIを使用して変換すると

Revit 3D ビューの svf と、「フロア 1」および「フロア 2」シートの f2d ファイルを取得します。

svf については、dbidsの他の投稿から fragid を取得できました

今、私はf2dファイルに対して同じことをしようとしています.

を使用して壁の形状がわかっている場合、部屋の壁の色を変更できます。

viewer.setThemingColor(dbid, new THREE.Vector4(0, 1, 1,1));

私が今やりたいことは、2D で形状のフラギッドを取得できるようにすることです。これにより、使用する線の始点と終点を取得できます。これらの頂点を知りたいので、カスタム メッシュを作成して、部屋の「ハッチング」用の色で塗りつぶすことができます。

私の問題は、f2d 形式がわからないことです。すべてが 1 つのメッシュのようで、シェーダーが線の色を制御できるようになっています。部屋のフラグメントリストを表示する方法について誰か教えてもらえますか?

これは私が3d svfに使用したものです

function getFragIdFromDbId(viewer, dbid) {
 var returnValue;
 var it = viewer.model.getData().instanceTree;
 it.enumNodeFragments(dbid, function (fragId) {
   //console.log("dbId: " + dbid + " FragId : " + fragId);
   returnValue = fragId;
 }, false);
  return returnValue;
}

f2d に viewer.model.getData().instanceTree = undefined がある場合、f2d で同じことを行うには何を使用できますか?

4

1 に答える 1

1

フラグメントは複数の dbid のジオメトリを持つことができ、dbid のジオメトリは複数のフラグメントに含めることができます。役立つ 2D スナッパーで使用されるAutodesk.Viewing.Private.VertexBufferReaderで抽出することが可能です。次のようなことができます。

  1. FragmentList.dbid2fragId[dbid] は、dbid のジオメトリを含むフラグメント ID またはフラグメント ID の配列を返します。
  2. フラグメントをループして、各フラグメントのジオメトリを取得します。
  3. ジオメトリを使用して VertexBufferReader を作成します。
  4. VertexBufferReader を使用して、dbid のジオメトリを見つけます。

ジオメトリを見つける最善の方法は、VertexBufferReader.enumGeomsForObject(dbid, callback) を使用することです。コールバック オブジェクトを使用して、dbid のジオメトリを列挙します。コールバック オブジェクトには、次のオプション関数が必要です。

  • onLineSegment(x0、y0、x1、y1、viewport_id)
  • onCircularArc(centerX、centerY、startAngle、endAngle、radius、viewport_id)
  • onEllipticalArccenterX、centerY、startAngle、endAngle、メジャー、マイナー、チルト、viewport_id)
  • onTriangleVertex(x, y, ビューポート ID)

プリミティブだけが必要で、バッファー内の場所が必要ない場合は、これで問題ありません。

VertexBufferReaderを使用して、dbid を探してバッファ内のジオメトリをループすることもできます。これには、頂点バッファー内のプリミティブが、.useInstancing()が false の場合は 4 つの頂点であり、.useInstancing()が true の場合は 1 つの頂点であることを知っている必要があります。また、 .getVertexFlagsAt(vertexIndex)からプリミティブ型をデコードする必要がありますが、フラグをデコードするためのパブリックな値やメソッドはありません。

于 2016-10-10T12:22:41.387 に答える