Blender V5.0
AppView.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2008-2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <iostream>
10
11#include "AppConfig.h"
12#include "AppView.h"
13#include "Controller.h"
14
19#include "../stroke/Canvas.h"
22#include "../view_map/ViewMap.h"
23
24#include "BLI_math_rotation.h"
25
26#include "IMB_imbuf.hh"
27#include "IMB_imbuf_types.hh"
28
29#if 1 // FRS_antialiasing
30# include "BKE_global.hh"
31# include "DNA_scene_types.h"
32#endif
33
34#include "FRS_freestyle.h"
35
36namespace Freestyle {
37
38AppView::AppView(const char * /*iName*/)
39{
40 _Fovy = DEG2RADF(30.0f);
44
45 _RootNode.AddChild(_ModelRootNode);
47 _SilhouetteRootNode->setLightingEnabled(false);
48 _SilhouetteRootNode->setLineWidth(2.0f);
49 _SilhouetteRootNode->setPointSize(3.0f);
50
52
54 _DebugRootNode->setLightingEnabled(false);
55 _DebugRootNode->setLineWidth(1.0f);
56
57 _RootNode.AddChild(_DebugRootNode);
58
59 _minBBox = std::min(
60 std::min(_ModelRootNode->bbox().getMin()[0], _ModelRootNode->bbox().getMin()[1]),
61 _ModelRootNode->bbox().getMin()[2]);
62 _maxBBox = std::max(
63 std::max(_ModelRootNode->bbox().getMax()[0], _ModelRootNode->bbox().getMax()[1]),
64 _ModelRootNode->bbox().getMax()[2]);
65
66 _maxAbs = std::max(rabs(_minBBox), rabs(_maxBBox));
67 _minAbs = std::min(rabs(_minBBox), rabs(_maxBBox));
68
70 _p2DSelectionNode->setLightingEnabled(false);
72 _p2DSelectionNode->setLineWidth(5.0f);
73
75
76 NodeLight *light = new NodeLight;
77 _Light.AddChild(light);
78}
79
81{
82 /*int ref =*//* UNUSED */ _RootNode.destroy();
83
84 _Light.destroy();
85 /*ref =*//* UNUSED */ _p2DNode.destroy();
86}
87
89{
90 BBox<Vec3r> bbox = _ModelRootNode->bbox();
91
92 Vec3r v(UNPACK3(g_freestyle.viewpoint));
93 v -= 0.5 * (bbox.getMin() + bbox.getMax());
94
95 return v.norm();
96}
97
99{
100 BBox<Vec3r> bbox = _ModelRootNode->bbox();
101 Vec3r u = bbox.getMin();
102 Vec3r v = bbox.getMax();
103 Vec3r cameraCenter(UNPACK3(g_freestyle.viewpoint));
104
105 Vec3r w1(u[0], u[1], u[2]);
106 Vec3r w2(v[0], u[1], u[2]);
107 Vec3r w3(u[0], v[1], u[2]);
108 Vec3r w4(v[0], v[1], u[2]);
109 Vec3r w5(u[0], u[1], v[2]);
110 Vec3r w6(v[0], u[1], v[2]);
111 Vec3r w7(u[0], v[1], v[2]);
112 Vec3r w8(v[0], v[1], v[2]);
113
114 real _znear = std::min(
115 (w1 - cameraCenter).norm(),
116 std::min((w2 - cameraCenter).norm(),
117 std::min((w3 - cameraCenter).norm(),
118 std::min((w4 - cameraCenter).norm(),
119 std::min((w5 - cameraCenter).norm(),
120 std::min((w6 - cameraCenter).norm(),
121 std::min((w7 - cameraCenter).norm(),
122 (w8 - cameraCenter).norm())))))));
123
124 return std::max(_znear, 0.001);
125}
126
128{
129 BBox<Vec3r> bbox = _ModelRootNode->bbox();
130 Vec3r u = bbox.getMin();
131 Vec3r v = bbox.getMax();
132 Vec3r cameraCenter(UNPACK3(g_freestyle.viewpoint));
133
134 Vec3r w1(u[0], u[1], u[2]);
135 Vec3r w2(v[0], u[1], u[2]);
136 Vec3r w3(u[0], v[1], u[2]);
137 Vec3r w4(v[0], v[1], u[2]);
138 Vec3r w5(u[0], u[1], v[2]);
139 Vec3r w6(v[0], u[1], v[2]);
140 Vec3r w7(u[0], v[1], v[2]);
141 Vec3r w8(v[0], v[1], v[2]);
142
143 real _zfar = std::max(
144 (w1 - cameraCenter).norm(),
145 std::max((w2 - cameraCenter).norm(),
146 std::max((w3 - cameraCenter).norm(),
147 std::max((w4 - cameraCenter).norm(),
148 std::max((w5 - cameraCenter).norm(),
149 std::max((w6 - cameraCenter).norm(),
150 std::max((w7 - cameraCenter).norm(),
151 (w8 - cameraCenter).norm())))))));
152
153 return _zfar;
154}
155
157{
158 real Near = std::max(0.1, (real)(-2.0f * _maxAbs + distanceToSceneCenter()));
159 return Near;
160}
161
162} /* namespace Freestyle */
Configuration file.
#define DEG2RADF(_deg)
#define UNPACK3(a)
Class to define a canvas designed to draw style modules.
The spinal tap of the system.
struct FreestyleGlobals g_freestyle
Class to define the representation of 3D Line.
Class to represent a light node.
Class to build a shape node. It contains a Rep, which is the shape geometry.
Classes to define a silhouette structure.
String utilities.
Class to define the representation of a vertex for displaying purpose.
Classes to define a View Map (ViewVertex, ViewEdge, etc.).
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE btScalar norm() const
Return the norm (length) of the vector.
Definition btVector3.h:263
real distanceToSceneCenter()
Definition AppView.cpp:88
AppView(const char *iName=0)
Definition AppView.cpp:38
NodeGroup _Light
Definition AppView.h:241
virtual ~AppView()
Definition AppView.cpp:80
NodeDrawingStyle * _ModelRootNode
Definition AppView.h:237
NodeDrawingStyle * _DebugRootNode
Definition AppView.h:239
int rabs(int x)
Definition AppView.h:223
NodeDrawingStyle * _p2DSelectionNode
Definition AppView.h:252
NodeGroup _p2DNode
Definition AppView.h:251
NodeGroup _RootNode
Definition AppView.h:236
NodeDrawingStyle * _SilhouetteRootNode
Definition AppView.h:238
const Point & getMin() const
Definition BBox.h:67
const Point & getMax() const
Definition BBox.h:72
VecMat::Vec3< real > Vec3r
Definition Geom.h:30
inherits from class Rep
Definition AppCanvas.cpp:20
double real
Definition Precision.h:14