96 lines
3.9 KiB
C++
96 lines
3.9 KiB
C++
/*
|
|
Copyright (C) 2006 Feeling Software Inc.
|
|
Available only to licensees.
|
|
Distribution of this file or its content is strictly prohibited.
|
|
*/
|
|
|
|
#include "StdAfx.h"
|
|
#include "FCDocument/FCDSceneNode.h"
|
|
#include "FCDocument/FCDTransform.h"
|
|
#include "FCTestExportImport.h"
|
|
|
|
static const float sampleMatrix[16] = { 0.0f, 2.0f, 0.4f, 2.0f, 7.0f, 0.2f, 991.0f, 2.5f, 11.0f, 25.0f, 1.55f, 0.02f, 0.001f, 12.0f, 1.02e-3f };
|
|
|
|
namespace FCTestExportImport
|
|
{
|
|
void FillVisualScene(FCDSceneNode* scene)
|
|
{
|
|
FCDSceneNode* child = scene->AddChildNode();
|
|
FCDTRotation* rotation = (FCDTRotation*) child->AddTransform(FCDTransform::ROTATION);
|
|
rotation->SetAxis(FMVector3::ZAxis);
|
|
rotation->SetAngle(45.0f);
|
|
FCDTTranslation* translation = (FCDTTranslation*) child->AddTransform(FCDTransform::TRANSLATION);
|
|
translation->SetTranslation(0.0f, 4.0f, 6.0f);
|
|
FCDTScale* scale = (FCDTScale*) child->AddTransform(FCDTransform::SCALE);
|
|
scale->SetScale(FMVector3(3.0f, 0.5f, 2.0f));
|
|
FCDTMatrix* matrix = (FCDTMatrix*) child->AddTransform(FCDTransform::MATRIX);
|
|
matrix->SetTransform(FMMatrix44(sampleMatrix));
|
|
FCDTLookAt* lookAt = (FCDTLookAt*) child->AddTransform(FCDTransform::LOOKAT);
|
|
lookAt->SetPosition(1.0f, 2.0f, 3.0f);
|
|
lookAt->SetTarget(5.0f, 6.0f, 9.0f);
|
|
lookAt->SetUp(12.0f, 0.3f, 0.4f);
|
|
FCDTSkew* skew = (FCDTSkew*) child->AddTransform(FCDTransform::SKEW);
|
|
skew->SetAroundAxis(FMVector3::ZAxis);
|
|
skew->SetRotateAxis(FMVector3::XAxis);
|
|
skew->SetAngle(60.0f);
|
|
}
|
|
|
|
void CheckVisualScene(FCDSceneNode* imported)
|
|
{
|
|
// NOTE: the transforms must be in the same order as the exported order.
|
|
|
|
PassIf(imported->GetChildrenCount() == 1);
|
|
PassIf(imported->GetParent() == NULL);
|
|
FCDSceneNode* child = imported->GetChild(0);
|
|
FailIf(child == NULL);
|
|
PassIf(child->GetParent() == imported);
|
|
PassIf(child->GetTransformCount() == 6);
|
|
|
|
FCDTransform* transform = child->GetTransform(0);
|
|
FailIf(transform == NULL);
|
|
FailIf(transform->GetParent() != child);
|
|
PassIf(transform->GetType() == FCDTransform::ROTATION);
|
|
FCDTRotation* rotation = (FCDTRotation*) transform;
|
|
PassIf(IsEquivalent(rotation->GetAxis(), FMVector3::ZAxis));
|
|
PassIf(IsEquivalent(rotation->GetAngle(), 45.0f));
|
|
|
|
transform = child->GetTransform(1);
|
|
FailIf(transform == NULL);
|
|
FailIf(transform->GetParent() != child);
|
|
PassIf(transform->GetType() == FCDTransform::TRANSLATION);
|
|
FCDTTranslation* translation = (FCDTTranslation*) transform;
|
|
PassIf(IsEquivalent(translation->GetTranslation(), FMVector3(0.0f, 4.0f, 6.0f)));
|
|
|
|
transform = child->GetTransform(2);
|
|
FailIf(transform == NULL);
|
|
FailIf(transform->GetParent() != child);
|
|
PassIf(transform->GetType() == FCDTransform::SCALE);
|
|
FCDTScale* scale = (FCDTScale*) transform;
|
|
PassIf(IsEquivalent(scale->GetScale(), FMVector3(3.0f, 0.5f, 2.0f)));
|
|
|
|
transform = child->GetTransform(3);
|
|
FailIf(transform == NULL);
|
|
FailIf(transform->GetParent() != child);
|
|
PassIf(transform->GetType() == FCDTransform::MATRIX);
|
|
FCDTMatrix* mx = (FCDTMatrix*) transform;
|
|
PassIf(IsEquivalent(mx->GetTransform(), FMMatrix44(sampleMatrix)));
|
|
|
|
transform = child->GetTransform(4);
|
|
FailIf(transform == NULL);
|
|
FailIf(transform->GetParent() != child);
|
|
PassIf(transform->GetType() == FCDTransform::LOOKAT);
|
|
FCDTLookAt* lookAt = (FCDTLookAt*) transform;
|
|
PassIf(IsEquivalent(lookAt->GetPosition(), FMVector3(1.0f, 2.0f, 3.0f)));
|
|
PassIf(IsEquivalent(lookAt->GetTarget(), FMVector3(5.0f, 6.0f, 9.0f)));
|
|
PassIf(IsEquivalent(lookAt->GetUp(), FMVector3(12.0f, 0.3f, 0.4f)));
|
|
|
|
transform = child->GetTransform(5);
|
|
FailIf(transform == NULL);
|
|
FailIf(transform->GetParent() != child);
|
|
PassIf(transform->GetType() == FCDTransform::SKEW);
|
|
FCDTSkew* skew = (FCDTSkew*) transform;
|
|
PassIf(IsEquivalent(skew->GetAroundAxis(), FMVector3::ZAxis));
|
|
PassIf(IsEquivalent(skew->GetRotateAxis(), FMVector3::XAxis));
|
|
PassIf(IsEquivalent(skew->GetAngle(), 60.0f));
|
|
}
|
|
}; |