要创建带有修剪循环的边界表示模型(例如,圆锥体),请使用以下步骤:
1. 生成具有B-Rep拓扑的PRC文件。创建此类文件的示例可在OdPrcCreate中找到,并在PRC文档的使用表示实体(需要登录)中进行了描述。
2. 将连接体和壳添加到BrepData:
OdPrcConnexPtr pCurConnex = OdPrcConnex::createObject();
brepData->addConnex(pCurConnex);
OdPrcShellPtr pCurShell = OdPrcShell::createObject();
pCurConnex->addShell(pCurShell);
3. 创建一个面和圆锥曲面,并进行变换,例如,圆锥体的高度从0.001799999999999952到无穷大:
OdPrcFacePtr pCurFace = OdPrcFace::createObject();
OdPrcConePtr pPrcCone = OdPrcCone::createObject();
OdGeMatrix3d matr;
OdGePoint3d orPnt(0.00848600820104306,0.01503506648794965,0.0162750000534332);
OdGeVector3d x(1,0,1.40002853754603e-008);
OdGeVector3d y(0,-1,0);
OdGeVector3d z(x.crossProduct(y));
matr.setCoordSystem(orPnt,x,y,z);
OdPrcTransformation3d trans;
trans.set(matr);
pPrcCone->setTransformation(&trans);
pPrcCone->setBottomRadius(0.0018);
pPrcCone->setSemiAngle(0.7853981633974617);
pPrcCone->setUVParameterization(OdPrcUVParameterization(0,Oda2PI,-0.001799999999999952,12345));
4. 为第一个修剪循环创建一个圆:
OdPrcCircle3dPtr crvCircle = OdPrcCircle3d::createObject();
OdPrcContentCurve &crvContent = crvCircle->contentCurve();
// set name
crvContent.baseGeometry().name().setName(L"named circle in crvContent");
// add some data to params
OdPrcParameterization curveParams(0, Oda2PI);
crvCircle->setParameterization( curveParams );
// can add transformation if needed here
OdGeMatrix3d matr;
OdGePoint3d orPnt(0.008486008203843119,0.01503506648794965,0.0160750000534332);
OdGeVector3d x(1,0,1.40002853754603e-008);
OdGeVector3d y(0,-1,0);
OdGeVector3d z(x.crossProduct(y));
matr.setCoordSystem(orPnt,x,y,z);
OdPrcTransformation3d transform;
transform.set(matr);
crvCircle->setTransformation(&transform);
// TBD
crvCircle->setRadius(0.002);
5. 创建第一个边并设置在步骤4中创建的几何体:
OdPrcEdgePtr edge = OdPrcEdge::createObject();
edge->contentWireEdge().curve() = crvCircle;
6. 创建第一个CoEdge并设置在步骤5中创建的边。共边是定向边。两个共边与沿边的相同或相反方向的边点相关。每个共边都与两个相邻/相邻面之一的循环相关联。
OdPrcCoEdgePtr coEdge = OdPrcCoEdge::createObject();
coEdge->setEdge(edge);
7. 设置第一个CoEdge的方向以指示循环的相对方向。kOpposite是相邻共边的相反方向。
coEdge->setOrientationWithLoop(kOpposite);
8. 创建第一个循环并将步骤6中创建的CoEdge添加到该循环。创建的循环必须添加到面。循环是共边的连接序列,描述了面的边界。通常,循环是闭合的,没有起点或终点。
OdPrcLoopPtr loop = OdPrcLoop::createObject();
pCurFace->addLoop(loop);
loop->addCoEdge(coEdge);
9. 设置第一个循环的方向,以指定循环相对于曲面法向量的方向。以下示例指定方向垂直于曲面法向量(或与曲面平行)。
loop->setOrientationWithSurface(kSame);
10. 为第二个循环创建几何体:
OdPrcCircle3dPtr crvCircle1 = OdPrcCircle3d::createObject();
OdPrcContentCurve &crvContent = crvCircle1->contentCurve();
// set name
crvContent.baseGeometry().name().setName(L"named circle in crvContent");
// add some data to params
OdPrcParameterization curveParams(0, Oda2PI);
crvCircle1->setParameterization( curveParams );
// can add transformation if needed here
OdGeMatrix3d matr;
OdGePoint3d orPnt(0.00848600820104306,0.01503506648794965,0.0162750000534332);
OdGeVector3d x(1,0,1.40002853754603e-008);
OdGeVector3d y(0,-1,0);
OdGeVector3d z(x.crossProduct(y));
matr.setCoordSystem(orPnt,x,y,z);
OdPrcTransformation3d transform;
transform.set(matr);
crvCircle1->setTransformation(&transform);
// TBD
crvCircle1->setRadius(0.0018);
11. 创建第二个边并设置在步骤10中创建的几何体。
OdPrcEdgePtr edge = OdPrcEdge::createObject();
edge->contentWireEdge().curve() = crvCircle1;
12. 创建第二个CoEdge并设置在步骤11中创建的边。
OdPrcCoEdgePtr coEdge = OdPrcCoEdge::createObject();
coEdge->setEdge(edge);
coEdge->setOrientationWithLoop(kSame);
13. 创建第二个循环并将步骤12中创建的CoEdge添加到该循环。
OdPrcLoopPtr loop = OdPrcLoop::createObject();
pCurFace->addLoop(loop);
loop->addCoEdge(coEdge);
loop->setOrientationWithSurface(kSame);
14. 将步骤3中创建的几何体设置到面:
pCurFace->baseSurface() = pPrcCone;
pCurFace->setSurfaceTrimDomain(0);
pCurFace->setHaveTolerance(false);
15. 设置面的方向,该方向指定曲面法线相对于壳体法线的方向。如果壳体是闭合的且其他方面是任意的,则壳体法线指向材料外部。以下示例指定曲面法线与面和壳体具有相同的方向:
pCurFace->orientationSurfaceWithShell() = kSame;
16. 在壳体中添加面并设置“ShellIsClosed”标志。注意:您还可以使用“updateShellIsClosedFlag”方法来更新闭合标志的当前值。
pCurShell->addFace(pCurFace);
pCurShell->setShellIsClosed(false);
已创建圆锥体
在OdaPrcApp中创建的圆锥体