Panda3D
Loading...
Searching...
No Matches
nurbsSurfaceResult.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 nurbsSurfaceResult.h
10 * @author drose
11 * @date 2003-10-10
12 */
13
14#ifndef NURBSSURFACERESULT_H
15#define NURBSSURFACERESULT_H
16
17#include "pandabase.h"
18#include "referenceCount.h"
19#include "nurbsBasisVector.h"
20#include "epvector.h"
21
22class NurbsVertex;
23
24/**
25 * The result of a NurbsSurfaceEvaluator. This object represents a surface in
26 * a particular coordinate space. It can return the point and/or normal to
27 * the surface at any point.
28 */
29class EXPCL_PANDA_PARAMETRICS NurbsSurfaceResult : public ReferenceCount {
30public:
32 const NurbsBasisVector &v_basis,
33 const LVecBase4 vecs[], const NurbsVertex *verts,
34 int num_u_vertices, int num_v_vertices);
35
36PUBLISHED:
37 INLINE ~NurbsSurfaceResult();
38
39 INLINE PN_stdfloat get_start_u() const;
40 INLINE PN_stdfloat get_end_u() const;
41
42 INLINE PN_stdfloat get_start_v() const;
43 INLINE PN_stdfloat get_end_v() const;
44
45 INLINE bool eval_point(PN_stdfloat u, PN_stdfloat v, LVecBase3 &point);
46 INLINE bool eval_normal(PN_stdfloat u, PN_stdfloat v, LVecBase3 &normal);
47 INLINE PN_stdfloat eval_extended_point(PN_stdfloat u, PN_stdfloat v, int d);
48 INLINE bool eval_extended_points(PN_stdfloat u, PN_stdfloat v, int d,
49 PN_stdfloat result[], int num_values);
50
51 INLINE int get_num_u_segments() const;
52 INLINE int get_num_v_segments() const;
53 void eval_segment_point(int ui, int vi, PN_stdfloat u, PN_stdfloat v, LVecBase3 &point) const;
54 void eval_segment_normal(int ui, int vi, PN_stdfloat u, PN_stdfloat v, LVecBase3 &normal) const;
55 PN_stdfloat eval_segment_extended_point(int ui, int vi, PN_stdfloat u, PN_stdfloat v, int d) const;
56 void eval_segment_extended_points(int ui, int vi, PN_stdfloat u, PN_stdfloat v, int d,
57 PN_stdfloat result[], int num_values) const;
58 INLINE PN_stdfloat get_segment_u(int ui, PN_stdfloat u) const;
59 INLINE PN_stdfloat get_segment_v(int vi, PN_stdfloat v) const;
60
61private:
62 INLINE int verti(int ui, int vi) const;
63 INLINE int segi(int ui, int vi) const;
64
65 int find_u_segment(PN_stdfloat u);
66 int r_find_u_segment(PN_stdfloat u, int top, int bot) const;
67 int find_v_segment(PN_stdfloat v);
68 int r_find_v_segment(PN_stdfloat v, int top, int bot) const;
69
70 NurbsBasisVector _u_basis;
71 NurbsBasisVector _v_basis;
72 const NurbsVertex *_verts;
73 int _num_u_vertices;
74 int _num_v_vertices;
75
76 // We pre-compose the basis matrix and the geometry vectors, so we have
77 // these handy for evaluation. There is one entry in the _composed for each
78 // entry in u_basis._segments * v_basis._segments.
79 class ComposedMats {
80 public:
81 LMatrix4 _x, _y, _z, _w;
82 };
83 typedef epvector<ComposedMats> ComposedGeom;
84 ComposedGeom _composed;
85
86
87 int _last_u_segment;
88 PN_stdfloat _last_u_from;
89 PN_stdfloat _last_u_to;
90 int _last_v_segment;
91 PN_stdfloat _last_v_from;
92 PN_stdfloat _last_v_to;
93};
94
95#include "nurbsSurfaceResult.I"
96
97#endif
This encapsulates a series of matrices that are used to represent the sequential segments of a NurbsC...
void eval_segment_point(int ui, int vi, PN_stdfloat u, PN_stdfloat v, LVecBase3 &point) const
Evaluates the point on the surface corresponding to the indicated value in parametric time within the...
bool eval_extended_points(PN_stdfloat u, PN_stdfloat v, int d, PN_stdfloat result[], int num_values)
Simultaneously performs eval_extended_point on a contiguous sequence of dimensions.
bool eval_normal(PN_stdfloat u, PN_stdfloat v, LVecBase3 &normal)
Computes the normal to the surface at the indicated point in parametric time.
PN_stdfloat get_start_u() const
Returns the first legal value of u on the surface.
int get_num_u_segments() const
Returns the number of piecewise continuous segments within the surface in the U direction.
PN_stdfloat get_segment_u(int ui, PN_stdfloat u) const
Accepts a u value in the range [0, 1], and assumed to be relative to the indicated segment (as in eva...
PN_stdfloat eval_extended_point(PN_stdfloat u, PN_stdfloat v, int d)
Evaluates the surface in n-dimensional space according to the extended vertices associated with the s...
PN_stdfloat eval_segment_extended_point(int ui, int vi, PN_stdfloat u, PN_stdfloat v, int d) const
Evaluates the surface in n-dimensional space according to the extended vertices associated with the s...
PN_stdfloat get_segment_v(int vi, PN_stdfloat v) const
Accepts a v value in the range [0, 1], and assumed to be relative to the indicated segment (as in eva...
PN_stdfloat get_start_v() const
Returns the first legal value of v on the surface.
bool eval_point(PN_stdfloat u, PN_stdfloat v, LVecBase3 &point)
Computes the point on the surface corresponding to the indicated value in parametric time.
void eval_segment_normal(int ui, int vi, PN_stdfloat u, PN_stdfloat v, LVecBase3 &normal) const
As eval_segment_point, but computes the normal to the surface at the indicated point.
PN_stdfloat get_end_u() const
Returns the last legal value of u on the surface.
PN_stdfloat get_end_v() const
Returns the last legal value of v on the surface.
NurbsSurfaceResult(const NurbsBasisVector &u_basis, const NurbsBasisVector &v_basis, const LVecBase4 vecs[], const NurbsVertex *verts, int num_u_vertices, int num_v_vertices)
The constructor automatically builds up the result as the product of the indicated set of basis matri...
void eval_segment_extended_points(int ui, int vi, PN_stdfloat u, PN_stdfloat v, int d, PN_stdfloat result[], int num_values) const
Simultaneously performs eval_extended_point on a contiguous sequence of dimensions.
int get_num_v_segments() const
Returns the number of piecewise continuous segments within the surface in the V direction.
This represents a single control vertex in a NurbsEvaluator.
Definition nurbsVertex.h:32
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.