在 BimRV 中创建 BlendElem 元素

一个 OdBmBlendElem 元素是一个由两个循环创建的形状。第一个是顶部轮廓,第二个是底部轮廓。此外,您可以使用自己的一组顶点连接,将底部轮廓与顶部轮廓连接起来。否则,将使用默认的顶点映射。

要使用 ODA BimRV 创建一个简单的 OdBmBlendElem:

  1. 加载族 (.rfa) 文件。
  2. 从数据库获取有效的草图平面。
  3. 创建两个闭合轮廓(它们必须位于同一平面上)。
  4. 创建一组顶点连接或使用空连接。
  5. 创建一个新的 OdBmBlendElem 元素。
  6. 为 OdBmBlendElem 设置起始和结束参数。
  7. 打开事务。
  8. 将创建的元素添加到数据库。
  9. 提交事务。
  10. 保存文件。

让我们通过一个例子更仔细地看看。下面显示的代码示例来自 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 已成功创建。现在您可以将此数据库保存到任何名称的新文件中。

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用