Esempio n. 1
0
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;
	}
}
Esempio n. 2
0
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);
    }
}
Esempio n. 3
0
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();
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
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;
}
Esempio n. 6
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;
}
Esempio n. 7
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;
}
Esempio n. 8
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");
}
Esempio n. 9
0
float Box2DPhysics::GetBodyMass(unsigned int ActorID)
{
	return MetersToPixels(FindBody(ActorID)->GetMass());
}
Esempio n. 10
0
void Box2DPhysics::SetLinearVelocity(unsigned int ActorID, glm::vec2 velocity)
{
    FindBody(ActorID)->SetLinearVelocity(b2Vec2(PixelsToMeters(velocity.x), PixelsToMeters(velocity.y)));
}
Esempio n. 11
0
glm::vec2 Box2DPhysics::GetLinearVelocity(unsigned int ActorID)
{
    b2Vec2 linVel = FindBody(ActorID)->GetLinearVelocity();
    return glm::vec2(MetersToPixels(linVel.x), MetersToPixels(linVel.y));
}