This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/freestyle/intern/application/AppView.cpp
Tamito Kajiyama 3c7d54b38a Moved #include "BLI_jitter.h" to the beginning of a series of
#include statements as a workaround of symbol conflicts involving
rad1 and rad2 in the header file.  As a side note, a different
solution of the issue was attempted in revision 17518 of the branch.
2009-10-15 19:32:07 +00:00

180 lines
5.0 KiB
C++

//
// Copyright (C) : Please refer to the COPYRIGHT file distributed
// with this source distribution.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
///////////////////////////////////////////////////////////////////////////////
extern "C" {
#include "BLI_jitter.h"
}
#include <iostream>
#include "../stroke/Canvas.h"
#include "AppView.h"
#include "../scene_graph/NodeLight.h"
#include "Controller.h"
#include "../view_map/Silhouette.h"
#include "../view_map/ViewMap.h"
#include "../scene_graph/LineRep.h"
#include "../scene_graph/NodeShape.h"
#include "../scene_graph/VertexRep.h"
#include "AppConfig.h"
#include "../system/StringUtils.h"
extern "C" {
#include "BLI_blenlib.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#if 1 // FRS_antialiasing
#include "BKE_global.h"
#include "DNA_scene_types.h"
#endif
#include "../../FRS_freestyle.h"
}
AppView::AppView(const char *iName)
{
_Fovy = 30.f * M_PI / 180.0;
_ModelRootNode = new NodeDrawingStyle;
_SilhouetteRootNode = new NodeDrawingStyle;
_DebugRootNode = new NodeDrawingStyle;
_RootNode.AddChild(_ModelRootNode);
_SilhouetteRootNode->setStyle(DrawingStyle::LINES);
_SilhouetteRootNode->setLightingEnabled(false);
_SilhouetteRootNode->setLineWidth(2.f);
_SilhouetteRootNode->setPointSize(3.f);
_RootNode.AddChild(_SilhouetteRootNode);
_DebugRootNode->setStyle(DrawingStyle::LINES);
_DebugRootNode->setLightingEnabled(false);
_DebugRootNode->setLineWidth(1.f);
_RootNode.AddChild(_DebugRootNode);
_minBBox = __min(__min(_ModelRootNode->bbox().getMin()[0],
_ModelRootNode->bbox().getMin()[1]),
_ModelRootNode->bbox().getMin()[2]);
_maxBBox = __max(__max(_ModelRootNode->bbox().getMax()[0],
_ModelRootNode->bbox().getMax()[1]),
_ModelRootNode->bbox().getMax()[2]);
_maxAbs = __max(rabs(_minBBox), rabs(_maxBBox));
_minAbs = __min(rabs(_minBBox), rabs(_maxBBox));
_p2DSelectionNode = new NodeDrawingStyle;
_p2DSelectionNode->setLightingEnabled(false);
_p2DSelectionNode->setStyle(DrawingStyle::LINES);
_p2DSelectionNode->setLineWidth(5.f);
_p2DNode.AddChild(_p2DSelectionNode);
NodeLight *light = new NodeLight;
_Light.AddChild(light);
}
AppView::~AppView()
{
int ref = _RootNode.destroy();
_Light.destroy();
ref = _p2DNode.destroy();
}
real AppView::distanceToSceneCenter() {
BBox<Vec3r> bbox = _ModelRootNode->bbox();
Vec3r v( freestyle_viewpoint[0], freestyle_viewpoint[1], freestyle_viewpoint[2]);
v -= 0.5 * (bbox.getMin() + bbox.getMax());
return v.norm();
}
real AppView::znear() {
BBox<Vec3r> bbox = _ModelRootNode->bbox();
Vec3r u = bbox.getMin();
Vec3r v = bbox.getMax();
Vec3r cameraCenter( freestyle_viewpoint[0], freestyle_viewpoint[1], freestyle_viewpoint[2]);
Vec3r w1( u[0], u[1], u[2] );
Vec3r w2( v[0], u[1], u[2] );
Vec3r w3( u[0], v[1], u[2] );
Vec3r w4( v[0], v[1], u[2] );
Vec3r w5( u[0], u[1], v[2] );
Vec3r w6( v[0], u[1], v[2] );
Vec3r w7( u[0], v[1], v[2] );
Vec3r w8( v[0], v[1], v[2] );
real _znear = __min( (w1-cameraCenter).norm(),
__min( (w2-cameraCenter).norm(),
__min( (w3-cameraCenter).norm(),
__min( (w4-cameraCenter).norm(),
__min( (w5-cameraCenter).norm(),
__min( (w6-cameraCenter).norm(),
__min( (w7-cameraCenter).norm(),
(w8-cameraCenter).norm() )))))));
return __max(_znear, 0.001);
}
real AppView::zfar() {
BBox<Vec3r> bbox = _ModelRootNode->bbox();
Vec3r u = bbox.getMin();
Vec3r v = bbox.getMax();
Vec3r cameraCenter( freestyle_viewpoint[0], freestyle_viewpoint[1], freestyle_viewpoint[2]);
Vec3r w1( u[0], u[1], u[2] );
Vec3r w2( v[0], u[1], u[2] );
Vec3r w3( u[0], v[1], u[2] );
Vec3r w4( v[0], v[1], u[2] );
Vec3r w5( u[0], u[1], v[2] );
Vec3r w6( v[0], u[1], v[2] );
Vec3r w7( u[0], v[1], v[2] );
Vec3r w8( v[0], v[1], v[2] );
real _zfar = __max( (w1-cameraCenter).norm(),
__max( (w2-cameraCenter).norm(),
__max( (w3-cameraCenter).norm(),
__max( (w4-cameraCenter).norm(),
__max( (w5-cameraCenter).norm(),
__max( (w6-cameraCenter).norm(),
__max( (w7-cameraCenter).norm(),
(w8-cameraCenter).norm() )))))));
return _zfar;
}
real AppView::GetFocalLength()
{
real Near = __max(0.1,(real)(-2.f*_maxAbs+ distanceToSceneCenter() ));
return Near;
}