Esempio n. 1
0
void CEditModel::SetSelectedPiece( const string& str )
{
	if(m_pSelectPiece)
	{
		m_pSelectPiece->SetForceRenderStyle(NULL);
		m_pSelectPiece = NULL;
	}

	ClearModelRender();
	RenderPieceMap::iterator it,eit = m_MeshsPiece.end();
	for( it = m_MeshsPiece.begin(); it!=eit; ++it )
	{
		for ( int i = 0; i < (int)it->second.m_Pieces.size(); i++ )
		{
			if( str == it->second.m_Pieces[i].m_pPiece->GetPieceName() )
			{
				m_pSelectPiece = (CEditPiece*)it->second.m_Pieces[i].m_pPiece;
				m_pSelectPiece->SetForceRenderStyle(&CEditorCore::TR_EPRS_SELECT);
				return;
			}
		}
	}
	DataChange();
	return;
}
Esempio n. 2
0
void CEditModel::AddMeshPieceEx( CEditPiece* pEpc, uint32 RSNum )
{
	m_Amalgamation = false;
	RenderPieceMap::iterator it = m_MeshsPiece.find( pEpc->GetPieceName() );
	pEpc->AddRef();
	if ( it != m_MeshsPiece.end() )
	{
		//for ( int i = 0; i < (int)it->second.m_Pieces.size(); i++ )
		//{
		//if( pEpc->GetPieceName() == it->second.m_Pieces[i].m_pPiece->GetPieceName() )
		//{
		if( pEpc != it->second.m_Pieces[0].m_pPiece)
		{
			SafeRelease( it->second.m_Pieces[0].m_pPiece );
			it->second.m_Pieces[0].m_pPiece = pEpc;
		}
		//return;
		//}
		//}
		//it->second.m_Pieces.push_back(CRenderPiece::PieceData());
		//CRenderPiece::PieceData& PD	= it->second.m_Pieces[ it->second.m_Pieces.size() - 1 ];
		//PD.m_pPiece         = pEpc;
		//PD.m_CurPiecesAniNo = 0;
		//PD.m_PrePiecesAniNo = 0;
		//return;
	}	
	m_MeshsPiece[  pEpc->GetPieceName() ]  = CRenderPiece( pEpc, (uint16)RSNum );
	if( pEpc->GetPieceGroup()->GetPortraitInfo() ) 
		SetPortraitInfo(*pEpc->GetPieceGroup()->GetPortraitInfo());

	SKELETAL_MASK SkeletalMask;
	_UpdateMesh(SkeletalMask);
	DataChange();
}
Esempio n. 3
0
void __fastcall TFixedFilterDBFrame::ModeButtonClick(TObject *Sender)
{
	if(m_iMode == FMODE_AND) m_iMode = FMODE_OR;
	else m_iMode = FMODE_AND;

	if(m_iMode == FMODE_AND) ModeButton->ImageIndex = InterfaceModule->GetMenuImage(L"fmode-and");
	else if(m_iMode == FMODE_OR) ModeButton->ImageIndex = InterfaceModule->GetMenuImage(L"fmode-or");

	DataChange(Sender);
}
Esempio n. 4
0
void CEditModel::DeletePiece(CEditPiece* pEpc)
{
	RenderPieceMap::iterator it,eit = m_MeshsPiece.end();
	for( it = m_MeshsPiece.begin(); it!=eit; ++it )
	{
		bool isDel = true;
		for ( int i = 0; i < (int)it->second.m_Pieces.size(); i++ )
		{
			if( pEpc->GetPieceName() == it->second.m_Pieces[i].m_pPiece->GetPieceName() )
				SafeRelease( it->second.m_Pieces[i].m_pPiece );

			if(it->second.m_Pieces[i].m_pPiece != NULL)
				isDel = false;
		}
		if(isDel)
		{
			m_MeshsPiece.erase( it );
			break;
		}
	}
	ClearModelRender();
	DataChange();
}
Esempio n. 5
0
void __fastcall TFixedFilterDBFrame::UseCheckClick(TObject *Sender)
{
    if(UseCheck->Checked)m_pParent->NoFilterCheckBox->Checked = false;
    else m_pParent->NoFilterCheckBoxClick(Sender);
	DataChange(Sender);
}
Esempio n. 6
0
void CEditModel::SetPortraitInfo( const PortraitInfo& pi )
{
	m_PortraitInfo = pi;	
	DataChange();
}
Esempio n. 7
0
void CEditModel::SetSkesMask(const SKELETAL_MASK& mask)
{
	m_RenderMatrix.SetSkeletalMask(mask);
	DataChange();
}
Esempio n. 8
0
int CEditModel::PickSkeletal( PickSkeletalParam& Pick )
{
	if( !GetSketetalFrame()|| !GetAnimateGroup() )
		return GERROR;

	CCamera* pCamera = CMainWindowTarget::GetInst()->GetCamera();


	CMatrix matView = pCamera->getViewMatrix();
	matView.InvertFast();
	CMatrix matProj = pCamera->getProjectionMatrix();

	CMatrix matViewProj = pCamera->getViewProjectMatrix();

	UINT i = 0,j = 0;
	for( i = 1; i < m_RenderMatrix.GetSkeletalCount(); i++ )
	{
		m_SkeletalPos[i].m_IsSelected = FALSE;

		CMatrix tScaleMat;
		CMatrix	tRotateMat;
		tRotateMat.SetRotateZ(-CMath::half_pi);
		tScaleMat.SetScale(CVector3f(m_SkeletalPos[i].m_Scale));

		if(!m_RenderMatrix.m_pMatrixUnit[i])
			continue;
		CMatrix matrix = m_RenderMatrix.m_pMatrixUnit[i]->GetMATRIX();

		CVector3f PickVer[6];
		CVector3f cur = CVector3f( (float)Pick.m_CurPos.x, (float)Pick.m_CurPos.y, 0);
		float z = FLT_MAX;
		int n1 = 0, n2 = 0;

		for( j = 0; j < 6; j++ )
		{
			PickVer[j] = SklPos[j];
			PickVer[j].FastMultiply(tScaleMat*tRotateMat*matrix );

			//z = min( PickVer[j].z, z );//求出这个点的zubffer以便于之后选择离屏幕最近的那根骨骼
		}

		CVector3f v;
		v.x = ( cur.x/Pick.m_Size.x - 1 ) / matProj._11;
		v.y = -( cur.y/Pick.m_Size.y - 1 ) / matProj._22;
		v.z = 1.0f;
		

		CVector3f vPickRayDir,vPickRayOrig;
		vPickRayDir.x = v.x*matView._11 + v.y*matView._21 + v.z*matView._31;
		vPickRayDir.y = v.x*matView._12 + v.y*matView._22 + v.z*matView._32;
		vPickRayDir.z = v.x*matView._13 + v.y*matView._23 + v.z*matView._33;
		vPickRayOrig.x = matView._41;
		vPickRayOrig.y = matView._42;
		vPickRayOrig.z = matView._43;

		float fu,fv,fd;
		BOOL IsPicked = FALSE;
		for( j = 0; j < 8; j++)
		{
			WORD* ind = SkeletalIndex + j*3;

			IsPicked = CMath::IntersectTri(PickVer[ind[0]],PickVer[ind[1]],PickVer[ind[2]],vPickRayOrig,vPickRayDir,fu,fv,fd);
			if(IsPicked)
				break;
		}

		if( /*z<Pick.m_Z&&*/IsPicked )
		{
			//Pick.m_Z = z;
			Pick.m_SkeletalID = i;
		}
	}

	if( Pick.m_SkeletalID )
	{
		m_SkeletalPos[ Pick.m_SkeletalID ].m_IsSelected = TRUE;
	}
	Pick.m_SkeletalName = GetSketetalFrame()->GetRootSkeletal().GetSkeletalNameByID( Pick.m_SkeletalID );
	DataChange();
	return 0;
}