void CDlgObjectManager::OnObjmngProperties() { if(!m_hI) return; CCriticalSection cs; cs.Lock(); CMyObject* pObj; pObj = FindObj(m_hI); if(pObj && m_pDoc) { pObj->Properties(); m_tree.SetItemText(m_hI, pObj->GetIdName()); if(m_pDoc) { m_pDoc->SetModifiedFlag(); if( pObj->IsKindOf(RUNTIME_CLASS( CImgReferenced )) ) m_pDoc->UpdateAllViews(NULL, UPDATE_BITMAP_CAHNGED); else if( pObj->IsKindOf(RUNTIME_CLASS(CGridObj)) ) m_pDoc->UpdateAllViews(NULL, UPDATE_LEADHRZ_CAHNGED); else if( pObj->IsKindOf(RUNTIME_CLASS(CData3D)) ) m_pDoc->UpdateAllViews(NULL, UPDATE_DATA3D_CHANGED); else m_pDoc->UpdateAllViews(NULL); m_hI = NULL; } return; } CBody* pBd; pBd = (CBody*) FindBody(m_hI); if(pBd && m_pDoc) { pBd->Properties(); m_tree.SetItemText( m_hI, pBd->GetStrIdName() ); m_hI = NULL; } }
static void FindLoop(BLOCK *b) { BLOCKLIST *loop = NULL; BLOCKLIST *bl; BLOCK *Z = b; bl = b->pred; while (bl) { if (getEdgeType(bl->block->blocknum, b->blocknum) == F_BACKEDGE) { Z = findCommonDominator(Z, bl->block); if (bl->block != b) // we don't care about duplicates, they will be filtered later { BLOCKLIST *bm = oAlloc(sizeof(BLOCKLIST)); bm->block = bl->block; bm->next = loop; loop = bm; } } bl = bl->next; } if (Z != b) { /* again we don't care about duplicates */ BLOCKLIST **bp = &Z->loopGenerators; while (*bp) bp = &(*bp)->next; (*bp) = loop; } else { FindBody(loop, b, LT_SINGLE); } }
void CDlgObjectManager::OnObjmngDelete() { if(!m_hI) return; CCriticalSection cs; cs.Lock(); CMyObject* pObj; for( int i=0; i<m_pObPtrArray->GetSize(); i++) { pObj = m_pObPtrArray->GetAt(i); if( m_tree.GetItemText(m_hI) == pObj->GetIdName() ) { int res = AfxMessageBox("Delete? Sure?", MB_YESNO | MB_ICONQUESTION); if( res == IDYES ) { m_pObPtrArray->RemoveAt( i ); m_tree.DeleteItem(m_hI); m_hI = NULL; cs.Unlock(); m_pDoc->SetModifiedFlag(); if( pObj->IsKindOf(RUNTIME_CLASS( CImgReferenced )) ) m_pDoc->UpdateAllViews(NULL, UPDATE_BITMAP_DELETE); else if( pObj->IsKindOf(RUNTIME_CLASS(CGridObj)) ) m_pDoc->UpdateAllViews(NULL, UPDATE_LEADHRZ_DELETE); else if( pObj->IsKindOf(RUNTIME_CLASS(CData3D)) ) m_pDoc->UpdateAllViews(NULL, UPDATE_DATA3D_DELETE); else m_pDoc->UpdateAllViews(NULL); delete pObj; return; } } } CBody* pBd; pBd = (CBody*) FindBody(m_hI); if(pBd) { int res = AfxMessageBox("Delete Body? Sure?", MB_YESNO | MB_ICONQUESTION); if( res == IDYES ) { m_pDoc->GetModel()->DeleteBody( pBd->GetID() ); m_tree.DeleteItem(m_hI); m_hI = NULL; m_pDoc->SetModifiedFlag(); m_pDoc->UpdateAllViews(NULL, UPDATE_BODY_EDIT_DELETE); } } cs.Unlock(); }
static void Loop(BLOCK *b) { BLOCKLIST *bl ; if (b->visiteddfst) return; bl = b->succ; b->visiteddfst = TRUE; while (bl) { Loop(bl->block); bl = bl->next; } if (b->loopGenerators) { FindBody(b->loopGenerators, b, LT_MULTI); } FindLoop(b); }
void CDlgObjectManager::OnNMDblclkTree(NMHDR *pNMHDR, LRESULT *pResult) { if( m_pDoc == NULL) return; CMyObject* pObj; HTREEITEM hI; CPoint pt; UINT uFlags; CRect rc; GetCursorPos(&pt); m_tree.GetWindowRect(&rc); pt.x -= rc.left; pt.y -= rc.top; hI = m_tree.HitTest( pt, &uFlags); pObj = FindObj(hI); if(pObj && m_pDoc && (TVHT_ONITEM & uFlags)) { pObj->Properties(); m_tree.SetItemText(hI, pObj->GetIdName()); if(m_pDoc) { m_pDoc->SetModifiedFlag(); if( pObj->IsKindOf(RUNTIME_CLASS( CImgReferenced )) ) m_pDoc->UpdateAllViews(NULL, UPDATE_BITMAP_CAHNGED); else if( pObj->IsKindOf(RUNTIME_CLASS(CGridObj)) ) m_pDoc->UpdateAllViews(NULL, UPDATE_LEADHRZ_CAHNGED); else if( pObj->IsKindOf(RUNTIME_CLASS(CData3D)) ) m_pDoc->UpdateAllViews(NULL, UPDATE_DATA3D_CHANGED); else m_pDoc->UpdateAllViews(NULL); } } CBody* pBd; pBd = (CBody*) FindBody(hI); if(pBd && m_pDoc && (TVHT_ONITEM & uFlags)) { pBd->Properties(); m_tree.SetItemText( hI, pBd->GetStrIdName() ); } pNMHDR->code = 0; *pResult = 0; }
void CDlgObjectManager::OnNMRclickTree(NMHDR *pNMHDR, LRESULT *pResult) { if( m_pDoc == NULL) return; CMyObject* pObj; HTREEITEM hI; CPoint pt, ptMenu; UINT uFlags; CRect rc; GetCursorPos(&pt); ptMenu=pt; m_tree.GetWindowRect(&rc); pt.x -= rc.left; pt.y -= rc.top; hI = m_tree.HitTest( pt, &uFlags); pObj = FindObj(hI); if(pObj && (uFlags==TVHT_ONITEMLABEL) ){ m_hI = hI; CMenu menu; CRect wndRect; this->GetWindowRect(wndRect); menu.LoadMenu(IDR_MENU_OBJMNG); CMenu* subMenu = menu.GetSubMenu(0); subMenu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON , ptMenu.x, ptMenu.y, this); } CBody* pBd; pBd = (CBody*) FindBody(hI); if(pBd && (uFlags==TVHT_ONITEMLABEL) ) { m_hI = hI; CMenu menu; CRect wndRect; this->GetWindowRect(wndRect); menu.LoadMenu(IDR_MENU_OBJMNG); CMenu* subMenu = menu.GetSubMenu(0); subMenu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON , ptMenu.x, ptMenu.y, this); } *pResult = 0; }
void CDlgObjectManager::OnNMClickTree(NMHDR *pNMHDR, LRESULT *pResult) { if( m_pDoc == NULL) return; CMyObject* pObj; HTREEITEM hI; CPoint pt; UINT uFlags; CRect rc; GetCursorPos(&pt); m_tree.GetWindowRect(&rc); pt.x -= rc.left; pt.y -= rc.top; hI = m_tree.HitTest( pt, &uFlags); pObj = FindObj(hI); if(pObj && (uFlags==64)) { pObj->Show( !m_tree.GetCheck(hI) ); if(m_pDoc) { m_pDoc->UpdateAllViews(NULL, UPDATE_OBJECT_MANAGER_SHOW); //if( pObj->IsKindOf(RUNTIME_CLASS( CImgReferenced )) ) // m_pDoc->UpdateAllViews(NULL, UPDATE_BITMAP_DELETE); //if( pObj->IsKindOf(RUNTIME_CLASS(CGridObj)) ) // m_pDoc->UpdateAllViews(NULL, UPDATE_LEADHRZ_DELETE); } } CBody* pBd; pBd = (CBody*) FindBody(hI); if(pBd && (uFlags==64)) { pBd->Show( !m_tree.GetCheck(hI) ); if(m_pDoc) m_pDoc->UpdateAllViews(NULL, UPDATE_OBJECT_MANAGER_SHOW); } pNMHDR->code = 0; *pResult = 0; }
void BuildLoopTree(void) { BLOCKLIST bl; BLOCK *b; int i; QUAD *tail; BOOL skip = FALSE; /* this is padded, but, in a really really complex program it could get to be too small */ loopArray = oAlloc(sizeof(LOOP *) * blockCount * 4); loopItems = briggsAlloc((blockCount) * 4); loopCount = 0; for (i=0; i < blockCount; i++) { if (blockArray[i]) { blockArray[i]->visiteddfst = FALSE; blockArray[i]->loopParent = NULL; blockArray[i]->loopName = oAlloc(sizeof(LOOP)); blockArray[i]->loopName->type = LT_BLOCK; blockArray[i]->loopName->entry = blockArray[i]; blockArray[i]->loopName->loopnum = loopCount; blockArray[i]->loopGenerators = NULL; loopArray[loopCount++] = blockArray[i]->loopName; } // else // loopCount++; } Loop(blockArray[0]); // CalculateSuccessors(loopArray[loopCount-1]); memset(&bl, 0, sizeof(bl)); bl.block = blockArray[exitBlock]; FindBody(&bl, blockArray[0], LT_ROOT); CalculateLoopedBlocks(loopArray[loopCount-1]); if (cparams.prm_icdfile) { fprintf(icdFile, "; loop dump\n"); dump_loops(); } tail = intermed_tail; b = tail->block; while (tail) { switch(tail->dc.opcode) { case i_skipcompare: skip = !skip; break; case i_block: b = tail->block; break; } if (tail->block) { if (skip) { tail->block->inclusiveLoopParent = b->loopParent; } else { tail->block->inclusiveLoopParent = tail->block->loopParent; } } tail = tail->back; } if (loopCount >= blockCount * 4) fatal("internal error"); }
float Box2DPhysics::GetBodyMass(unsigned int ActorID) { return MetersToPixels(FindBody(ActorID)->GetMass()); }
void Box2DPhysics::SetLinearVelocity(unsigned int ActorID, glm::vec2 velocity) { FindBody(ActorID)->SetLinearVelocity(b2Vec2(PixelsToMeters(velocity.x), PixelsToMeters(velocity.y))); }
glm::vec2 Box2DPhysics::GetLinearVelocity(unsigned int ActorID) { b2Vec2 linVel = FindBody(ActorID)->GetLinearVelocity(); return glm::vec2(MetersToPixels(linVel.x), MetersToPixels(linVel.y)); }