本文整理汇总了C++中Mesh::AddSegment方法的典型用法代码示例。如果您正苦于以下问题:C++ Mesh::AddSegment方法的具体用法?C++ Mesh::AddSegment怎么用?C++ Mesh::AddSegment使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mesh
的用法示例。
在下文中一共展示了Mesh::AddSegment方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
DLL_HEADER void Ng_AddBoundarySeg_2D (Ng_Mesh * mesh, int pi1, int pi2)
{
Mesh * m = (Mesh*)mesh;
Segment seg;
seg[0] = pi1;
seg[1] = pi2;
m->AddSegment (seg);
}
示例2: RefinePrisms
//.........这里部分代码省略.........
}
else
{
continue;
// Point3d pb;
// /*
// geom->PointBetween (mesh.Point (el.p1),
// mesh.Point (el.p2),
// el.surfnr1, el.surfnr2,
// el.epgeominfo[0], el.epgeominfo[1],
// pb, ngi);
// */
// pb = Center (mesh.Point (el.p1), mesh.Point (el.p2));
// pnew = mesh.AddPoint (pb);
// refedges.Set (i2, pnew);
// if (pnew > epgi.Size())
// epgi.SetSize (pnew);
// epgi.Elem(pnew) = ngi;
}
Segment ns1 = el;
Segment ns2 = el;
ns1.p2 = pnew;
ns1.epgeominfo[1] = ngi;
ns2.p1 = pnew;
ns2.epgeominfo[0] = ngi;
mesh.LineSegment(i) = ns1;
mesh.AddSegment (ns2);
}
PrintMessage (5, "Segments done, NSeg = ", mesh.GetNSeg());
// do refinement
int oldne = mesh.GetNE();
for (i = 1; i <= oldne; i++)
{
Element & el = mesh.VolumeElement (i);
if (el.GetNP() != 6)
continue;
int npi[3];
for (j = 1; j <= 3; j++)
{
int pi1 = el.PNum(j);
int pi2 = el.PNum(j+3);
if (pi1 == pi2)
npi[j-1] = pi1;
else
{
INDEX_2 edge(pi1, pi2);
edge.Sort();
if (refedges.Used (edge))
npi[j-1] = refedges.Get(edge);
else
{
/*
(*testout) << "ERROR: prism " << i << " has hanging node !!"
<< ", edge = " << edge << endl;
cerr << "ERROR: prism " << i << " has hanging node !!" << endl;
示例3: Partition
void SplineSeg<D> :: Partition (double h, double elto0,
Mesh & mesh, Point3dTree & searchtree, int segnr) const
{
int i, j;
double l, r1, r2, ra;
double lold, dt, frac;
int n = 100;
Point<D> p, pold, mark, oldmark;
ARRAY<double> curvepoints;
double edgelength, edgelengthold;
l = Length();
r1 = StartPI().refatpoint;
r2 = EndPI().refatpoint;
ra = reffak;
// cout << "Partition, l = " << l << ", h = " << h << endl;
CalcPartition (l, h, r1, r2, ra, elto0, curvepoints);
// cout << "curvepoints = " << curvepoints << endl;
dt = 1.0 / n;
l = 0;
j = 1;
pold = GetPoint (0);
lold = 0;
oldmark = pold;
edgelengthold = 0;
ARRAY<int> locsearch;
for (i = 1; i <= n; i++)
{
p = GetPoint (i*dt);
l = lold + Dist (p, pold);
while (j < curvepoints.Size() && (l >= curvepoints[j] || i == n))
{
frac = (curvepoints[j]-lold) / (l-lold);
mark = pold + frac * (p-pold);
edgelength = i*dt + (frac-1)*dt;
{
PointIndex pi1 = -1, pi2 = -1;
Point3d mark3(mark(0), mark(1), 0);
Point3d oldmark3(oldmark(0), oldmark(1), 0);
Vec<3> v (1e-4*h, 1e-4*h, 1e-4*h);
searchtree.GetIntersecting (oldmark3 - v, oldmark3 + v, locsearch);
if (locsearch.Size()) pi1 = locsearch[0];
searchtree.GetIntersecting (mark3 - v, mark3 + v, locsearch);
if (locsearch.Size()) pi2 = locsearch[0];
/*
for (PointIndex pk = PointIndex::BASE;
pk < mesh.GetNP()+PointIndex::BASE; pk++)
{
if (Dist (mesh[pk], oldmark3) < 1e-4 * h) pi1 = pk;
if (Dist (mesh[pk], mark3) < 1e-4 * h) pi2 = pk;
}
*/
// cout << "pi1 = " << pi1 << endl;
// cout << "pi2 = " << pi2 << endl;
if (pi1 == -1)
{
pi1 = mesh.AddPoint(oldmark3);
searchtree.Insert (oldmark3, pi1);
}
if (pi2 == -1)
{
pi2 = mesh.AddPoint(mark3);
searchtree.Insert (mark3, pi2);
}
// cout << "pi1 = " << pi1 << endl;
// cout << "pi2 = " << pi2 << endl;
Segment seg;
seg.edgenr = segnr;
seg.si = bc; // segnr;
seg.p1 = pi1;
seg.p2 = pi2;
seg.domin = leftdom;
seg.domout = rightdom;
seg.epgeominfo[0].edgenr = segnr;
seg.epgeominfo[0].dist = edgelengthold;
seg.epgeominfo[1].edgenr = segnr;
seg.epgeominfo[1].dist = edgelength;
seg.singedge_left = hpref_left;
seg.singedge_right = hpref_right;
mesh.AddSegment (seg);
}
oldmark = mark;
edgelengthold = edgelength;
j++;
}
//.........这里部分代码省略.........