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

📄 edge.cpp

📁 此代码主要用于汽车车身的优化
💻 CPP
字号:
// Edge.cpp: implementation of the Edge class.边类的执行
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Subdiv.h"
#include "Edge.h"
#include <iostream>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Edge::Edge()
{
}

Edge::Edge(int bgVertexIdx, int edVertexIdx)
{
	m_bgVertexIdx = bgVertexIdx;
	m_edVertexIdx = edVertexIdx;
}

Edge::~Edge()
{
	reset();
}

bool Edge::operator < (const Edge &e) const 
{	// 先比大index顶点再比小index顶点
	int b, l, eb, el;
	if (m_edVertexIdx > m_bgVertexIdx)
		b = m_edVertexIdx, l = m_bgVertexIdx;
	else 
		l = m_edVertexIdx, b = m_bgVertexIdx;

	if (e.m_edVertexIdx > e.m_bgVertexIdx)
		eb = e.m_edVertexIdx, el = e.m_bgVertexIdx;
	else 
		el = e.m_edVertexIdx, eb = e.m_bgVertexIdx;

	if( b < eb )		return true;
	else if ( b == eb )	return ( l < el );
	else				return false;

/*	if (m_edVertexIdx > m_bgVertexIdx)	// m_edVertexIdx大
	{
		if(e.m_edVertexIdx > e.m_bgVertexIdx)
			return (m_edVertexIdx < e.m_edVertexIdx) || 
					(m_edVertexIdx == e.m_edVertexIdx && m_bgVertexIdx < e.m_bgVertexIdx);
		else 
			return (m_edVertexIdx < e.m_bgVertexIdx) ||
					(m_edVertexIdx == e.m_bgVertexIdx && m_bgVertexIdx > e.m_edVertexIdx);
	}
	else								// m_bgVertexIdx大
	{
		if(e.m_edVertexIdx > e.m_bgVertexIdx)
			return (m_bgVertexIdx < e.m_edVertexIdx) ||
					(m_bgVertexIdx == e.m_edVertexIdx && m_edVertexIdx < e.m_bgVertexIdx);
		else 
			return (m_bgVertexIdx < e.m_bgVertexIdx) ||
					(m_bgVertexIdx == e.m_bgVertexIdx && m_edVertexIdx < e.m_edVertexIdx);
	}
	*/
}


bool Edge::operator == (const Edge &e) const 
{
	return ((m_edVertexIdx == e.m_edVertexIdx && m_bgVertexIdx == e.m_bgVertexIdx) || 
			(m_edVertexIdx == e.m_bgVertexIdx && m_bgVertexIdx == e.m_edVertexIdx)
			);
}

Edge& Edge::operator = (const Edge &e) 
{
	if(&e == this)
		return *this;

	m_edVertexIdx = e.m_edVertexIdx;
	m_bgVertexIdx = e.m_bgVertexIdx;

	return *this;
}
/*

void Edge::addAdjFace(int fi)
{
}

//inline 
void Edge::setMidPoint(Vector3d& mid)
{
	m_midPoint = mid;
}
*/
void Edge::dump() const
{
	cout << "DUMP: Edge " << " (" << m_bgVertexIdx + 1<< " ==> " << m_edVertexIdx + 1<< ")";
	cout << " Mid point:(" << m_midPoint.x << "," << m_midPoint.y << "," << m_midPoint.z << ")";
	cout << " newEdgePointIdx:" << m_newEdgePointIdx << endl;
	cout << "           AdjFaces: (" ;
	for(vector<int>::const_iterator itr = m_adjFaceIdxSet.begin(); itr != m_adjFaceIdxSet.end(); itr ++)
		cout << (*itr) + 1 << " ";
	cout << ")" ;
	cout << endl;

}

void Edge::reset()
{
	m_adjFaceIdxSet.clear();

}

int Edge::getCounterVertex(int vi)
{
	return( vi == m_bgVertexIdx ? m_edVertexIdx : m_bgVertexIdx);
}

bool Edge::isOnBoundary()
{
	return ( m_adjFaceIdxSet.size() < 2 );
}

⌨️ 快捷键说明

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