Skip to content
This repository has been archived by the owner on Dec 3, 2020. It is now read-only.

Commit

Permalink
Add flipping
Browse files Browse the repository at this point in the history
  • Loading branch information
rubenwardy committed Mar 1, 2015
1 parent 3b1060e commit 20bef07
Show file tree
Hide file tree
Showing 8 changed files with 103 additions and 8 deletions.
Binary file added media/flip_x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/flip_y.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/flip_z.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 12 additions & 1 deletion src/Node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,22 @@ void Node::hide()
}
}

void Node::rotate(EAxis axis) {
void Node::rotate(EAxis axis)
{
for (std::vector<NodeBox*>::iterator it = boxes.begin();
it != boxes.end();
++it) {
(*it)->rotate(axis);
}
remesh();
}

void Node::flip(EAxis axis)
{
for (std::vector<NodeBox*>::iterator it = boxes.begin();
it != boxes.end();
++it) {
(*it)->flip(axis);
}
remesh();
}
1 change: 1 addition & 0 deletions src/Node.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class Node
void remesh(NodeBox *box);
void setAllTextures(Media::Image *def);
void rotate(EAxis axis);
void flip(EAxis axis);
void hide();

void setTexture(CubeSide face, Media::Image *image);
Expand Down
43 changes: 43 additions & 0 deletions src/NodeBox.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -431,3 +431,46 @@ void NodeBox::rotate(EAxis axis)
two.Z = tmp;
}
}

void NodeBox::flip(EAxis axis)
{
switch (axis) {
case EAX_X: {
f32 tmp = one.X;
one.X = -two.X;
two.X = -tmp;
break;
}
case EAX_Y: {
f32 tmp = one.Y;
one.Y = -two.Y;
two.Y = -tmp;
break;
}
case EAX_Z: {
f32 tmp = one.Z;
one.Z = -two.Z;
two.Z = -tmp;
break;
}};

// Check relative sizes
if (one.X > two.X) {
std::cerr << "This shouldn't happen! (X)" << std::endl;
f32 tmp = one.X;
one.X = two.X;
two.X = tmp;
}
if (one.Y > two.Y) {
std::cerr << "This shouldn't happen! (Y)" << std::endl;
f32 tmp = one.Y;
one.Y = two.Y;
two.Y = tmp;
}
if (one.Z > two.Z) {
std::cerr << "This shouldn't happen! (Z)" << std::endl;
f32 tmp = one.Z;
one.Z = two.Z;
two.Z = tmp;
}
}
1 change: 1 addition & 0 deletions src/NodeBox.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class NodeBox
void moveNodeBox(EditorState* editor, CDRType type, vector3df position);
void buildNode(EditorState* editor, vector3di nd_position, IrrlichtDevice* device, Media::Image* images[6]);
void rotate(EAxis axis);
void flip(EAxis axis);
};

#endif
53 changes: 46 additions & 7 deletions src/modes/NBEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

// The gui id numbers for this mode
// NOTE: the maximum that can be here is 20
// see in MenuState.h to raise limit
// see in MenuState.hpp to raise the limit
enum NODEBOX_EDITOR_GUI_IDS {
ENB_GUI_MAIN_LISTBOX = GUI_SIDEBAR + 1,
ENB_GUI_MAIN_MSG,
Expand All @@ -21,6 +21,9 @@ enum NODEBOX_EDITOR_GUI_IDS {
ENB_GUI_PROP_NAME,
ENB_GUI_PROP_UPDATE,
ENB_GUI_PROP_REVERT,
ENB_GUI_FLP_X,
ENB_GUI_FLP_Y,
ENB_GUI_FLP_Z,
ENB_GUI_ROT_X,
ENB_GUI_ROT_Y,
ENB_GUI_ROT_Z
Expand Down Expand Up @@ -58,7 +61,7 @@ void NBEditor::load()
false, true, sidebar, ENB_GUI_MAIN_MSG);


IGUIListBox *lb = guienv->addListBox(rect<s32>(20, 35, 230, 133),
IGUIListBox *lb = guienv->addListBox(rect<s32>(10, 35+20, 227, 133+20),
sidebar, ENB_GUI_MAIN_LISTBOX, true);

if (lb) {
Expand All @@ -71,27 +74,46 @@ void NBEditor::load()
b2->setNotClipped(true);
}


// Rotate X
static ITexture *flp_x = state->device->getVideoDriver()->getTexture("media/flip_x.png");
IGUIButton *btn = guienv->addButton(rect<s32>(10, 20, 120+32 - (32+5)*3, 52), sidebar, ENB_GUI_FLP_X, L"", L"Rotate node through X axis");
btn->setImage(flp_x);
btn->setUseAlphaChannel(true);

// Rotate Y
static ITexture *flp_y = state->device->getVideoDriver()->getTexture("media/flip_y.png");
btn = guienv->addButton(rect<s32>(121 - (32+5)*2, 20, 120+32 - (32+5)*2, 32+20), sidebar, ENB_GUI_FLP_Y, L"", L"Rotate node through Y axis");
btn->setImage(flp_y);
btn->setUseAlphaChannel(true);

// Rotate Z
static ITexture *flp_z = state->device->getVideoDriver()->getTexture("media/flip_z.png");
btn = guienv->addButton(rect<s32>(121 - (32+5), 20, 120+32 - (32+5), 32+20), sidebar, ENB_GUI_FLP_Z, L"", L"Rotate node through Z axis");
btn->setImage(flp_z);
btn->setUseAlphaChannel(true);

// Rotate X
static ITexture *rot_x = state->device->getVideoDriver()->getTexture("media/rotate_x.png");
IGUIButton *btn = guienv->addButton(rect<s32>(120, 0, 120+32, 32), sidebar, ENB_GUI_ROT_X, L"", L"Rotate node through X axis");
btn = guienv->addButton(rect<s32>(121, 20, 120+32, 32+20), sidebar, ENB_GUI_ROT_X, L"", L"Rotate node through X axis");
btn->setImage(rot_x);
btn->setUseAlphaChannel(true);

// Rotate Y
static ITexture *rot_y = state->device->getVideoDriver()->getTexture("media/rotate_y.png");
btn = guienv->addButton(rect<s32>(120 + (32+5)*1, 0, 120+32 + (32+5)*1, 32), sidebar, ENB_GUI_ROT_Y, L"", L"Rotate node through Y axis");
btn = guienv->addButton(rect<s32>(121 + (32+5)*1, 20, 120+32 + (32+5)*1, 32+20), sidebar, ENB_GUI_ROT_Y, L"", L"Rotate node through Y axis");
btn->setImage(rot_y);
btn->setUseAlphaChannel(true);

// Rotate Z|
// Rotate Z
static ITexture *rot_z = state->device->getVideoDriver()->getTexture("media/rotate_z.png");
btn = guienv->addButton(rect<s32>(120 + (32+5)*2, 0, 120+32 + (32+5)*2, 32), sidebar, ENB_GUI_ROT_Z, L"", L"Rotate node through Z axis");
btn = guienv->addButton(rect<s32>(121 + (32+5)*2, 20, 120+32 + (32+5)*2, 32+20), sidebar, ENB_GUI_ROT_Z, L"", L"Rotate node through Z axis");
btn->setImage(rot_z);
btn->setUseAlphaChannel(true);

// Create nodebox properties
t = guienv->addStaticText(L"Properties",
rect<s32>(0, 170, 120, 190),
rect<s32>(0, 170+20, 120, 190+20),
false, true, sidebar, ENB_GUI_PROP);
t->setVisible(false);

Expand Down Expand Up @@ -449,7 +471,24 @@ bool NBEditor::OnEvent(const irr::SEvent &event) {
node->rotate(EAX_Z);
break;
}
case ENB_GUI_FLP_X: {
Node* node = state->project->GetCurrentNode();
if (node)
node->flip(EAX_X);
break;
}
case ENB_GUI_FLP_Y: {
Node* node = state->project->GetCurrentNode();
if (node)
node->flip(EAX_Y);
break;
}
case ENB_GUI_FLP_Z: {
Node* node = state->project->GetCurrentNode();
if (node)
node->flip(EAX_Z);
break;
}}
} else if (event.GUIEvent.EventType == EGET_LISTBOX_CHANGED) {
Node* node = state->project->GetCurrentNode();
IGUIListBox* lb = (IGUIListBox*) state->menu->sidebar->getElementFromId(ENB_GUI_MAIN_LISTBOX);
Expand Down

0 comments on commit 20bef07

Please sign in to comment.