History

Switching nudge to cut/paste implementation. Preliminary.

LionTurtle committed 13 years ago

Commit d9657891 parent 59943dc5 files · +58 −39Browse files

Unified · Split

5 files
  1. interface/src/Application.cpp +44 −14
  2. interface/src/Menu.cpp +2 −7
  3. interface/src/Util.cpp +11 −13
  4. interface/src/Util.h +1 −1
  5. libraries/voxels/src/VoxelTree.h +0 −4
interface/src/Application.cpp+44−14
@@ -1287,22 +1287,52 @@ void Application::pasteVoxels() { · 1286 unmodified lines
1287 1287
1288void Application::nudgeVoxels() {1288void Application::nudgeVoxels() {
1289 if (Menu::getInstance()->isOptionChecked(MenuOption::VoxelNudgeMode)) {1289 if (Menu::getInstance()->isOptionChecked(MenuOption::VoxelNudgeMode)) {
1290 cutVoxels();
1291 unsigned char* calculatedOctCode = NULL;
1290 VoxelNode* selectedNode = _voxels.getVoxelAt(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);1292 VoxelNode* selectedNode = _voxels.getVoxelAt(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
1291 1293
1294 // Recurse the clipboard tree, where everything is root relative, and send all the colored voxels to
1295 // the server as an set voxel message, this will also rebase the voxels to the new location
1296 SendVoxelsOperationArgs args;
1297
1298 // we only need the selected voxel to get the newBaseOctCode, which we can actually calculate from the
1299 // voxel size/position details. If we don't have an actual selectedNode then use the mouseVoxel to create a
1300 // target octalCode for where the user is pointing.
1292 if (selectedNode) {1301 if (selectedNode) {
1293 // glPushMatrix();1302 args.newBaseOctCode = selectedNode->getOctalCode();
1294 // glScalef(TREE_SCALE, TREE_SCALE, TREE_SCALE);1303 } else {
1295 // renderNudgeGrid(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);1304 args.newBaseOctCode = calculatedOctCode = pointToVoxel(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
1296 // glPopMatrix();1305 }
1297 qDebug("UnNudged xyz: %f, %f, %f\n", _mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z);1306
1307 _sharedVoxelSystem.getTree()->recurseTreeWithOperation(sendVoxelsOperation, &args);
1308 glm::vec3 nudgeVec(0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s);
1309 _voxels.getVoxelTree()->nudgeSubTree(selectedNode, nudgeVec, _voxelEditSender);
1298 1310
1299 // nudge the node1311 if (_sharedVoxelSystem.getTree() != &_clipboard) {
1300 // glm::vec3 nudgeVec(_mouseVoxel.s, _mouseVoxel.s, _mouseVoxel.s);1312 _sharedVoxelSystem.killLocalVoxels();
1301 // glm::vec3 nudgeVec(0.5 * _mouseVoxel.s, 0.5 * _mouseVoxel.s, 0.5 * _mouseVoxel.s);1313 _sharedVoxelSystem.changeTree(&_clipboard);
1302 glm::vec3 nudgeVec(0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s);1314 }
1303 _voxels.getVoxelTree()->nudgeSubTree(selectedNode, nudgeVec, _voxelEditSender);1315
1316 _voxelEditSender.flushQueue();
1317
1318 if (calculatedOctCode) {
1319 delete[] calculatedOctCode;
1304 }1320 }
1305 }1321 }
1322
1323
1324
1325 // VoxelNode* selectedNode = _voxels.getVoxelAt(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
1326
1327 // if (selectedNode) {
1328 // qDebug("UnNudged xyz: %f, %f, %f\n", _mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z);
1329
1330 // // nudge the node
1331 // // glm::vec3 nudgeVec(_mouseVoxel.s, _mouseVoxel.s, _mouseVoxel.s);
1332 // // glm::vec3 nudgeVec(0.5 * _mouseVoxel.s, 0.5 * _mouseVoxel.s, 0.5 * _mouseVoxel.s);
1333 // glm::vec3 nudgeVec(0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s, 0.25 * _mouseVoxel.s);
1334 // _voxels.getVoxelTree()->nudgeSubTree(selectedNode, nudgeVec, _voxelEditSender);
1335 // }
1306}1336}
1307 1337
1308void Application::setListenModeNormal() {1338void Application::setListenModeNormal() {
@@ -2278,10 +2308,10 @@ void Application::displaySide(Camera& whichCamera) { · 969 unmodified lines
2278 glPushMatrix();2308 glPushMatrix();
2279 glScalef(TREE_SCALE, TREE_SCALE, TREE_SCALE);2309 glScalef(TREE_SCALE, TREE_SCALE, TREE_SCALE);
2280 if (Menu::getInstance()->isOptionChecked(MenuOption::VoxelNudgeMode)) {2310 if (Menu::getInstance()->isOptionChecked(MenuOption::VoxelNudgeMode)) {
2281 VoxelNode* selectedNode = _voxels.getVoxelAt(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s);2311 // VoxelNode* selectedNode = _voxels.getVoxelAt(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s);
2282 if (selectedNode) {2312 // if (selectedNode) {
2283 renderNudgeGrid(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s);2313 renderNudgeGrid(_nudgeVoxel.x, _nudgeVoxel.y, _nudgeVoxel.z, _nudgeVoxel.s);
2284 }2314 // }
2285 } else {2315 } else {
2286 renderMouseVoxelGrid(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);2316 renderMouseVoxelGrid(_mouseVoxel.x, _mouseVoxel.y, _mouseVoxel.z, _mouseVoxel.s);
2287 }2317 }
interface/src/Menu.cpp+2−7
@@ -108,6 +108,7 @@ Menu::Menu() : · 107 unmodified lines
108 addActionToQMenuAndActionHash(editMenu, MenuOption::CutVoxels, Qt::CTRL | Qt::Key_X, appInstance, SLOT(cutVoxels()));108 addActionToQMenuAndActionHash(editMenu, MenuOption::CutVoxels, Qt::CTRL | Qt::Key_X, appInstance, SLOT(cutVoxels()));
109 addActionToQMenuAndActionHash(editMenu, MenuOption::CopyVoxels, Qt::CTRL | Qt::Key_C, appInstance, SLOT(copyVoxels()));109 addActionToQMenuAndActionHash(editMenu, MenuOption::CopyVoxels, Qt::CTRL | Qt::Key_C, appInstance, SLOT(copyVoxels()));
110 addActionToQMenuAndActionHash(editMenu, MenuOption::PasteVoxels, Qt::CTRL | Qt::Key_V, appInstance, SLOT(pasteVoxels()));110 addActionToQMenuAndActionHash(editMenu, MenuOption::PasteVoxels, Qt::CTRL | Qt::Key_V, appInstance, SLOT(pasteVoxels()));
111 addActionToQMenuAndActionHash(editMenu, MenuOption::NudgeVoxels, Qt::CTRL | Qt::Key_N, appInstance, SLOT(nudgeVoxels()));
111 112
112 addDisabledActionAndSeparator(editMenu, "Physics");113 addDisabledActionAndSeparator(editMenu, "Physics");
113 addCheckableActionToQMenuAndActionHash(editMenu, MenuOption::Gravity, Qt::SHIFT | Qt::Key_G, true);114 addCheckableActionToQMenuAndActionHash(editMenu, MenuOption::Gravity, Qt::SHIFT | Qt::Key_G, true);
@@ -132,7 +133,7 @@ Menu::Menu() : · 18 unmodified lines
132 QAction* colorVoxelMode = addCheckableActionToQMenuAndActionHash(toolsMenu, MenuOption::VoxelColorMode, Qt::Key_B);133 QAction* colorVoxelMode = addCheckableActionToQMenuAndActionHash(toolsMenu, MenuOption::VoxelColorMode, Qt::Key_B);
133 _voxelModeActionsGroup->addAction(colorVoxelMode);134 _voxelModeActionsGroup->addAction(colorVoxelMode);
134 135
135 QAction* nudgeVoxelMode = addCheckableActionToQMenuAndActionHash(voxelMenu, MenuOption::VoxelNudgeMode, Qt::Key_N);136 QAction* nudgeVoxelMode = addCheckableActionToQMenuAndActionHash(toolsMenu, MenuOption::VoxelNudgeMode, Qt::Key_N);
136 _voxelModeActionsGroup->addAction(nudgeVoxelMode);137 _voxelModeActionsGroup->addAction(nudgeVoxelMode);
137 138
138 QAction* selectVoxelMode = addCheckableActionToQMenuAndActionHash(toolsMenu, MenuOption::VoxelSelectMode, Qt::Key_O);139 QAction* selectVoxelMode = addCheckableActionToQMenuAndActionHash(toolsMenu, MenuOption::VoxelSelectMode, Qt::Key_O);
@@ -180,12 +181,6 @@ Menu::Menu() : · 41 unmodified lines
180 appInstance,181 appInstance,
181 SLOT(setFullscreen(bool)));182 SLOT(setFullscreen(bool)));
182 addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::FirstPerson, Qt::Key_P, true);183 addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::FirstPerson, Qt::Key_P, true);
183 addActionToQMenuAndActionHash(voxelMenu, MenuOption::ExportVoxels, Qt::CTRL | Qt::Key_E, appInstance, SLOT(exportVoxels()));
184 addActionToQMenuAndActionHash(voxelMenu, MenuOption::ImportVoxels, Qt::CTRL | Qt::Key_I, appInstance, SLOT(importVoxels()));
185 addActionToQMenuAndActionHash(voxelMenu, MenuOption::CutVoxels, Qt::CTRL | Qt::Key_X, appInstance, SLOT(cutVoxels()));
186 addActionToQMenuAndActionHash(voxelMenu, MenuOption::CopyVoxels, Qt::CTRL | Qt::Key_C, appInstance, SLOT(copyVoxels()));
187 addActionToQMenuAndActionHash(voxelMenu, MenuOption::PasteVoxels, Qt::CTRL | Qt::Key_V, appInstance, SLOT(pasteVoxels()));
188 addActionToQMenuAndActionHash(voxelMenu, MenuOption::NudgeVoxels, Qt::CTRL | Qt::Key_N, appInstance, SLOT(nudgeVoxels()));
189 184
190 addActionToQMenuAndActionHash(viewMenu,185 addActionToQMenuAndActionHash(viewMenu,
191 MenuOption::IncreaseAvatarSize,186 MenuOption::IncreaseAvatarSize,
interface/src/Util.cpp+11−13
@@ -414,28 +414,26 @@ void renderMouseVoxelGrid(const float& mouseVoxelX, const float& mouseVoxelY, co · 413 unmodified lines
414 glEnd();414 glEnd();
415}415}
416 416
417void renderNudgeGrid(const float& mouseVoxelX, const float& mouseVoxelY, const float& mouseVoxelZ, const float& mouseVoxelS) {417void renderNudgeGrid(const float& voxelX, const float& voxelY, const float& voxelZ, const float& voxelS) {
418 glm::vec3 origin = glm::vec3(mouseVoxelX, mouseVoxelY, mouseVoxelZ);418 glm::vec3 origin = glm::vec3(voxelX, voxelY, voxelZ);
419 419
420 glLineWidth(1.0);420 glLineWidth(1.0);
421 421
422 const int GRID_DIMENSIONS = 4;422 const int GRID_DIMENSIONS = 4;
423 glBegin(GL_LINES);423 glBegin(GL_LINES);
424 424
425 for (int i = 0; i <= GRID_DIMENSIONS; i++) {425 for (int xz = - (GRID_DIMENSIONS / 2); xz <= GRID_DIMENSIONS / 2 + 1; xz++) {
426 for (int j = -GRID_DIMENSIONS / 2; j <= GRID_DIMENSIONS / 2; j++) {426 glm::vec3 xColor(0.0, 0.6, 0.0);
427 glm::vec3 xColor(0.0, 0.6, 0.0);427 glColor3fv(&xColor.x);
428 glColor3fv(&xColor.x);
429 428
430 glVertex3f(origin.x + GRID_DIMENSIONS * mouseVoxelS, i * mouseVoxelS, origin.z + j * mouseVoxelS);429 glVertex3f(origin.x + GRID_DIMENSIONS * voxelS, 0, origin.z + xz * voxelS);
431 glVertex3f(origin.x - GRID_DIMENSIONS * mouseVoxelS, i * mouseVoxelS, origin.z + j * mouseVoxelS);430 glVertex3f(origin.x - (GRID_DIMENSIONS - 1) * voxelS, 0, origin.z + xz * voxelS);
432 431
433 glm::vec3 zColor(0.0, 0.0, 0.6);432 glm::vec3 zColor(0.0, 0.0, 0.6);
434 glColor3fv(&zColor.x);433 glColor3fv(&zColor.x);
435 434
436 glVertex3f(origin.x + j * mouseVoxelS, i * mouseVoxelS, origin.z + GRID_DIMENSIONS * mouseVoxelS);435 glVertex3f(origin.x + xz * voxelS, 0, origin.z + GRID_DIMENSIONS * voxelS);
437 glVertex3f(origin.x + j * mouseVoxelS, i * mouseVoxelS, origin.z - GRID_DIMENSIONS * mouseVoxelS);436 glVertex3f(origin.x + xz * voxelS, 0, origin.z - (GRID_DIMENSIONS - 1) * voxelS);
438 }
439 }437 }
440 glEnd();438 glEnd();
441}439}
interface/src/Util.h+1−1
@@ -61,7 +61,7 @@ void renderGroundPlaneGrid(float size, float impact); · 60 unmodified lines
61 61
62void renderMouseVoxelGrid(const float& mouseVoxelX, const float& mouseVoxelY, const float& mouseVoxelZ, const float& mouseVoxelS);62void renderMouseVoxelGrid(const float& mouseVoxelX, const float& mouseVoxelY, const float& mouseVoxelZ, const float& mouseVoxelS);
63 63
64void renderNudgeGrid(const float& mouseVoxelX, const float& mouseVoxelY, const float& mouseVoxelZ, const float& mouseVoxelS);64void renderNudgeGrid(const float& voxelX, const float& voxelY, const float& voxelZ, const float& voxelS);
65 65
66void renderCollisionOverlay(int width, int height, float magnitude);66void renderCollisionOverlay(int width, int height, float magnitude);
67 67
libraries/voxels/src/VoxelTree.h+0−4
@@ -190,10 +190,6 @@ public: · 189 unmodified lines
190 void recurseNodeWithOperationDistanceSorted(VoxelNode* node, RecurseVoxelTreeOperation operation, 190 void recurseNodeWithOperationDistanceSorted(VoxelNode* node, RecurseVoxelTreeOperation operation,
191 const glm::vec3& point, void* extraData);191 const glm::vec3& point, void* extraData);
192 192
193 void recurseTreeWithOperationDistanceSortedTimed(PointerStack* stackOfNodes, long allowedTime,
194 RecurseVoxelTreeOperation operation,
195 const glm::vec3& point, void* extraData);
196
197 void nudgeSubTree(VoxelNode* nodeToNudge, const glm::vec3& nudgeAmount, VoxelEditPacketSender& voxelEditSender);193 void nudgeSubTree(VoxelNode* nodeToNudge, const glm::vec3& nudgeAmount, VoxelEditPacketSender& voxelEditSender);
198 194
199signals:195signals: