void Stage::visit(Visitor &visitor, const VisitArgs &args) { ToonzScene *scene = args.m_scene; TXsheet *xsh = args.m_xsh; int row = args.m_row; int col = args.m_col; const OnionSkinMask *osm = args.m_osm; bool camera3d = args.m_camera3d; int xsheetLevel = args.m_xsheetLevel; bool isPlaying = args.m_isPlaying; StageBuilder sb; sb.m_vs = &visitor.m_vs; TStageObjectId cameraId = xsh->getStageObjectTree()->getCurrentCameraId(); TStageObject *camera = xsh->getStageObject(cameraId); TAffine cameraAff = camera->getPlacement(row); double z = camera->getZ(row); sb.m_cameraPlacement = ZPlacement(cameraAff, z); sb.m_camera3d = camera3d; sb.m_currentColumnIndex = col; sb.m_xsheetLevel = xsheetLevel; sb.m_onionSkinMask = *osm; Player::m_onionSkinFrontSize = 0; Player::m_onionSkinBackSize = 0; sb.addFrame(sb.m_players, scene, xsh, row, 0, args.m_onlyVisible, args.m_checkPreviewVisibility); updateOnionSkinSize(sb.m_players); sb.visit(sb.m_players, visitor, isPlaying); }
void TKeyframeSelection::setKeyframes() { TApp *app = TApp::instance(); TXsheetHandle *xsheetHandle = app->getCurrentXsheet(); TXsheet *xsh = xsheetHandle->getXsheet(); TStageObjectId cameraId = xsh->getStageObjectTree()->getCurrentCameraId(); if (isEmpty()) return; Position pos = *m_positions.begin(); int row = pos.first; int col = pos.second; TStageObjectId id = col < 0 ? cameraId : TStageObjectId::ColumnId(col); TStageObject *pegbar = xsh->getStageObject(id); if (!pegbar) return; if (pegbar->isKeyframe(row)) { TStageObject::Keyframe key = pegbar->getKeyframe(row); pegbar->removeKeyframeWithoutUndo(row); UndoRemoveKeyFrame *undo = new UndoRemoveKeyFrame(id, row, key, xsheetHandle); undo->setObjectHandle(app->getCurrentObject()); TUndoManager::manager()->add(undo); } else { pegbar->setKeyframeWithoutUndo(row); UndoSetKeyFrame *undo = new UndoSetKeyFrame(id, row, xsheetHandle); undo->setObjectHandle(app->getCurrentObject()); TUndoManager::manager()->add(undo); } TApp::instance()->getCurrentScene()->setDirtyFlag(true); TApp::instance()->getCurrentObject()->notifyObjectIdChanged(false); }
TAffine TTool::getCurrentObjectParentMatrix2() const { TTool::Application *app = m_application; TFrameHandle *fh = app->getCurrentFrame(); if (fh->isEditingLevel()) return TAffine(); int frame = fh->getFrame(); TXsheet *xsh = app->getCurrentXsheet()->getXsheet(); TStageObjectId id = app->getCurrentObject()->getObjectId(); double objZ = xsh->getZ(id, frame); TStageObjectId parentId = xsh->getStageObjectParent(id); if (parentId == TStageObjectId::NoneId) return TAffine(); id = parentId; TAffine objPlacement = xsh->getPlacement(id, frame); TStageObjectId cameraId = xsh->getStageObjectTree()->getCurrentCameraId(); TStageObject *camera = xsh->getStageObject(cameraId); TAffine cameraPlacement = camera->getPlacement(frame); double cameraZ = camera->getZ(frame); TAffine placement; TStageObject::perspective(placement, cameraPlacement, cameraZ, objPlacement, objZ, 0); return placement; }
TAffine TTool::getColumnMatrix(int columnIndex) const { if (!m_application) return TAffine(); TFrameHandle *fh = m_application->getCurrentFrame(); if (fh->isEditingLevel()) return TAffine(); int frame = fh->getFrame(); TXsheet *xsh = m_application->getCurrentXsheet()->getXsheet(); TStageObjectId columnId = TStageObjectId::ColumnId(columnIndex); TAffine columnPlacement = xsh->getPlacement(columnId, frame); double columnZ = xsh->getZ(columnId, frame); TStageObjectId cameraId = xsh->getStageObjectTree()->getCurrentCameraId(); TStageObject *camera = xsh->getStageObject(cameraId); TAffine cameraPlacement = camera->getPlacement(frame); double cameraZ = camera->getZ(frame); TStageObject *object = xsh->getStageObject(columnId); TAffine placement; TStageObject::perspective(placement, cameraPlacement, cameraZ, columnPlacement, columnZ, object->getGlobalNoScaleZ()); return placement; }
} else if (m_shiftTraceGhostId == SECOND_GHOST) { player.m_opacity = 30; players.push_back(player); player.m_opacity = opacity; player.m_placement = m_onionSkinMask.getShiftTraceGhostAff(1) * player.m_placement; } } } players.push_back(player); } else if (TXshChildLevel *cl = xl->getChildLevel()) { int childRow = cell.m_frameId.getNumber() - 1; TXsheet *childXsheet = cl->getXsheet(); TStageObjectId childCameraId = childXsheet->getStageObjectTree()->getCurrentCameraId(); TStageObject *childCamera = childXsheet->getStageObject(childCameraId); TAffine childCameraAff = childCamera->getPlacement(childRow); double childCameraZ = childCamera->getZ(childRow); std::vector<UCHAR> originalOpacity(childXsheet->getColumnCount()); for (int c = 0; c < childXsheet->getColumnCount(); c++) { originalOpacity[c] = childXsheet->getColumn(c)->getOpacity(); childXsheet->getColumn(c)->setOpacity(column->getOpacity()); } SubXSheet subXSheet; subXSheet.m_camera = ZPlacement(childCameraAff, childCameraZ); subXSheet.m_z = columnZ;
void SceneViewerContextMenu::addLevelCommands(std::vector<int> &indices) { addSeparator(); TXsheet *xsh = TApp::instance()->getCurrentXsheet()->getXsheet(); TStageObjectId currentId = TApp::instance()->getCurrentObject()->getObjectId(); /*- Xsheet内の、空でないColumnを登録 -*/ std::vector<TXshColumn *> columns; for (int i = 0; i < (int)indices.size(); i++) { if (xsh->isColumnEmpty(indices[i])) continue; TXshColumn *column = xsh->getColumn(indices[i]); if (column) { columns.push_back(column); } } if (!columns.empty()) { // show/hide if (columns.size() > 1) { QMenu *subMenu = addMenu("Show / Hide"); for (int i = 0; i < (int)columns.size(); i++) addShowHideCommand(subMenu, columns[i]); } else addShowHideCommand(this, columns[0]); addSeparator(); } // selection /* if(selectableColumns.size()==1) { addSelectCommand(this, TStageObjectId::ColumnId(selectableColumns[0]->getIndex())); } else */ /*-- Scene内の全Objectを選択可能にする --*/ TStageObjectId id; QMenu *cameraMenu = addMenu(tr("Select Camera")); QMenu *pegbarMenu = addMenu(tr("Select Pegbar")); QMenu *columnMenu = addMenu(tr("Select Column")); bool flag = false; for (int i = 0; i < xsh->getStageObjectTree()->getStageObjectCount(); i++) { id = xsh->getStageObjectTree()->getStageObject(i)->getId(); if (id.isColumn()) { int columnIndex = id.getIndex(); if (xsh->isColumnEmpty(columnIndex)) continue; else { addSelectCommand(columnMenu, id); flag = true; } } else if (id.isTable()) addSelectCommand(this, id); else if (id.isCamera()) addSelectCommand(cameraMenu, id); else if (id.isPegbar()) addSelectCommand(pegbarMenu, id); } /*- カラムがひとつも無かったらDisable -*/ if (!flag) columnMenu->setEnabled(false); }