OdBmBlendElem要素は、2つのループで作成されるフォームです。1つ目は上部輪郭、2つ目は下部輪郭です。さらに、下部輪郭を上部輪郭に接続する独自の頂点接続セットを使用することもできます。そうでない場合は、デフォルトの頂点マッピングが使用されます。
ODA BimRVを使用してシンプルなOdBmBlendElemを作成するには:
- ファミリ (.rfa) ファイルをロードします。
- データベースから有効なスケッチ平面を取得します。
- 2つの閉じた輪郭を作成します (同じ平面上にある必要があります)。
- 頂点接続のセットを作成するか、空のセットを使用します。
- 新しい OdBmBlendElem 要素を作成します。
- OdBmBlendElem の開始パラメーターと終了パラメーターを設定します。
- トランザクションを開きます。
- 作成した要素をデータベースに追加します。
- トランザクションをコミットします。
- ファイルを保存します。
例を使って詳しく見てみましょう。以下に示すコード例は、Examples/TB_DevGuideCommands/BmBlendCreateCmd.cpp ファイルからのものです。このコマンドを使用すると、OdaBimApp Debug アプリケーションで OdBmBlendElem を作成できます。
テンプレートまたは既存のファミリファイルを開く
例:
OdBmDatabasePtr pDb = app.readFile(L”blendExample.rfa”);
データベースから有効なスケッチ平面を取得する
コマンドの例では、下部輪郭として選択した輪郭からスケッチ平面を取得します (スケッチ平面は両方の輪郭で同じです)。
OdBmObjectId idSketchPlane;
bool isSetSketchPlaneId = false;
OdArray<OdBmCurveElemPtrArray> aCurveSegments;
//bot curveSegments;
{
OdBmCurveElemPtrArray botCurveSegments;
OdBmSelectionSetIteratorPtr pItSS = pSet->newIterator();
while (!pItSS->done())
{
OdBmCurveElemPtr pCurve = OdBmCurveElem::cast(pItSS->objectId().openObject());
if (!pCurve.isNull())
{
if (!isSetSketchPlaneId)
{
idSketchPlane = pCurve->getSketchPlaneId();
isSetSketchPlaneId = true;
}
botCurveSegments.push_back(pCurve.get());
}
pItSS->next();
}
aCurveSegments.push_back(botCurveSegments);
}
頂点接続のセットを作成するか、空のセットを使用する
この例では、カスタム頂点マッピングは使用しません。
2つの輪郭を作成する
上記のコードセクションは、ファイル内に既に作成されている曲線を取得することを示しています。ただし、自分で輪郭を作成する場合は、閉じていて交差がない必要があります。曲線は、以下のコードセクションでループ状に形成されます。
for (OdUInt32 iLoop = 0; iLoop < arrProfile.size(); iLoop++)
{
OdBmGCurvePtrArray aCurvesOfLoop = arrProfile[iLoop];
OdBmCurveLoopPtr pCurveLoop = OdBmCurveLoop::createObject();
for (OdUInt32 iCurve = 0; iCurve < aCurvesOfLoop.size(); ++iCurve)
{
OdResult res = pCurveLoop->append(aCurvesOfLoop[iCurve]);
if (res != eOk)
{
pIO->putString(OD_T("Invalid CurveLoops"));
return;
}
}
aCurveLoops.append(pCurveLoop);
}
新しい OdBmBlendElem オブジェクトを作成する
OdBmBlendElemPtr pBlendElem = OdBmBlendElem::createObject();
トランザクションを開く
開かれたトランザクションで、新しく作成されたpBlendElemをデータベースに追加し、開始パラメータと終了パラメータを設定してから、ブレンドジオメトリを作成するメソッドを呼び出します。
ODBM_TRANSACTION_BEGIN(tr, pDb);
tr.start();
pDb->addElement(pBlendElem);
double thickness = pIO->getReal("Enter thickness of blend:", OdEd::kInpDefault, 30.0);
pBlendElem->setParam(OdBm::BuiltInParameter::BLEND_START_PARAM, 0.0);
pBlendElem->setParam(OdBm::BuiltInParameter::BLEND_END_PARAM, thickness);
pBlendElem->createBlend(aCurveLoops[0], aCurveLoops[1], idSketchPlane,
pBlendElem>getVtxConnections());
tr.commit()
ODBM_TRANSACTION_END();
私たちのコマンドでは、ブレンドの厚さをキーボードから取得します。次に、createBlendのシグネチャを説明しましょう。
OdResult createBlend(const OdBmCurveLoopPtr &baseCurveLoop, const OdBmCurveLoopPtr &topCurveLoop, OdBmObjectId sketchPlaneId, const OdBmVtxConnectionsPtr &connections);
最初の引数には曲線を持つ下部ループを渡し、2番目の引数には曲線を持つ上部ループを渡します。この例では、OdaBimAppでコマンドを実行中に選択した下部ループから取得したスケッチ平面IDを使用します。そして、頂点接続には空の配列を渡します。
トランザクションがエラーなしで完了すると、blendElemが正常に作成されます。これで、このデータベースを任意の名前で新しいファイルに保存できます。