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; }
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(); }
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); }
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(); }
void __fastcall TFixedFilterDBFrame::UseCheckClick(TObject *Sender) { if(UseCheck->Checked)m_pParent->NoFilterCheckBox->Checked = false; else m_pParent->NoFilterCheckBoxClick(Sender); DataChange(Sender); }
void CEditModel::SetPortraitInfo( const PortraitInfo& pi ) { m_PortraitInfo = pi; DataChange(); }
void CEditModel::SetSkesMask(const SKELETAL_MASK& mask) { m_RenderMatrix.SetSkeletalMask(mask); DataChange(); }
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; }