This class represents a bezier patch. More...
#include "MapBezierPatch.hpp"
Public Types | |
enum | EndCapPosE { TOP_RIGHT =0, TOP_LEFT, BOTTOM_RIGHT, BOTTOM_LEFT } |
Public Member Functions | |
MapBezierPatchT (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, int SubdivsHorz_=-1, int SubdivsVert_=-1) | |
The default constructor. It creates an "empty" bezier patch. More... | |
MapBezierPatchT (const MapBezierPatchT &BP) | |
The copy constructor for copying a bezier patch. More... | |
~MapBezierPatchT () | |
The destructor. More... | |
MapBezierPatchT * | Clone () const override |
The virtual copy constructor. More... | |
BoundingBox3fT | GetBB () const |
Returns the spatial bounding-box of this map element. More... | |
bool | TraceRay (const Vector3fT &RayOrigin, const Vector3fT &RayDir, float &Fraction, unsigned long &FaceNr) const |
Traces a ray against this map element, and returns whether it was hit. More... | |
bool | TracePixel (const wxPoint &Pixel, int Radius, const ViewWindow2DT &ViewWin) const |
This method determines if this map element is intersected/affected by the specified disc in ViewWin. More... | |
TrafoMementoT * | GetTrafoState () const override |
Returns a memento that encapsulates the transform-related state of this element. More... | |
void | RestoreTrafoState (const TrafoMementoT *TM) override |
Restores the transform-related state of this element from the given memento. More... | |
void | TrafoMove (const Vector3fT &Delta, bool LockTexCoords) override |
Translates this element by the given vector (in world-space). More... | |
void | TrafoRotate (const Vector3fT &RefPoint, const cf::math::AnglesfT &Angles, bool LockTexCoords) override |
Rotates this element about the given reference point (in world-space). More... | |
void | TrafoScale (const Vector3fT &RefPoint, const Vector3fT &Scale, bool LockTexCoords) override |
Scales this element about the given reference point (in world-space). More... | |
void | TrafoMirror (unsigned int NormalAxis, float Dist, bool LockTexCoords) override |
Mirrors this element along the given mirror plane (in world-space). More... | |
void | Transform (const Matrix4x4fT &Matrix, bool LockTexCoords) override |
Why does this method not replace all the other Trafo*() methods? This method is the most generic, allowing transformations that e.g. More... | |
void | Load_D3_map (TextParserT &TP, unsigned long patchDef, EditorMatManT &MatMan) |
void | Load_cmap (TextParserT &TP, MapDocumentT &MapDoc, bool IgnoreGroups) override |
void | Save_cmap (std::ostream &OutFile, unsigned long PatchNr, const MapDocumentT &MapDoc) const |
bool | IsTranslucent () const |
Returns whether this map element is (entirely or partially) translucent. More... | |
void | Render2D (Renderer2DT &Renderer) const |
void | Render3D (Renderer3DT &Renderer) const |
void | SetMaterial (EditorMaterialI *Mat) |
EditorMaterialI * | GetMaterial () const |
const Vector3fT & | GetCvPos (unsigned long x, unsigned long y) const |
void | SetCvPos (unsigned long x, unsigned long y, const Vector3fT &Pos) |
const Vector3fT & | GetCvUV (unsigned long x, unsigned long y) const |
void | SetCvUV (unsigned long x, unsigned long y, const Vector3fT &uv) |
int | GetSubdivsHorz () const |
void | SetSubdivsHorz (int subdivs) |
int | GetSubdivsVert () const |
void | SetSubdivsVert (int subdivs) |
void | InvertPatch () |
void | SetSurfaceInfo (const SurfaceInfoT &SI) |
Set a new SurfaceInfoT. More... | |
const SurfaceInfoT & | GetSurfaceInfo () const |
Returns the surface info that is associated with this patch. More... | |
void | SetSize (unsigned long width, unsigned long height) |
unsigned long | GetWidth () const |
unsigned long | GetHeight () const |
unsigned long | GetRenderWidth () const |
unsigned long | GetRenderHeight () const |
Vector3fT | GetRenderVertexPos (unsigned long x, unsigned long y) const |
void | Render3D_Basic (MatSys::RenderMaterialT *RenderMat, const wxColour &MeshColor, const int MeshAlpha) const |
A helper method for Render3D(), but also useful e.g. for preview renderings by the "New Bezier Patch" tool. More... | |
virtual const cf::TypeSys::TypeInfoT * | GetType () const |
![]() | |
MapPrimitiveT (const wxColour &Color) | |
The default constructor. More... | |
MapPrimitiveT (const MapPrimitiveT &Prim) | |
The copy constructor for copying a primitive. More... | |
wxColour | GetColor (bool ConsiderGroup=true) const |
This method returns the "inherent" color of this map element. More... | |
![]() | |
MapElementT () | |
The default constructor. More... | |
MapElementT (const MapElementT &Elem) | |
The copy constructor for copying a map element. More... | |
virtual | ~MapElementT () |
The virtual destructor. More... | |
MapEditor::CompMapEntityT * | GetParent () const |
Returns the entity that this element is a part of, or NULL if the element has no parent entity. More... | |
void | SetParent (MapEditor::CompMapEntityT *Ent) |
Sets the parent entity that is element is a part of. More... | |
bool | IsSelected () const |
Returns whether this element is currently selected in the map document. More... | |
void | SetSelected (bool Selected=true) |
Sets the selection state of this element. More... | |
virtual wxString | GetDescription () const |
GroupT * | GetGroup () const |
Returns NULL when this map element is in no group, or the pionter to the group it is a member of otherwise. More... | |
void | SetGroup (GroupT *Group) |
Sets the group this element is a member of (use NULL for "no group"). More... | |
bool | IsVisible () const |
Returns whether this map element is currently visible (in the 2D, 3D and other views). More... | |
bool | CanSelect () const |
Returns whether this map element can currently be selected (in the 2D, 3D and other views). More... | |
void | GetToggleEffects (ArrayT< MapElementT * > &RemoveFromSel, ArrayT< MapElementT * > &AddToSel, bool AutoGroupEntities) |
Computes how the selection must be changed in order to toggle the given element when the element's entity and group memberships are taken into account. More... | |
virtual void | AdvanceTime (float t) |
This is periodically called in order to have the element advance its internal clock by t seconds. More... | |
unsigned int | GetFrameCount () const |
void | SetFrameCount (unsigned int FrameCount) |
Static Public Member Functions | |
static MapBezierPatchT * | CreateSimplePatch (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, unsigned long width, unsigned long height, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1) |
static MapBezierPatchT * | CreatePatchCylinder (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, unsigned long height, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1) |
static MapBezierPatchT * | CreateSquareCylinder (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, unsigned long height, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1) |
static MapBezierPatchT * | CreateQuarterCylinder (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, unsigned long height, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1) |
static MapBezierPatchT * | CreateHalfCylinder (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, unsigned long height, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1) |
static MapBezierPatchT * | CreateEdgePipe (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1) |
static MapBezierPatchT * | CreateCone (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, unsigned long height, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1) |
static MapBezierPatchT * | CreateSphere (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1) |
static MapBezierPatchT * | CreateQuarterDisc (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1, EndCapPosE pos=TOP_RIGHT, bool Inverted=false) |
static MapBezierPatchT * | CreateConcaveEndcap (EditorMaterialI *Material_, cf::SceneGraph::LightMapManT &LMM_, const Vector3fT &min, const Vector3fT &max, int SubdivsHorz_=-1, int SubdivsVert_=-1, EndCapPosE pos=TOP_RIGHT) |
static void * | CreateInstance (const cf::TypeSys::CreateParamsT &Params) |
![]() | |
static void * | CreateInstance (const cf::TypeSys::CreateParamsT &Params) |
![]() | |
static void * | CreateInstance (const cf::TypeSys::CreateParamsT &Params) |
Static Public Attributes | |
static const cf::TypeSys::TypeInfoT | TypeInfo |
![]() | |
static const cf::TypeSys::TypeInfoT | TypeInfo |
![]() | |
static const cf::TypeSys::TypeInfoT | TypeInfo |
Additional Inherited Members | |
![]() | |
MapEditor::CompMapEntityT * | m_Parent |
The entity that this element is a part of. More... | |
bool | m_IsSelected |
Is this element currently selected in the map document? More... | |
GroupT * | m_Group |
The group this element is in, NULL if in no group. More... | |
unsigned int | m_FrameCount |
The number of the frame in which this element was last rendered in a 3D view, used in order to avoid processing/rendering it twice. More... | |
This class represents a bezier patch.
Implementation notes:
Patches consist of several distinct parts: The control-vertices (with position and texture-coordinates each), a mesh for rendering, and auxiliary data that allows the user to scale, shift and rotate the texture-coordinates in a GUI dialog. The auxiliary data consists of a duplicate of the control-vertices (texture-coords only, no positions), used as "reference", plus a transformation matrix. The result of the transformation being applied to the reference tex-coords is always kept identical to the tex-coords of the control-vertices.
Several dependency relationships exist between these components:
MapBezierPatchT::MapBezierPatchT | ( | EditorMaterialI * | Material_, |
cf::SceneGraph::LightMapManT & | LMM_, | ||
int | SubdivsHorz_ = -1 , |
||
int | SubdivsVert_ = -1 |
||
) |
The default constructor. It creates an "empty" bezier patch.
MapBezierPatchT::MapBezierPatchT | ( | const MapBezierPatchT & | BP | ) |
The copy constructor for copying a bezier patch.
BP | The bezier patch to copy-construct this bezier patch from. |
MapBezierPatchT::~MapBezierPatchT | ( | ) |
The destructor.
|
overridevirtual |
The virtual copy constructor.
Creates a copy of this primitive that is of the same class as the original, even when called via a base class pointer (the caller doesn't need to know the exact derived class).
Implements MapPrimitiveT.
|
virtual |
Returns the spatial bounding-box of this map element.
Implements MapElementT.
|
inline |
Returns the surface info that is associated with this patch.
|
overridevirtual |
Returns a memento that encapsulates the transform-related state of this element.
The method saves all state in the memento that calls to the Trafo*() methods can possibly modify.
Reimplemented from MapElementT.
|
virtual |
Returns whether this map element is (entirely or partially) translucent.
Translucent map elements are typically implemented with "alpha blending" and require rendering in back-to-front order.
Reimplemented from MapElementT.
void MapBezierPatchT::Render3D_Basic | ( | MatSys::RenderMaterialT * | RenderMat, |
const wxColour & | MeshColor, | ||
const int | MeshAlpha | ||
) | const |
A helper method for Render3D(), but also useful e.g. for preview renderings by the "New Bezier Patch" tool.
|
overridevirtual |
Restores the transform-related state of this element from the given memento.
The method restores all state from the memento that calls to the Trafo*() methods have possibly modified.
Reimplemented from MapElementT.
void MapBezierPatchT::SetSurfaceInfo | ( | const SurfaceInfoT & | SI | ) |
Set a new SurfaceInfoT.
|
virtual |
This method determines if this map element is intersected/affected by the specified disc in ViewWin.
The disc for the test is defined by the given center pixel and the given radius. For example, the caller can learn by the result of this method whether the map element should respond to a mouse-click at the same pixel. Therefore, this method can be considered as the 2D analogue of the TraceRay() method.
Reimplemented from MapElementT.
|
virtual |
Traces a ray against this map element, and returns whether it was hit.
The ray for the trace is defined by RayOrigin + RayDir*Fraction, where Fraction is a scalar >= 0. If a hit was detected, the Fraction is returned. Hit brushes return the number of the hit face as well. This method has been implemented mainly for "picking", that is, left-click selection in the 3D views (it makes sure that also objects that "clip nothing" in the engine can be picked), but it can also be used for any other purpose.
RayOrigin | The point in world space where the ray starts. |
RayDir | A unit vector in world space that describes the direction the ray extends to. |
Fraction | On hit, the scalar along RayDir at which the hit occurred is returned here. |
FaceNr | If this map element is a brush and it was hit, the number of the hit face is returned here. |
Reimplemented from MapElementT.
|
overridevirtual |
Mirrors this element along the given mirror plane (in world-space).
NormalAxis | The number of the axis along which the normal vector of the mirror plane points: 0, 1 or 2 for the x-, y- or z-axis respectively. |
Dist | The position of the mirror plane along its normal vector, where it intersects the NormalAxis. |
LockTexCoords | Transform the texture-space along with the geometry. Note that the mirroring is not necessarily "perfect", because for some elements like models or plants, only their point of origin can be mirrored, but not their mesh. |
Reimplemented from MapElementT.
|
overridevirtual |
Translates this element by the given vector (in world-space).
Delta | The offset by which to translate the element. |
LockTexCoords | Transform the texture-space along with the geometry. |
Reimplemented from MapElementT.
|
overridevirtual |
Rotates this element about the given reference point (in world-space).
RefPoint | The reference point (origin) for the rotation. |
Angles | The rotation angles for the three axes. |
LockTexCoords | Transform the texture-space along with the geometry. |
Reimplemented from MapElementT.
|
overridevirtual |
Scales this element about the given reference point (in world-space).
RefPoint | The reference point (origin) for the scale. |
Scale | The scale factors for the three axes. |
LockTexCoords | Transform the texture-space along with the geometry. |
DivisionByZeroE,e.g. | when Scale is too small and the element becomes degenerate (e.g. a brush with too small faces). |
Reimplemented from MapElementT.
|
overridevirtual |
Why does this method not replace all the other Trafo*() methods? This method is the most generic, allowing transformations that e.g.
are non-orthogonal (like shears or non-uniform scales). This in turn conflicts with map primitives that can only store and deal with a restricted fixed set of transformations, e.g. an origin, a rotation and a uniform scale. These values cannot properly be re-computed from a general matrix with non-orthogonal basis vectors.
Matrix | The matrix that describes the transform to be applied. |
LockTexCoords | Transform the texture-space along with the geometry. |
Reimplemented from MapElementT.