Panda3D
Loading...
Searching...
No Matches
eggNurbsSurface.h
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file eggNurbsSurface.h
10 * @author drose
11 * @date 2000-02-15
12 */
13
14#ifndef EGGNURBSSURFACE_H
15#define EGGNURBSSURFACE_H
16
17#include "pandabase.h"
18
19#include "eggSurface.h"
20#include "eggNurbsCurve.h"
21#include "vector_double.h"
22#include "plist.h"
23
24/**
25 * A parametric NURBS surface.
26 */
27class EXPCL_PANDA_EGG EggNurbsSurface : public EggSurface {
28PUBLISHED:
29 typedef plist< PT(EggNurbsCurve) > Curves;
30 typedef Curves Loop;
31 typedef plist<Loop> Loops;
32 typedef Loops Trim;
33 typedef plist<Trim> Trims;
34
35 INLINE explicit EggNurbsSurface(const std::string &name = "");
36 INLINE EggNurbsSurface(const EggNurbsSurface &copy);
37 INLINE EggNurbsSurface &operator = (const EggNurbsSurface &copy);
38
39 virtual EggNurbsSurface *make_copy() const override;
40
41 void setup(int u_order, int v_order,
42 int num_u_knots, int num_v_knots);
43
44 INLINE void set_u_order(int u_order);
45 INLINE void set_v_order(int v_order);
46 void set_num_u_knots(int num);
47 void set_num_v_knots(int num);
48
49 INLINE void set_u_knot(int k, double value);
50 INLINE void set_v_knot(int k, double value);
51 INLINE void set_cv(int ui, int vi, EggVertex *vertex);
52
53 bool is_valid() const;
54
55 INLINE int get_u_order() const;
56 INLINE int get_v_order() const;
57 INLINE int get_u_degree() const;
58 INLINE int get_v_degree() const;
59 INLINE int get_num_u_knots() const;
60 INLINE int get_num_v_knots() const;
61 INLINE int get_num_u_cvs() const;
62 INLINE int get_num_v_cvs() const;
63 INLINE int get_num_cvs() const;
64
65 INLINE int get_u_index(int vertex_index) const;
66 INLINE int get_v_index(int vertex_index) const;
67 INLINE int get_vertex_index(int ui, int vi) const;
68
69 bool is_closed_u() const;
70 bool is_closed_v() const;
71
72 INLINE double get_u_knot(int k) const;
73 MAKE_SEQ(get_u_knots, get_num_u_knots, get_u_knot);
74 INLINE double get_v_knot(int k) const;
75 MAKE_SEQ(get_v_knots, get_num_v_knots, get_v_knot);
76 INLINE EggVertex *get_cv(int ui, int vi) const;
77
78 virtual void write(std::ostream &out, int indent_level) const override;
79
80public:
81 Curves _curves_on_surface;
82 Trims _trims;
83
84protected:
85 virtual void r_apply_texmats(EggTextureCollection &textures) override;
86
87private:
88 typedef vector_double Knots;
89 Knots _u_knots;
90 Knots _v_knots;
91 int _u_order;
92 int _v_order;
93
94public:
95
96 static TypeHandle get_class_type() {
97 return _type_handle;
98 }
99 static void init_type() {
100 EggSurface::init_type();
101 register_type(_type_handle, "EggNurbsSurface",
102 EggSurface::get_class_type());
103 }
104 virtual TypeHandle get_type() const override {
105 return get_class_type();
106 }
107 virtual TypeHandle force_init_type() override {
108 init_type();
109 return get_class_type();
110 }
111
112private:
113 static TypeHandle _type_handle;
114
115};
116
117#include "eggNurbsSurface.I"
118
119#endif
A parametric NURBS curve.
A parametric NURBS surface.
A parametric surface of some kind.
Definition eggSurface.h:24
This is a collection of textures by TRef name.
Any one-, two-, three-, or four-component vertex, possibly with attributes such as a normal.
Definition eggVertex.h:39
TypeHandle is the identifier used to differentiate C++ class types.
Definition typeHandle.h:81
This is our own Panda specialization on the default STL list.
Definition plist.h:35
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(),...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.