この記事では、角度、弧長、半径、直径、整列、線形といった寸法の要素を作成する方法について説明します。
角度寸法
角度寸法を作成するには、OdBmAngularDim クラスのオブジェクトを使用し、set() 関数を呼び出して必要なパラメータを設定します。例:
static void createAngularDimension(OdBmDatabase* pDb, OdBmUserIO* pIO)
{
OdGePoint3d ptCenterDefault(22.1240720089099, 2.90405468534166, 0.0);
OdGePoint3d ptCenter = pIO->getPoint("Enter center point: ", OdEd::kInpDefault, &ptCenterDefault);
double fRadius = pIO->getReal("Enter radius:", OdEd::kInpDefault, 4.08137512304016);
OdInt32 iViewHandle = pIO->getInt("Enter view id: ", OdEd::kInpDefault, 1839);
OdInt32 iCurve1Handle = pIO->getInt("Enter first reference id: ", OdEd::kInpDefault, 2759);
OdInt32 iCurve2Handle = pIO->getInt("Enter second reference id: ", OdEd::kInpDefault, 2870);
OdBmGArcPtr pGArc = OdBmGArc::createObject();
OdGeVector3d vecX = OdGeVector3d::kXAxis, vecY = OdGeVector3d::kYAxis;
OdResult res = pGArc->set(ptCenter, vecX, vecY, fRadius, 0.0, Oda2PI);
if (eOk != res)
{
pIO->putError(OD_T("Arc creation error"));
return;
}
OdBmAngularDimPtr pAngDim = OdBmAngularDim::createObject();
OdBmObjectId angDimId = pDb->addElement(pAngDim);
OdBmObjectId viewId = pDb->getObjectId(OdDbHandle(iViewHandle));
if (viewId.isNull())
{
pIO->putError(OD_T("View id is null"));
return;
}
OdBmDBViewPtr pView = pDb->getObjectId(OdDbHandle(iViewHandle)).safeOpenObject();
if (pView.isNull())
{
pIO->putError(OD_T("View open error"));
return;
}
OdBmObjectId curveElemId1 = pDb->getObjectId(OdDbHandle(iCurve1Handle));
if (curveElemId1.isNull())
{
pIO->putError(OD_T("First reference is null"));
return;
}
OdBmObjectId curveElemId2 = pDb->getObjectId(OdDbHandle(iCurve2Handle));
if (curveElemId2.isNull())
{
pIO->putError(OD_T("Second reference is null"));
return;
}
OdBmGeomRefPtr pGeomRef1 = OdBmGeomRef::createObject();
pGeomRef1->set(curveElemId1);
OdBmGeomRefPtr pGeomRef2 = OdBmGeomRef::createObject();
pGeomRef2->set(curveElemId2);
res = pAngDim->set(pView, pGArc, pGeomRef1, pGeomRef2);
if (eOk != res)
{
pIO->putError(OD_T("Angular dimension set error"));
return;
}
pIO->putString(OD_T("Angular dimension successfully created"));
}
弧長寸法
弧長寸法を作成するには、OdBmArcLengthDim クラスのオブジェクトを使用し、set() 関数を呼び出して必要なパラメータを設定します。例:
static void createArcLengthDimension(OdBmDatabase* pDb, OdBmUserIO* pIO)
{
OdGePoint3d ptCenterDefault(17.7604422726176, 14.1449565742308, 0.0);
OdGePoint3d ptCenter = pIO->getPoint("Enter center point: ", OdEd::kInpDefault, &ptCenterDefault);
double fRadius = pIO->getReal("Enter radius:", OdEd::kInpDefault, 6.96388715532212);
OdInt32 iViewHandle = pIO->getInt("Enter view id: ", OdEd::kInpDefault, 1839);
OdInt32 iCurveHandle = pIO->getInt("Enter reference id: ", OdEd::kInpDefault, 3499);
OdBmGArcPtr pGArc = OdBmGArc::createObject();
OdGeVector3d vecX = OdGeVector3d::kXAxis, vecY = OdGeVector3d::kYAxis;
OdResult res = pGArc->set(ptCenter, vecX, vecY, fRadius, 0.0, Oda2PI);
if (eOk != res)
{
pIO->putError(OD_T("Arc creation error"));
return;
}
OdBmArcLengthDimPtr pArcLengthDim = OdBmArcLengthDim::createObject();
OdBmObjectId arcLengthDimId = pDb->addElement(pArcLengthDim);
OdBmObjectId viewId = pDb->getObjectId(OdDbHandle(iViewHandle));
if (viewId.isNull())
{
pIO->putError(OD_T("View id is null"));
return;
}
OdBmDBViewPtr pView = pDb->getObjectId(OdDbHandle(iViewHandle)).safeOpenObject();
if (pView.isNull())
{
pIO->putError(OD_T("View open error"));
return;
}
OdBmObjectId curveElemId = pDb->getObjectId(OdDbHandle(iCurveHandle));
if (curveElemId.isNull())
{
pIO->putError(OD_T("Reference is null"));
return;
}
OdBmGeomRefPtr pGeomCurveRef = OdBmGeomRef::createObject();
pGeomCurveRef->set(curveElemId);
OdBmGeomRefPtr pGeomRef1 = OdBmGeomRef::createObject();
pGeomRef1->set(curveElemId, 0L, 1L);
OdBmGeomRefPtr pGeomRef2 = OdBmGeomRef::createObject();
pGeomRef2->set(curveElemId, 0L, 0L);
res = pArcLengthDim->set(pView, pGArc, pGeomCurveRef, pGeomRef1, pGeomRef2);
if (eOk != res)
{
pIO->putError(OD_T("ArcLength dimension set error"));
return;
}
pIO->putString(OD_T("ArcLength dimension successfully created"));
}
半径寸法
半径寸法を作成するには、OdBmRadialDim クラスのオブジェクトを使用し、setRadialDimension() 関数を呼び出して必要なパラメータを設定します。例:
static void createRadialDimension(OdBmDatabase* pDb, OdBmUserIO* pIO)
{
OdGePoint3d ptCenterDefault(-5.27049660828928, 12.3608082899518, 0.0);
OdGePoint3d ptCenter = pIO->getPoint("Enter center point: ", OdEd::kInpDefault, &ptCenterDefault);
OdInt32 iViewHandle = pIO->getInt("Enter view id: ", OdEd::kInpDefault, 1839);
OdInt32 iCurveHandle = pIO->getInt("Enter reference id: ", OdEd::kInpDefault, 3334);
OdBmRadialDimPtr pRadialDim = OdBmRadialDim::createObject();
OdBmObjectId radialDimId = pDb->addElement(pRadialDim);
OdBmObjectId viewId = pDb->getObjectId(OdDbHandle(iViewHandle));
if (viewId.isNull())
{
pIO->putError(OD_T("View id is null"));
return;
}
OdBmDBViewPtr pView = pDb->getObjectId(OdDbHandle(iViewHandle)).safeOpenObject();
if (pView.isNull())
{
pIO->putError(OD_T("View open error"));
return;
}
OdBmObjectId curveElemId = pDb->getObjectId(OdDbHandle(iCurveHandle));
if (curveElemId.isNull())
{
pIO->putError(OD_T("Reference is null"));
return;
}
OdBmGeomRefPtr pGeomCurveRef = OdBmGeomRef::createObject();
pGeomCurveRef->set(curveElemId);
OdResult res = pRadialDim->setRadialDimension(pView, pGeomCurveRef, ptCenter);
if (eOk != res)
{
pIO->putError(OD_T("Radial dimension set error"));
return;
}
pIO->putString(OD_T("Radial dimension successfully created"));
}
直径寸法
直径寸法を作成するには、OdBmRadialDi クラスのオブジェクトを使用し、setDiameterDimension() 関数を呼び出して必要なパラメータを設定します。例:
static void createDiameterDimension(OdBmDatabase* pDb, OdBmUserIO* pIO)
{
OdGePoint3d ptCenterDefault(4.49545743186403, 10.2000307739949, 0.0);
OdGePoint3d ptCenter = pIO->getPoint("Enter center point: ", OdEd::kInpDefault, &ptCenterDefault);
OdInt32 iViewHandle = pIO->getInt("Enter view id: ", OdEd::kInpDefault, 1839);
OdInt32 iCurveHandle = pIO->getInt("Enter reference id: ", OdEd::kInpDefault, 2706);
OdBmRadialDimPtr pRadialDim = OdBmRadialDim::createObject();
OdBmObjectId radialDimId = pDb->addElement(pRadialDim);
OdBmObjectId viewId = pDb->getObjectId(OdDbHandle(iViewHandle));
if (viewId.isNull())
{
pIO->putError(OD_T("View id is null"));
return;
}
OdBmDBViewPtr pView = pDb->getObjectId(OdDbHandle(iViewHandle)).safeOpenObject();
if (pView.isNull())
{
pIO->putError(OD_T("View open error"));
return;
}
OdBmObjectId curveElemId = pDb->getObjectId(OdDbHandle(iCurveHandle));
if (curveElemId.isNull())
{
pIO->putError(OD_T("Reference is null"));
return;
}
OdBmGeomRefPtr pGeomCurveRef = OdBmGeomRef::createObject();
pGeomCurveRef->set(curveElemId);
OdResult res = pRadialDim->setDiameterDimension(pView, pGeomCurveRef, ptCenter);
if (eOk != res)
{
pIO->putError(OD_T("Diameter dimension set error"));
return;
}
pIO->putString(OD_T("Diameter dimension successfully created"));
}
線形寸法と整列寸法
線形寸法を作成するには、OdBmLinearDimString クラスのオブジェクトを使用し、set() 関数を呼び出して必要なパラメータを設定します。例:
static void createLinearDimension(OdBmDatabase* pDb, OdBmUserIO* pIO)
{
OdGePoint3d ptStartDefault(-8.645793834855073, -7.795546120725747, 0.0);
OdGePoint3d ptEndDefault(10.899522456510667, -7.795546120725747, 0.0);
OdGePoint3d ptStart = pIO->getPoint("Enter start point: ", OdEd::kInpDefault, &ptStartDefault);
OdGePoint3d ptEnd = pIO->getPoint("Enter end point: ", OdEd::kInpDefault, &ptEndDefault);
OdInt32 iViewHandle = pIO->getInt("Enter view id: ", OdEd::kInpDefault, 1839);
OdBmGLinePtr pGLine = OdBmGLine::createObject();
OdResult res = pGLine->set(ptStart, ptEnd);
if (eOk != res)
{
pIO->putError(OD_T("Line creation error"));
return;
}
OdBmLinearDimStringPtr pLinearDimString = OdBmLinearDimString::createObject();
OdBmObjectId linearDimId = pDb->addElement(pLinearDimString);
OdBmObjectId viewId = pDb->getObjectId(OdDbHandle(iViewHandle));
if (viewId.isNull())
{
pIO->putError(OD_T("View id is null"));
return;
}
OdBmDBViewPtr pView = pDb->getObjectId(OdDbHandle(iViewHandle)).safeOpenObject();
if (pView.isNull())
{
pIO->putError(OD_T("View open error"));
return;
}
OdInt32 numRefs = pIO->getInt("Enter number of references:", OdEd::kInpDefault, 3);
OdBmGeomRefPtrArray arrGeomRefs; // 3580, 3957, 4054
for (OdUInt32 i = 0; i < numRefs; i++)
{
OdInt32 iCurveHandle = pIO->getInt("Enter reference id: ", OdEd::kInpDefault);
OdBmObjectId curveElemId = pDb->getObjectId(OdDbHandle(iCurveHandle));
if (curveElemId.isNull())
{
pIO->putError(OD_T("Reference is null"));
return;
}
OdBmGeomRefPtr pGeomRef = OdBmGeomRef::createObject();
pGeomRef->set(curveElemId);
arrGeomRefs.append(pGeomRef);
}
res = pLinearDimString->set(pView, pGLine, arrGeomRefs);
if (eOk != res)
{
pIO->putError(OD_T("Linear dimension set error"));
return;
}
pIO->putString(OD_T("Linear dimension successfully created"));
}
整列寸法または複数の参照を持つ線形寸法を作成する方法については、BimRv\Examples\TB_DevGuideCommands\BmDocCreateDimensionCmd.cpp ファイルを参照してください。
サンプルコードの出力を確認するには、OdaBimApp で BmDocCreateDimensionCmd コマンドを実行します。
詳細については、ODA ドキュメントを参照してください。