⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cogpair.cxx

📁 有限元学习研究用源代码(老外的),供科研人员参考
💻 CXX
字号:
#include "cogpair.hxx"

class cogPairIntersection: public cogPairToSegment{
        cogSegment operator()(cogSegment s1,cogSegment s2)
        	{if(s1.index()<s2.index()) return s1; return s2;}
};

CogeometryIntersection::CogeometryIntersection(cogeometry g1, cogeometry g2)
:CogeometryPair(g1,g2,new cogPairIntersection())
{;}

class cogPairUnion: public cogPairToSegment{
        cogSegment operator()(cogSegment s1,cogSegment s2)
        	{if(s1.index()>s2.index()) return s1; return s2;}
};

CogeometryUnion::CogeometryUnion(cogeometry g1, cogeometry g2)
:CogeometryPair(g1,g2,new cogPairUnion())
{;}

class cogPairSplit: public cogPairToSegment{
        cogSegment operator()(cogSegment s1,cogSegment s2)
                {if(s1 != single) return s1; return s2;}
        cogSegment single;
public:
        cogPairSplit(cogRegion r):single(r){;}
};

CogeometrySplit::CogeometrySplit(cogeometry _g1,cogRegion _r,cogeometry _g2)
:CogeometryPair(_g1,_g2,new cogPairSplit(_r))
{;}

class cogPairOverlay: public cogPairToSegment{
        cogSegment operator()(cogSegment s1,cogSegment s2)
        	{if(s1 == single) return s1; return s2;}
        cogSegment single;
public:
        cogPairOverlay(cogRegion s):single(s){;}
};

CogeometryOverlay::CogeometryOverlay(cogeometry _g1,cogRegion _r,cogeometry _g2)
:CogeometryPair(_g1,_g2,new cogPairOverlay(_r))
{;}

cogIndex   CogeometryPair::Point(cogPoint& s) const
{
 g1->Point(s); cogRegion r1=s.segment().region();
 g2->Point(s); cogRegion r2=s.segment().region();
 s.segment() = region(r1,r2);
 return cogRCRegionFound;
}

cogIndex   CogeometryPair::BoundaryCondition(cogFlag1& flag) const
{
  g1->BoundaryCondition(flag); cogFace f1=flag.p1.segment().face();
  g2->BoundaryCondition(flag); cogFace f2=flag.p1.segment().face();
  flag.p1.segment() = face(f1,f2);
  return cogRCConditionFound;
}

/*
cogIndex   CogeometryPair::Line (cogFlag1& flag, const cogLine& s) const
{
  cogIndex r1,r2; cogBoolean first;
  cogPoint s10=s.c0,s11=s.c1; cogLine ss1(s10,s11);
  cogPoint s20=s.c0,s21=s.c1; cogLine ss2(s20,s21);
  cogPoint fl1,fl0,flo; cogFlag1 fl(fl1,fl0,flo);
  g1->Point(s10); g1->Point(s11); r1=g1->Line(flag,ss1);
  g2->Point(s20); g2->Point(s21); r2=g2->Line(fl,ss2);
beg:
  if(r1==cogRCFaceNotFound){
    if(r2==cogRCFaceNotFound) return cogRCFaceNotFound;
    first = cogFalse;
  }else if(r2==cogRCFaceNotFound){
    first = cogTrue;
  }else{
    if(flag.p1.scalar(s.c0,fl1) > 0){
      first = cogFalse;
    }else{
      first = cogTrue;
    }
  }
  if(first){
    fl.p0 = flag.p0;
    fl.po = flag.po;
    g2->Point(fl.p0); 
    if(fl.p0.segment()!=ss2.c0.segment()){
      ss2.c1 = fl.p0; r2 = g2->Line(fl,ss2);
      ss1.c1 = fl.p0; r1 = g1->Line(fl,ss2);
      goto beg;
    }
    wzAssert(fl.p0.segment()==ss2.c0.segment());
    g2->Point(fl.po);
    flag.p0.segment() = region(flag.p0.segment().region()
    ,fl.p0.segment().region());
    flag.po.segment() = region(flag.po.segment().region()
    ,fl.po.segment().region());
  }else{
    flag.p1=fl.p1;
    flag.p0=fl.p0;
    flag.po=fl.po;
    g1->Point(fl.p0);
    if(fl.p0.segment()!=ss1.c0.segment()){
      ss2.c1 = fl.p0; r2 = g2->Line(fl,ss2);
      ss1.c1 = fl.p0; r1 = g1->Line(fl,ss2);
      goto beg;
    }
    g1->Point(fl.po);
    flag.p0.segment() = region(fl.p0.segment().region()
    ,flag.p0.segment().region());
    flag.po.segment() = region(fl.po.segment().region()
    ,flag.po.segment().region());
  }
  return cogRCFaceFound;
}
*/

CogeometryPair::CogeometryPair(cogeometry geom1,cogeometry geom2,
			       cogPairToSegment* r)
  :g1(geom1),g2(geom2),region(*r),face(*r)
{;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -