[返回博客](/cn/blog) # 使用修剪循环创建PRC边界表示拓扑

Andrii Voitsekhovskyi 六月 20, 2017 [\#prc](/cn/blog/tag/prc) [\#b-rep](/cn/blog/tag/b-rep)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

要创建带有修剪循环的边界表示模型（例如，圆锥体），请使用以下步骤：

1\. 生成具有B-Rep拓扑的PRC文件。创建此类文件的示例可在OdPrcCreate中找到，并在PRC文档的[使用表示实体](https://docsdev.opendesign.com/tprc/frames.html?frmname=topic&frmfile=tprc_entities_representation.html)（需要登录）中进行了描述。

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);

```

![created cone](/files/inline-images/image002_1.jpg)已创建圆锥体

![created cone in odaprcapp](/files/inline-images/image004.jpg)在OdaPrcApp中创建的圆锥体

## 今天就开始行动

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

[免费试用](https://staging.opendesign.com/cn/free-trial)
