[ブログに戻る](/ja/blog) # トリミングループを使用したPRC境界表現トポロジの作成

Andrii Voitsekhovskyi 6月 20, 2017 [\#prc](/ja/blog/tag/prc) [\#b-rep](/ja/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で作成した辺を設定します。CoEdgeは方向付けられた辺です。2つのCoEdgeは、辺に沿って同じ方向または反対方向の辺の点に関連付けられています。各CoEdgeは、2つの隣接する面のいずれかのループに関連付けられています。

```
OdPrcCoEdgePtr coEdge = OdPrcCoEdge::createObject();
coEdge->setEdge(edge);

```

7\. 最初のCoEdgeの向きを設定して、ループの相対的な向きを示します。kOppositeは、隣接するCoEdgeの反対の向きです。

```
coEdge->setOrientationWithLoop(kOpposite);

```

8\. 最初のループを作成し、ステップ6で作成したCoEdgeをループに追加します。作成されたループは面に加えられる必要があります。ループはCoEdgeの接続された一連のものであり、面の境界を記述します。一般的に、ループは閉じられており、開始点も終了点もありません。

```
OdPrcLoopPtr loop = OdPrcLoop::createObject();
pCurFace->addLoop(loop);
loop->addCoEdge(coEdge);

```

9\. 最初のループの向きを設定して、サーフェス法線ベクトルに対するループの向きを指定します。次の例では、向きがサーフェス法線ベクトルに垂直（またはサーフェスと平行）であることを指定しています。

```
loop->setOrientationWithSurface(kSame);

```

10\. 2番目のループのジオメトリを作成します。

```
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\. 2番目の辺を作成し、ステップ10で作成したジオメトリを設定します。

```
OdPrcEdgePtr edge = OdPrcEdge::createObject();
edge->contentWireEdge().curve() = crvCircle1;

```

12\. 2番目のCoEdgeを作成し、ステップ11で作成した辺を設定します。

```
OdPrcCoEdgePtr coEdge = OdPrcCoEdge::createObject();
coEdge->setEdge(edge);
coEdge->setOrientationWithLoop(kSame);

```

13\. 2番目のループを作成し、ステップ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://www.opendesign.com/ja/free-trial)
