Esempio n. 1
0
void Map::Draw()
{
	// Sets the texture to draw the streets.
	Texture tex=Texture::GetInstance();
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, tex.roadTex);
	Point first,second;

	for (std::map<int, Node>::iterator it = this->nodes.begin(); it != this->nodes.end(); ++it)
	{

		Node currentNode = (*it).second;
		//Draw current intersection
		currentNode.Draw();
		std::vector<int> destinations=currentNode.getDestinations();
		for (int i = 0; i < destinations.size(); i++)
		{
			//Take the coordinates of a street and draw a quad between that points
			glBegin(GL_QUADS);
			Street street = currentNode.GetStreet(i);
			
			glColor3f(116 / 255., 125 / 255., 135 / 255.);
			
			glTexCoord2d(0, 0);  glVertex3d(street.corners[0].x, street.corners[0].y, street.corners[0].z);
			glTexCoord2d(0, 10);  glVertex3d(street.corners[1].x, street.corners[1].y, street.corners[1].z);
			glTexCoord2d(10, 10);  glVertex3d(street.corners[2].x, street.corners[2].y, street.corners[2].z);
			glTexCoord2d(10, 0);  glVertex3d(street.corners[3].x, street.corners[3].y, street.corners[3].z);
			glEnd();
		}
		
	}
	glDisable(GL_TEXTURE_2D);
}
Esempio n. 2
0
//读入一个模型
BOOL CDiagRunView::read_one_model(CString model_name)
{
	m_sqlserver_db.dbname=CString(model_name);

	CClientDC dc(this);
	OnPrepareDC(&dc);
	CString Datasource;
	Datasource.Format("Provider=SQLOLEDB.1; Data Source=%s; Initial Catalog=%s; User ID=%s; PWD=%s", m_sqlserver_db.dbsrc,m_sqlserver_db.dbname,m_sqlserver_db.user,m_sqlserver_db.pass);
	HRESULT hr = m_pConnection->Open(_bstr_t(LPCTSTR(Datasource)),"","",-1);///连接数据库
	//上面一句中连接字串中的Provider是针对SQL Server环境的
	
	/*读入数据*/
/*
	//读被测对象属性表
	try
	{
		m_pRecordset.CreateInstance("ADODB.Recordset");
		m_pRecordset->Open("OBJECT_Table",_variant_t((IDispatch*)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdTable);
		while(!m_pRecordset->adoEOF)
		{
			m_pRecordset->GetCollect("对象序号");
			m_pRecordset->GetCollect("对象号");
			m_pRecordset->GetCollect("任务号");
			m_pRecordset->GetCollect("对象名称");
			m_pRecordset->GetCollect("对象描述");

			//?=vartostr();

			m_pRecordset->MoveNext();
		}
		m_pRecordset.Release();
	}
	catch(_com_error e)///捕捉异常
	{
		AfxMessageBox("读取被测对象属性表失败!");///显示错误信息
	}
*/
	//读结点表
	try
	{
		m_pRecordset.CreateInstance("ADODB.Recordset");
		m_pRecordset->Open("NODES_Table",_variant_t((IDispatch*)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdTable);
		while(!m_pRecordset->EndOfFile)
		{
			long value;
			IBaseCom * pCom = NULL;

			int com_no=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("图形形状"))));
			CLSID clsid=*CLSIDArray[com_no];
			IID iid=*IIDArray[com_no];
			
			HRESULT hr=::CoCreateInstance(clsid, NULL, CLSCTX_ALL, iid, (void **)&pCom);
			if ( !SUCCEEDED(hr) )
			{
				MessageBox("init node_com fail");
				return false;
			}
			Node * node = new Node(pCom);
			node->SetActive(FALSE);
			value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("结点号"))));
			node_id_count=value+1;
			node->SetID(value);
			//m_pRecordset->GetCollect("任务号");
			//m_pRecordset->GetCollect("对象序号");
			value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("层号"))));
			node->layer=value;
			//m_pRecordset->GetCollect("层中序号");
			//m_pRecordset->GetCollect("父结点号");
			node->inLine=NULL;
			node->SetName(vartostr(m_pRecordset->GetCollect("结点名称")));
			//m_pRecordset->GetCollect("结点中文名称");
			node->comment=vartostr(m_pRecordset->GetCollect("结点描述"));
			CPoint pos1, pos2;
			/*
			pos1.x=0;
			pos1.y=0;
			pos2.x=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("X坐标"))));
			pos2.y=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("Y坐标"))));
			node->SetScrPos(pos1);		
			node->SetTopLeft(pos2);
			*/

			pos1.x=scrollpos.x;
			pos1.y=scrollpos.y;
			pos2.x=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("X坐标"))))-scrollpos.x;
			pos2.y=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("Y坐标"))))-scrollpos.y;
			node->SetScrPos(pos1);		
			node->SetTopLeft(pos2);


			//m_pRecordset->GetCollect("图形线型");
			//m_pRecordset->GetCollect("图形线宽");
			m_model_scale=atof(vartostr(m_pRecordset->GetCollect("比例")));

			GraphInfo * gi = node->GetGraphInfo();
			//m_pRecordset->GetCollect("图形颜色"))));
			//m_pRecordset->GetCollect("字体");
			//m_pRecordset->GetCollect("字号");
			//m_pRecordset->GetCollect("字体颜色");
			//m_pRecordset->GetCollect("填充类型");
			gi->normal_regioncolor=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("填充颜色"))));
			node->SetGraphInfo(gi);
			//m_pRecordset->GetCollect("正在运行");
			//m_pRecordset->GetCollect("分析标志");
			int flag=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("删除标志"))));
			if (flag==1)
				node->SetDeleted(true);
			else
				node->SetDeleted(false);

			//node->SetActive(TRUE);
			NodeArray.Add(node);
			if (!node->IsDeleted())
				node->Draw(&dc, pos2, pos1, m_model_scale, &m_GraphInfo, 1, node->GetActive());
			m_pRecordset->MoveNext();
		}
		m_pRecordset.Release();
	}
	catch(_com_error e)///捕捉异常
	{
		AfxMessageBox("读取结点表失败!");///显示错误信息
	}
	
	//读连线表
	try
	{
		CPoint startPoint, endPoint;
		m_pRecordset.CreateInstance("ADODB.Recordset");
		m_pRecordset->Open("LINE_Table",_variant_t((IDispatch*)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdTable);
		while(!m_pRecordset->EndOfFile)
		{
			long value;
			Node *parentnode,*sonnode;
			IMyLineCom * pLineCom = NULL;
			HRESULT hr = ::CoCreateInstance(CLSID_MyLineCom, NULL, CLSCTX_ALL, IID_IMyLineCom, (void **)&pLineCom);
			if ( !SUCCEEDED(hr) )
			{
				MessageBox("创建Line_COM错误");
				return false;
			}
			Line * line = new Line((IBaseCom*)pLineCom);

			line->SetActive(FALSE);

			value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线号"))));
			line->SetID(value);
			line_id_count=value+1;
			//m_pRecordset->GetCollect("任务号");
			//m_pRecordset->GetCollect("对象序号");
			value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("父结点号"))));
			parentnode=Get_Node_In_NodeArray(value);
			//m_pRecordset->GetCollect("父结点类型");
			//m_pRecordset->GetCollect("父结点层号");
			//m_pRecordset->GetCollect("父结点层中号");
			value=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("子结点号"))));
			sonnode=Get_Node_In_NodeArray(value);
			//m_pRecordset->GetCollect("子结点类型");
			//m_pRecordset->GetCollect("子结点层号");
			//m_pRecordset->GetCollect("子结点层中号");
			line->SetName(vartostr(m_pRecordset->GetCollect("连线名称")));
			//m_pRecordset->GetCollect("连线中文名称");
			line->comment=vartostr(m_pRecordset->GetCollect("连线描述"));
	
			CPoint pos1,pos2;
			pos1.x=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线起点X"))))-scrollpos.x;
			pos1.y=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线起点Y"))))-scrollpos.y;
			pos2.x=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线终点X"))))-scrollpos.x;
			pos2.y=atol(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线终点Y"))))-scrollpos.y;

			GraphInfo * gi = line->GetGraphInfo();
			gi->normal_penStyle=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线类型"))));
			gi->normal_linewidth=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线宽度"))));
			gi->normal_linecolor=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("连线颜色"))));
			line->SetGraphInfo(gi);
			//m_pRecordset->GetCollect("箭头类型");
			//m_pRecordset->GetCollect("分析标志");
			int flag=atoi(LPCTSTR(vartostr(m_pRecordset->GetCollect("删除标志"))));
			if (flag==1)
				line->SetDeleted(true);
			else
			{
				line->SetDeleted(false);
				line->parentNode = parentnode;
				line->sonNode = sonnode;
				sonnode->inLine=line;
				parentnode->outLine.Add(line);
				line->GetCom()->SetStartPoint((unsigned long)&pos1);
				line->GetCom()->SetEndPoint((unsigned long)&pos2);
				line->Draw(&dc, pos1, scrollpos, m_model_scale, 0, 1, line->GetActive());
			}
			LineArray.Add(line);
			m_pRecordset->MoveNext();
		}
		m_pRecordset.Release();
	}
	catch(_com_error e)///捕捉异常
	{
		AfxMessageBox("读取连线表失败!");///显示错误信息
	}

	if(m_pConnection->State)
		 m_pConnection->Close(); ///如果已经打开了连接则关闭它
	return true;
}