一个 OdBmBlendElem 元素是一个由两个循环创建的形状。第一个是顶部轮廓,第二个是底部轮廓。此外,您可以使用自己的一组顶点连接,将底部轮廓与顶部轮廓连接起来。否则,将使用默认的顶点映射。
要使用 ODA BimRV 创建一个简单的 OdBmBlendElem:
- 加载族 (.rfa) 文件。
- 从数据库获取有效的草图平面。
- 创建两个闭合轮廓(它们必须位于同一平面上)。
- 创建一组顶点连接或使用空连接。
- 创建一个新的 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);
}
创建一组顶点连接或使用空连接
我们的示例不使用自定义顶点映射。
创建两个轮廓
上面的代码段显示我们获取了文件中已创建的曲线。但是当您自己创建轮廓时,它必须是闭合的且没有交叉。曲线在下面的代码段中以循环形式形成:
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);
对于第一个参数,我们传递带有曲线的底部循环;对于第二个参数,我们传递带有曲线的顶部循环。在此示例中,我们使用在 OdaBimApp 中执行命令时从所选底部循环获取的草图平面 ID。对于顶点连接,我们传递一个空数组。
如果事务无错误完成,则 blendElem 已成功创建。现在您可以将此数据库保存到任何名称的新文件中。