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


C++ ControlPoint::setAsHandleTo方法代码示例

本文整理汇总了C++中ControlPoint::setAsHandleTo方法的典型用法代码示例。如果您正苦于以下问题:C++ ControlPoint::setAsHandleTo方法的具体用法?C++ ControlPoint::setAsHandleTo怎么用?C++ ControlPoint::setAsHandleTo使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ControlPoint的用法示例。


在下文中一共展示了ControlPoint::setAsHandleTo方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: remove

//-----------------------------------------------------------------------------
void BezierCurve::remove(int iIndex)
{
  if(iIndex < 0 || (unsigned int)iIndex >= mControlPoints.size())
  { return; }
  
  mIsRasterValid = false;
  const ControlPoint& cp = mControlPoints[iIndex];  
  
  /*Si le point de contrôle n'est pas un handle, il faut enlever tous les
    handles qui pointe vers ce point et remettre tous les index des autres
    handle à jour*/
  int startIndex = iIndex;
  int endIndex = iIndex;
  int count = 1;
  vector<ControlPoint>::iterator it = mControlPoints.end();
	if(!cp.isHandle())
  {
  	if(iIndex == 0)
    {
    	count = 0;
    	int lastIndex = mControlPoints.size() - 1;
      /*on enleve le point qui précède s'il est un handle a 0. Ici, on
      	incrémente pas le count parce que c'est le dernier point, il
        na donc aucun impact sur les indices des points qui le précèdent.*/
      if(mControlPoints[lastIndex].handleTo() == iIndex)
      	mControlPoints.erase(mControlPoints.begin() + lastIndex);
      /*On enleve le point qui suit s'il est un handle à 0*/
    	if(mControlPoints[iIndex + 1].handleTo() == iIndex)
      {
      	mControlPoints.erase(mControlPoints.begin() + iIndex + 1);
        count++;
      }
      //On enleve le point 0
      mControlPoints.erase(mControlPoints.begin());
      count++;
      
      /*Dans le cas où le premier point qui suit le point 0 est un handle
      	on le déplace à la fin de la courbe si la courbe est fermée. sinon
        on l'enleve*/
      if(mControlPoints[0].isHandle())
      {
      	ControlPoint p = mControlPoints[0];
        mControlPoints.erase(mControlPoints.begin());
        count++;
      	if(isClosed())
        {
        	p.setAsHandleTo(0);
        	mControlPoints.push_back(p);
        }
      }
      it = mControlPoints.begin();
    }
    else 
    {
      if(iIndex > 0 && mControlPoints[iIndex - 1].handleTo() == iIndex)
        startIndex = iIndex - 1;
      if((unsigned int)iIndex < mControlPoints.size() -1 && 
         mControlPoints[iIndex + 1].handleTo() == iIndex)
        endIndex = iIndex + 1;
      
      count = endIndex - startIndex + 1;
      it = mControlPoints.begin() + startIndex;
      for(int i = 0; i < count; ++i)
        it = mControlPoints.erase(it);  
    }
  	
  }
  else
		it = mControlPoints.erase(mControlPoints.begin() + iIndex);  
    
  //on remet les index des points qui suivent celui qu'on vient
  //d'enlever à jour.
  for(; it != mControlPoints.end(); ++it)
  {
  	//les handles à 0 n'ont pas à être mis à jour.
  	if(it->isHandle() && it->handleTo() != 0)
	  	it->setAsHandleTo(it->handleTo() - count);
  }
}
开发者ID:realisim,项目名称:realisim,代码行数:80,代码来源:BezierCurve.cpp


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