snapTo Menu by Paul Weston

This commit is contained in:
Johxz 2017-06-23 19:19:48 -05:00
parent 8943c673fb
commit 27347d9a52
2 changed files with 82 additions and 1 deletions

View file

@ -875,6 +875,64 @@ function EditorDropTypeMenu::setupDefaultState(%this)
//////////////////////////////////////////////////////////////////////////
function EditorSnapToMenu::onSelectItem(%this, %id, %text)
{
EWorldEditor.SnapTo(%id);
}
function EditorSnapToMenu::setupDefaultState(%this)
{
Parent::setupDefaultState(%this);
}
function WorldEditor::snapTo(%this, %id)
{
if(%this.getSelectionSize() > 2)
{
error("Please select two objects before selecting a Snap To function.");
return;
}
%objTarget = %this.getSelectedObject(0);
%objToSnap = %this.getSelectedObject(%this.getSelectionSize()-1);
switch$(%id)
{
case 0:
%objToSnap.setTransform(setWord(%objToSnap.getTransform(), 0, getWord(%objTarget.getTransform(), 0)));
case 1:
%objTargetXEdge = getWord(%objTarget.getTransform(), 0) + getWord(%objTarget.getObjectBox(), 0);
%objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 3);
%objToSnap.setTransform(setWord(%objToSnap.getTransform(), 0, %objToSnapXEdge));
case 2:
%objTargetXEdge = getWord(%objTarget.getTransform(), 0) + getWord(%objTarget.getObjectBox(), 3);
%objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 0);
%objToSnap.setTransform(setWord(%objToSnap.getTransform(), 0, %objToSnapXEdge));
case 3:
%objToSnap.setTransform(setWord(%objToSnap.getTransform(), 1, getWord(%objTarget.getTransform(), 1)));
case 4:
%objTargetXEdge = getWord(%objTarget.getTransform(), 1) + getWord(%objTarget.getObjectBox(), 1);
%objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 4);
%objToSnap.setTransform(setWord(%objToSnap.getTransform(), 1, %objToSnapXEdge));
case 5:
%objTargetXEdge = getWord(%objTarget.getTransform(), 1) + getWord(%objTarget.getObjectBox(), 4);
%objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 1);
%objToSnap.setTransform(setWord(%objToSnap.getTransform(), 1, %objToSnapXEdge));
case 6:
%objToSnap.setTransform(setWord(%objToSnap.getTransform(), 2, getWord(%objTarget.getTransform(), 2)));
case 7:
%objTargetXEdge = getWord(%objTarget.getTransform(), 2) + getWord(%objTarget.getObjectBox(), 2);
%objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 5);
%objToSnap.setTransform(setWord(%objToSnap.getTransform(), 2, %objToSnapXEdge));
case 8:
%objTargetXEdge = getWord(%objTarget.getTransform(), 2) + getWord(%objTarget.getObjectBox(), 5);
%objToSnapXEdge = %objTargetXEdge - getWord(%objToSnap.getObjectBox(), 2);
%objToSnap.setTransform(setWord(%objToSnap.getTransform(), 2, %objToSnapXEdge));
}
}
//////////////////////////////////////////////////////////////////////////
function EditorAlignBoundsMenu::onSelectItem(%this, %id, %text)
{
// Have the editor align all selected objects by the selected bounds.

View file

@ -230,7 +230,30 @@ function EditorGui::buildMenus(%this)
item[16] = "Jump to Bookmark" TAB %this.cameraBookmarksMenu;
};
%this.menuBar.insert(%cameraMenu, %this.menuBar.getCount());
// Snap Menu
%snapToMenu = new PopupMenu()
{
superClass = "MenuBuilder";
class = "EditorSnapToMenu";
barTitle = "SnapTo";
// The onSelectItem() callback for this menu re-purposes the command field
// as the MenuBuilder version is not used.
item[0] = "Snap 2nd Object To 1st X" TAB "" TAB "X";
item[1] = "Snap 2nd Object To 1st X+" TAB "" TAB "X+";
item[2] = "Snap 2nd Object To 1st X-" TAB "" TAB "X-";
item[3] = "Snap 2nd Object To 1st Y" TAB "" TAB "Y";
item[4] = "Snap 2nd Object to 1st Y+" TAB "" TAB "Y+";
item[5] = "Snap 2nd Object to 1st Y-" TAB "" TAB "Y-";
item[6] = "Snap 2nd Object To 1st Z" TAB "" TAB "Z";
item[7] = "Snap 2nd Object to 1st Z+" TAB "" TAB "Z+";
item[8] = "Snap 2nd Object to 1st Z-" TAB "" TAB "Z-";
};
%this.menuBar.insert(%snapToMenu, %this.menuBar.getCount());
// Editors Menu
%editorsMenu = new PopupMenu()
{