Merge pull request #2810 from shun-iwasawa/g/fix_camera_column_handling

Fix Assertion Failure on Selecting Camera Column
This commit is contained in:
Rodney 2019-10-19 11:24:05 -05:00 committed by GitHub
commit eb04b70f37
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -698,18 +698,21 @@ TAffine TTool::getColumnMatrix(int columnIndex) const {
TFrameHandle *fh = m_application->getCurrentFrame(); TFrameHandle *fh = m_application->getCurrentFrame();
if (fh->isEditingLevel()) return TAffine(); if (fh->isEditingLevel()) return TAffine();
int frame = fh->getFrame(); int frame = fh->getFrame();
TXsheet *xsh = m_application->getCurrentXsheet()->getXsheet(); TXsheet *xsh = m_application->getCurrentXsheet()->getXsheet();
TStageObjectId columnId = TStageObjectId::ColumnId(columnIndex); TStageObjectId columnObjId =
TAffine columnPlacement = xsh->getPlacement(columnId, frame); (columnIndex >= 0)
double columnZ = xsh->getZ(columnId, frame); ? TStageObjectId::ColumnId(columnIndex)
: TStageObjectId::CameraId(xsh->getCameraColumnIndex());
TAffine columnPlacement = xsh->getPlacement(columnObjId, frame);
double columnZ = xsh->getZ(columnObjId, frame);
TStageObjectId cameraId = xsh->getStageObjectTree()->getCurrentCameraId(); TStageObjectId cameraId = xsh->getStageObjectTree()->getCurrentCameraId();
TStageObject *camera = xsh->getStageObject(cameraId); TStageObject *camera = xsh->getStageObject(cameraId);
TAffine cameraPlacement = camera->getPlacement(frame); TAffine cameraPlacement = camera->getPlacement(frame);
double cameraZ = camera->getZ(frame); double cameraZ = camera->getZ(frame);
TStageObject *object = xsh->getStageObject(columnId); TStageObject *object = xsh->getStageObject(columnObjId);
TAffine placement; TAffine placement;
TStageObject::perspective(placement, cameraPlacement, cameraZ, TStageObject::perspective(placement, cameraPlacement, cameraZ,
columnPlacement, columnZ, columnPlacement, columnZ,
@ -831,8 +834,6 @@ QString TTool::updateEnabled() {
} }
} }
TStageObject *obj =
xsh->getStageObject(TStageObjectId::ColumnId(columnIndex));
bool spline = m_application->getCurrentObject()->isSpline(); bool spline = m_application->getCurrentObject()->isSpline();
bool filmstrip = m_application->getCurrentFrame()->isEditingLevel(); bool filmstrip = m_application->getCurrentFrame()->isEditingLevel();
@ -947,7 +948,9 @@ QString TTool::updateEnabled() {
} }
// Check against impossibly traceable movements on the column // Check against impossibly traceable movements on the column
if ((levelType & LEVELCOLUMN_XSHLEVEL) && !filmstrip) { if ((levelType & LEVELCOLUMN_XSHLEVEL) && !filmstrip && columnIndex >= 0) {
TStageObject *obj =
xsh->getStageObject(TStageObjectId::ColumnId(columnIndex));
// Test for Mesh-deformed levels // Test for Mesh-deformed levels
const TStageObjectId &parentId = obj->getParent(); const TStageObjectId &parentId = obj->getParent();
if (parentId.isColumn() && obj->getParentHandle()[0] != 'H') { if (parentId.isColumn() && obj->getParentHandle()[0] != 'H') {