本文整理汇总了C++中PointList::erase方法的典型用法代码示例。如果您正苦于以下问题:C++ PointList::erase方法的具体用法?C++ PointList::erase怎么用?C++ PointList::erase使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PointList
的用法示例。
在下文中一共展示了PointList::erase方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: filter_self_intersection
static void filter_self_intersection( const GeometrySet<Dim>& input, GeometrySet<Dim>& output )
{
{
typedef std::list< CollectionElement<typename Point_d<Dim>::Type> > PointList;
PointList points;
std::copy( input.points().begin(), input.points().end(), std::back_inserter( points ) );
typename PointList::iterator it = points.begin();
while ( it != points.end() ) {
bool intersectsA = false;
for ( typename PointList::iterator it2 = points.begin(); it2 != points.end(); ++it2 ) {
if ( it == it2 ) {
continue;
}
PrimitiveHandle<Dim> pa1( &it->primitive() );
PrimitiveHandle<Dim> pa2( &it2->primitive() );
if ( CGAL::do_overlap( it->primitive().bbox(), it2->primitive().bbox() ) &&
algorithm::intersects( pa1, pa2 ) ) {
intersectsA = true;
GeometrySet<Dim> temp;
algorithm::intersection( pa1, pa2, temp );
std::copy( temp.points().begin(), temp.points().end(), std::back_inserter( points ) );
// erase it2
points.erase( it2 );
break;
}
}
if ( ! intersectsA ) {
output.addPrimitive( it->primitive() );
}
// suppress A
it = points.erase( it );
}
}
{
typedef std::list< CollectionElement<typename Segment_d<Dim>::Type> > SegmentList;
SegmentList segments;
std::copy( input.segments().begin(), input.segments().end(), std::back_inserter( segments ) );
typename SegmentList::iterator it = segments.begin();
while ( it != segments.end() ) {
bool intersectsA = false;
for ( typename SegmentList::iterator it2 = segments.begin(); it2 != segments.end(); ++it2 ) {
if ( it == it2 ) {
continue;
}
PrimitiveHandle<Dim> pa1( &it->primitive() );
PrimitiveHandle<Dim> pa2( &it2->primitive() );
if ( CGAL::do_overlap( it->primitive().bbox(), it2->primitive().bbox() ) &&
algorithm::intersects( pa1, pa2 ) ) {
intersectsA = true;
GeometrySet<Dim> temp;
algorithm::intersection( pa1, pa2, temp );
std::copy( temp.segments().begin(), temp.segments().end(), std::back_inserter( segments ) );
// erase it2
segments.erase( it2 );
break;
}
}
if ( ! intersectsA ) {
output.addPrimitive( it->primitive() );
}
// suppress A
it = segments.erase( it );
}
}
}
示例2: if
//ネット抽出
SSingleNetList* SNetList::NetList1()
{
//printf("newnet\n");
SNlPin* pPin;
SPoint point;
NlPinList listPin; //ネットに含まれるピン
stringList listSignalNameAll; //ネットに関わる未処理信号名
stringList listSignalName; //ネットに関わる未処理信号名
PointList listPoint; //ネットに関わる座標
XBSchObjListIterator ite1;
SSingleNetList* pSingleNet;
NlPinListIterator itePin = m_listNlPin.begin(); //ピンのリストからピンをひとつ取り出す
if(itePin == m_listNlPin.end()) return NULL; //ピンがなければ何もせずに戻る
pPin=(*itePin);
m_listNlPin.erase(itePin); //取り出したピンは元のリストから消去して
pSingleNet = new SSingleNetList;
listPin.push_back(pPin); //ネットに登録
listPoint.push_back(pPin->m_point); //ピン位置を座標のリストに登録する。
//ピンの信号名を取得して、すべて信号名のリストに登録する。
stringListIterator iteStr=pPin->m_listSigName.begin();
while(iteStr!=pPin->m_listSigName.end()){
listSignalNameAll.push_back(*iteStr);
listSignalName.push_back(*iteStr);
iteStr++;
}
//処理が発生しなくなるまで1. 2.を繰り返す
//1.未処理信号名がなくなるまで(1)(2)を繰り返し実行する。
// (1)信号名によるピンの抽出
// 同じ信号名を持つピンの取り出し
// 取り出したピンが持つ別の信号名の追加登録
// 取り出したピンの座標の登録
// (2)信号名によるワイヤーの抽出
// 同じ信号名を持つワイヤーの取り出し
// 取り出したワイヤーが持つ別の信号名の追加登録
// 取り出したワイヤーの座標の登録
//
//2.未処理座標がなくなるまで(3)(4)を繰り返し実行する。
// (3)座標によるピンの抽出
// その座標を持つピンの取り出し
// 取り出したピンが持つ別の信号名の追加登録
// (4)座標によるワイヤーの取り出し
// その座標を持つワイヤーの取り出し
// 取り出したワイヤーが持つ別の信号名の追加登録
// 取り出したワイヤーの座標の登録
//
stringListIterator iteSignalName;
PointListIterator itePoint;
bool fDone = true;
int loopCount = 0;
while(fDone){
//printf("%d\n",loopCount);
fDone = false;
//***** 1.信号名処理 *****
iteSignalName = listSignalName.begin();
while(iteSignalName != listSignalName.end()){
//printf("SigName");
fDone = true;
string strSignalName = (*iteSignalName);
//***** (1)信号名によるピンの抽出 *****
NlPinListIterator itePin = m_listNlPin.begin();
NlPinListIterator itePinBackUp;
while(itePin != m_listNlPin.end()){ //信号名について全てのピンをスキャンする
SNlPin* pPin =(*itePin);
itePinBackUp = itePin;
itePin++;
if(quaryExist(pPin->m_listSigName,strSignalName)){ //ピンが持つ信号名のひとつが検索中の信号名に合致
m_listNlPin.erase(itePinBackUp); //ピンのリストからはずす
listPin.push_back(pPin); //ネットのピンのリストに追加する
stringListIterator itePinSignalName = pPin->m_listSigName.begin(); //ピンが持つ信号名をすべて、ネットの信号名に登録
while(itePinSignalName != pPin->m_listSigName.end()){ //
if(!quaryExist(listSignalNameAll,(*itePinSignalName))){ //ただし、新規に登録するのは、未登録のものだけ
listSignalNameAll.push_back(*itePinSignalName);
listSignalName.push_back(*itePinSignalName);
}
itePinSignalName++;
}
if(!quaryExist(listPoint,pPin->m_point)){
listPoint.push_back(pPin->m_point);
}
}
}// ***** (1)信号名によるピンの抽出 *****
// ***** (2)信号名によるワイヤーの抽出 *****
XBSchObjListIterator iteWire = m_listWire.begin();
XBSchObjListIterator iteWireBackUp;
while(iteWire != m_listWire.end()){ //信号名について全てのワイヤーをスキャンする
SXBSchWireNl* pWire =(SXBSchWireNl*)(*iteWire);
iteWireBackUp = iteWire;
iteWire++;
if(quaryExist(pWire->m_listSignalName,strSignalName)){ //ワイヤーが持つ信号名のひとつが検索中の信号名に合致
//.........这里部分代码省略.........