Exemple #1
0
ActionTable* UnwrapClassDesc::GetActions()
{
	TSTR name = GetString(IDS_RB_UNWRAPMOD);
	ActionTable* pTab;
	pTab = new ActionTable(kUnwrapActions, kUnwrapContext, name);        

	int numOps = NumElements(spActions)/3;
	UnwrapAction *wtActions = NULL;
	int ct = 0;
	for (int i =0; i < numOps; i++)
	{
		wtActions = new UnwrapAction();
		int id, ids1, ids2;

		id = spActions[ct++];
		ids1 = spActions[ct++];
		ids2 = spActions[ct++];


		wtActions->Init(id,GetString(ids1),GetString(ids2),
			GetString(IDS_RB_UNWRAPMOD), GetString(IDS_RB_UNWRAPMOD)  );
		pTab->AppendOperation(wtActions);
	}

	GetCOREInterface()->GetActionManager()->RegisterActionContext(kUnwrapContext, name.data());
	return pTab;
}
Exemple #2
0
void UnwrapMod::ActivateActionTable()
{
	pCallback = new UnwrapActionCallback();
	pCallback->SetUnwrap(this);

	if  (GetCOREInterface()->GetActionManager()->ActivateActionTable(pCallback, kUnwrapActions) )
	{
		ActionTable *actionTable =  GetCOREInterface()->GetActionManager()->FindTable(kUnwrapActions);
		if (actionTable)
		{
			int actionCount = NumElements(spActions)/3;
			for (int i =0; i < actionCount; i++)
			{
				int id = spActions[i*3];
				UnwrapAction *action =  (UnwrapAction *) actionTable->GetAction(spActions[i*3]);
				if (action)
				{
					action->SetUnwrap(this);
				}

			}

		}
	}

}
void WeightTableWindow::ActivateActionTable()
	{

	if (pCallback) DeActivateActionTable();

	pCallback = new WeightTableActionCallback();
	pCallback->SetWeightTable(this);

	if (GetCOREInterface()->GetActionManager()->ActivateActionTable(pCallback, kWeightTableActions) )
		{

		ActionTable *actionTable =  GetCOREInterface()->GetActionManager()->FindTable(kWeightTableActions);
		if (actionTable)
			{
			for (int i =0; i < actionCount; i++)
				{
				WeightTableAction *action =  (WeightTableAction *) actionTable->GetAction(actionIDs[i]);
				if (action)
					{
					action->SetWeightTable(this);
					}

				}

			}
		}
	}
Exemple #4
0
void AddPlasmaExportMenu()
{
    IMenuManager* pMenuMan = GetCOREInterface()->GetMenuManager();
    IMenu* fileMenu = pMenuMan->FindMenu("&File");

    int i;

    bool plasmaExportFound = false;

    // Make sure our action isn't already in the menu
    TSTR ourName = GetString(IDS_PLASMA_EXPORT);
    for (i = 0; i < fileMenu->NumItems(); i++)
    {
        IMenuItem* fileMenuItem = fileMenu->GetItem(i);
        const TSTR& title = fileMenuItem->GetTitle();
        if (title == ourName)
            plasmaExportFound = true;

        // KLUDGE - MaxAss didn't define the file submenu with an accelerator.
        // This fixes it.
        if (title == (CStr)"MAX File Operations")
        {
            fileMenuItem->SetUseCustomTitle(true);
            bool custom = fileMenuItem->GetUseCustomTitle();
            fileMenuItem->SetTitle("MAX File Opera&tions");

            pMenuMan->UpdateMenuBar();
        }
    }

    if (!plasmaExportFound)
    {
        // Menu item isn't there, add it
        for (i = 0; i < fileMenu->NumItems(); i++)
        {
            IMenuItem* fileMenuItem = fileMenu->GetItem(i);
            const TSTR& title = fileMenuItem->GetTitle();
            // We want to add it after the "Export Selected" menu item
            if (title == (CStr)"Export Selected...")
            {
                ActionTable* pActionTable = GetCOREInterface()->GetActionManager()->FindTable(kActionId);
                if (!pActionTable)
                {
                    hsAssert(0, "Action table not found");
                    return;
                }

                IMenuItem* menuItem = GetIMenuItem();
                menuItem->SetActionItem(pActionTable->GetAction(kActionExport));
                fileMenu->AddItem(menuItem, i+1);

                pMenuMan->UpdateMenuBar();

                return;
            }
        }
    }
}
bool SyntaxParserImpl::parse()
{
    vector<YYSTYPE> valueStack;
    vector<int> stateStack;
    stateStack.push_back(0);

    GotoTable *gotoTable = LALRParser::instance()->getGotoTable();
    ActionTable* actionTable = LALRParser::instance()->getActionTable();

    bool useLastToken = false;
    Token t;
    for (;;) {
        if (!m_scanner->getNext(t)) { 
            if (useLastToken) break;
            else {
                useLastToken = true;
                t.type = ESS_Term_Begin;
            }
        }

        for (;;) {
            Action act = actionTable->getAction(stateStack.back(), t.type);
            if (act.type == Action::T_Shift) {
                if (t.type == ESS_Term_Begin) { 
                    stateStack.clear();
                    break;
                }
                stateStack.push_back(act.value);
                valueStack.push_back(yylval);
                break;
            }
            else if (act.type == Action::T_Reduce) {
                auto& body = getProductBody(act.value);
                YYSTYPE head;
                g_lrproductionHead = &head;
                g_lrproductionBody = body.empty() ? &head : &valueStack[valueStack.size() - body.size()];
                getProductionAction(act.value)();
                valueStack.erase(valueStack.end() - body.size(), valueStack.end());
                valueStack.push_back(head);
                stateStack.erase(stateStack.end() - body.size(), stateStack.end());
                int nstate = gotoTable->getNextState(stateStack.back(), getProductHead(act.value));
                stateStack.push_back(nstate);
            }
            else ASSERT(0);
        }
    }
    ASSERT(stateStack.empty());

    return true;
}
void WeightTableWindow::DeActivateActionTable()
	{
	ActionTable *actionTable =  GetCOREInterface()->GetActionManager()->FindTable(kWeightTableActions);
	if (actionTable)
		{
		for (int i =0; i < actionCount; i++)
			{
			WeightTableAction *action =  (WeightTableAction *) actionTable->GetAction(actionIDs[i]);
			if (action)
				{
				action->SetWeightTable(NULL);
				}
			}
		}
	GetCOREInterface()->GetActionManager()->DeactivateActionTable(pCallback, kWeightTableActions); 
	delete pCallback;
	pCallback = NULL;
	}
Exemple #7
0
//action Table methods
void UnwrapMod::DeActivateActionTable()
{
	ActionTable *actionTable =  GetCOREInterface()->GetActionManager()->FindTable(kUnwrapActions);
	if (actionTable)
	{
		int actionCount = NumElements(spActions)/3;
		for (int i =0; i < actionCount; i++)
		{
			UnwrapAction *action =  (UnwrapAction *) actionTable->GetAction(spActions[i*3]);
			if (action)
			{
				action->SetUnwrap(NULL);
			}
		}
	}

	if (pCallback) {
		GetCOREInterface()->GetActionManager()->DeactivateActionTable(pCallback, kUnwrapActions); 
		delete pCallback;
		pCallback = NULL;
	}
}
Exemple #8
0
void plCreateMenu()
{
#if MAX_VERSION_MAJOR <= 11
    AddPlasmaExportMenu();
#endif

    IMenuManager* pMenuMan = GetCOREInterface()->GetMenuManager();
    bool newlyRegistered = pMenuMan->RegisterMenuBarContext(kMyMenuContextId, kMenuName);

    // Is the Max menu version the most recent?
    bool wrongVersion = GetPrivateProfileIntW(L"Menu", L"Version", 0, plMaxConfig::GetPluginIni().WideString().data()) < kMenuVersion;
    if (wrongVersion)
    {
        // Delete the old version of the menu
        IMenu *oldMenu = pMenuMan->FindMenu(kMenuName);
        if (oldMenu)
            pMenuMan->UnRegisterMenu(oldMenu);

        // Update the menu version
        wchar_t buf[12];
        snwprintf(buf, arrsize(buf), L"%d", kMenuVersion);
        WritePrivateProfileStringW(L"Menu", L"Version", buf, plMaxConfig::GetPluginIni().WideString().data());
    }
    
    if (wrongVersion || newlyRegistered)
    {
        IMenu *pMainMenu = pMenuMan->GetMainMenuBar();
        if (!pMainMenu)
        {
            hsAssert(0, "Main menu not found");
            return;
        }

        // Get our action table
        ActionTable* pActionTable = GetCOREInterface()->GetActionManager()->FindTable(kActionId);
        if (!pActionTable)
        {
            hsAssert(0, "Action table not found");
            return;
        }

        // Create the Plasma menu
        IMenu* pPlasmaMenu = GetIMenu();
        pPlasmaMenu->SetTitle(kMenuName);

        // Register the new menu with the system
        pMenuMan->RegisterMenu(pPlasmaMenu, 0);

        /////////////////////////////////////////////////
        // Add the menu items
        //
        IMenuItem* pMenuItem;
 
#if MAX_VERSION_MAJOR >= 12
        // Add the export action to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionExport));
        pPlasmaMenu->AddItem(pMenuItem);
#endif

        // Add the save selected action to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionSaveSel));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add the merge action to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionMerge));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add the component copy action to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionCompCopy));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add a separator
        pMenuItem = GetIMenuItem();
        pMenuItem->ActAsSeparator();
        pPlasmaMenu->AddItem(pMenuItem);
    
        // Add the component manager to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionComponent));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add the resource collector to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionResCollect));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add the texture search to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionTexSearch));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add the age description to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionAgeDesc));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add a separator
        pMenuItem = GetIMenuItem();
        pMenuItem->ActAsSeparator();
        pPlasmaMenu->AddItem(pMenuItem);

        // Add the Lock Selected to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionLock));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add the Unlock Selected to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionUnlock));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add the Reset Selected to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionReset));
        pPlasmaMenu->AddItem(pMenuItem);

        // Add the SelectNonRenderables to the menu
        pMenuItem = GetIMenuItem();
        pMenuItem->SetActionItem(pActionTable->GetAction(kActionSelectNonRenderables));
        pPlasmaMenu->AddItem(pMenuItem);

        // Create a new menu item to hold the sub-menu
        IMenuItem* pSubMenuItem1 = GetIMenuItem();   //menu in menu bar...
        pSubMenuItem1->SetSubMenu(pPlasmaMenu);
        pMainMenu->AddItem(pSubMenuItem1);

        pMenuMan->UpdateMenuBar();

        // Save the dang menu, in case Max crashes
        const char *uiDir = GetCOREInterface()->GetDir(APP_UI_DIR);
        char path[MAX_PATH];
        sprintf(path, "%s\\%s", uiDir, "MaxMenus.mnu");
        
        pMenuMan->SaveMenuFile(path);
    }

}
ActionTable* GetEditPolyActions() {
	TSTR name = GetString (IDS_EDITPOLY_EDIT_POLY);
	HACCEL hAccel = LoadAccelerators (hInstance, MAKEINTRESOURCE (IDR_ACCEL_EPOLY));
	ActionTable* pTab = NULL;
	pTab = new ActionTable (kEditPolyActionID, kEditPolyActionID,
		name, hAccel, kNumEPolyActions, epolyActions, hInstance);
    GetCOREInterface()->GetActionManager()->RegisterActionContext
		(kEditPolyActionID, name.data());

	IActionItemOverrideManager *actionOverrideMan = static_cast<IActionItemOverrideManager*>(GetCOREInterface(IACTIONITEMOVERRIDEMANAGER_INTERFACE ));
	if(actionOverrideMan)
	{
		//register the action items
		TSTR desc;
		ActionItem *item = pTab->GetAction(ID_EP_SEL_LEV_OBJ);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}
	/*  Kelcey said don't do these guys only the object.. leave in case she changes her mind..
		item = pTab->GetAction(ID_EP_SEL_LEV_VERTEX);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}
		item = pTab->GetAction(ID_EP_SEL_LEV_EDGE);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	
		item = pTab->GetAction(ID_EP_SEL_LEV_BORDER);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		item = pTab->GetAction(ID_EP_SEL_LEV_FACE);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		item = pTab->GetAction(ID_EP_SEL_LEV_ELEMENT);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	
	*/
		//command overrides	
		item = pTab->GetAction(ID_EP_EDIT_CUT);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		//new edit soft selection mode
		item = pTab->GetAction(ID_EP_EDIT_SS);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}
		item = pTab->GetAction(ID_EP_EDIT_QUICKSLICE);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	
		/*
		item = pTab->GetAction(ID_EP_EDIT_SLICEPLANE);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}
		*/

		//face command mdoes
		item = pTab->GetAction(ID_EP_SUB_BEVEL);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		item = pTab->GetAction(ID_EP_SUB_OUTLINE);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		item = pTab->GetAction(ID_EP_SUB_INSET);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		item = pTab->GetAction(ID_EP_SUB_HINGE);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		//less than edge 
		item = pTab->GetAction(ID_EP_SUB_WELD);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		//greater edge
		item = pTab->GetAction(ID_EP_TURN);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		item = pTab->GetAction(ID_EP_SURF_EDITTRI);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		//chamfer
		item = pTab->GetAction(ID_EP_SUB_CHAMFER);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		//create
		item = pTab->GetAction(ID_EP_EDIT_CREATE);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		//insert
		item = pTab->GetAction(ID_EP_SUB_INSERTVERT);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		//bridge
		item = pTab->GetAction(ID_EP_SUB_BRIDGE);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	

		//extrude
		item = pTab->GetAction(ID_EP_SUB_EXTRUDE);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}	
		
		//none constrain
		item = pTab->GetAction(ID_EP_NONE_CONSTRAINT);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}
		//normal constrain
		item = pTab->GetAction(ID_EP_NORMAL_CONSTRAINT);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}
		//edge constrain
		item = pTab->GetAction(ID_EP_EDGE_CONSTRAINT);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}
		//face constrain
		item = pTab->GetAction(ID_EP_FACE_CONSTRAINT);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}
		
		//paint 
		item = pTab->GetAction(ID_EP_SS_PAINT);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}

		//paint push/pull
		item = pTab->GetAction(ID_EP_SS_PAINTPUSHPULL);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}

		//paint relax
		item = pTab->GetAction(ID_EP_SS_PAINTRELAX);
		if(item)
		{
			item->GetDescriptionText(desc);
			actionOverrideMan->RegisterActionItemOverride(item,desc); 
		}



	}
	return pTab;
}
Exemple #10
0
void LALRParser::build()
{
    LR0ItemCollectionFamily LR0Family;
    LR0Family.build();

    map<LR1Point, set<int> > point2Terms;
    map<LR1Point, set<LR1Point> > point2Points;
    set<LR1Point> unhandled;

    for (int state = 0; state < (int)LR0Family.ID2Collection.size(); ++state) {
        for (auto item : LR0Family.ID2Collection[state]) {
            LR1Point pt0(state, item.productID, item.pos);
            LR1ItemCollection col;
            closureLR1Item(LR1Item(item.productID, item.pos, ESS_Term_End), col);
            for (auto _item : col) {
                if (isImportantLR0Item(_item.productID, _item.pos)) {
                    LR1Point pt1(state, _item.productID, _item.pos);
                    if (_item.term == ESS_Term_End) { 
                        point2Points[pt0].insert(pt1);
                    }
                    else {
                        point2Terms[pt1].insert(_item.term);
                        unhandled.insert(pt1);
                    }
                    auto &body = getProductBody(_item.productID);
                    if (_item.pos >= body.size()) continue;
                    LR1Point pt2(LR0Family.transMap[state][body[_item.pos]], _item.productID, _item.pos + 1);
                    point2Points[pt1].insert(pt2);
                }
                else {
                    auto &body = getProductBody(_item.productID);
                    if (_item.pos >= body.size()) continue;
                    LR1Point pt2(LR0Family.transMap[state][body[_item.pos]], _item.productID, _item.pos + 1);
                    if (_item.term == ESS_Term_End) {
                        point2Points[pt0].insert(pt2);
                    }
                    else {
                        point2Terms[pt2].insert(_item.term);
                        unhandled.insert(pt2);
                    }
                }
            }
        }
    }

    while (!unhandled.empty()) {
        LR1Point point = *unhandled.begin();
        unhandled.erase(unhandled.begin());
        auto& terms = point2Terms[point];
        for (auto ditem : point2Points[point]) {
            auto& dterms = point2Terms[ditem];
            auto osize = dterms.size();
            dterms.insert(terms.begin(), terms.end());
            if (dterms.size() != osize) {
                unhandled.insert(ditem);
            }
        }
    }

    m_gotoTable.setStateCount((int)LR0Family.ID2Collection.size());
    m_actionTable.setStateCount((int)LR0Family.ID2Collection.size());

    for (int state = 0; state < (int)LR0Family.ID2Collection.size(); ++state) {
        for (auto term : g_termList) {
            Action act;
            {
                auto &m = LR0Family.transMap[state];
                if (m.count(term)) {
                    mergeAction(act, Action(Action::T_Shift, m[term]), LR0Family);
                }
            }
            for (auto item : LR0Family.ID2Collection[state]) {
                auto& body = getProductBody(item.productID);
                if (item.pos != body.size()) continue;
                auto& terms = point2Terms[LR1Point(state, item.productID, item.pos)];
                if (terms.count(term) == 0) continue;
                mergeAction(act, Action(Action::T_Reduce, item.productID), LR0Family);
            }
            m_actionTable.setAction(state, term, act);
        }
        for (auto nonTerm : g_nonTermList) {
            auto &m = LR0Family.transMap[state];
            if (m.count(nonTerm)) {
                m_gotoTable.setNextState(state, nonTerm, m[nonTerm]);
            }
        }
    }
}