当前位置: 首页>>代码示例>>C++>>正文


C++ PointList::erase方法代码示例

本文整理汇总了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 );
        }
    }
}
开发者ID:HEShuang,项目名称:SFCGAL,代码行数:81,代码来源:difference.cpp

示例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)){						//ワイヤーが持つ信号名のひとつが検索中の信号名に合致
//.........这里部分代码省略.........
开发者ID:hermixy,项目名称:Qt-BSch3V-Modified,代码行数:101,代码来源:netlist.cpp


注:本文中的PointList::erase方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。