📄 cogpair.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 + -