Panda3D
texturePlacement.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 texturePlacement.h
10  * @author drose
11  * @date 2000-11-28
12  */
13 
14 #ifndef TEXTUREPLACEMENT_H
15 #define TEXTUREPLACEMENT_H
16 
17 #include "pandatoolbase.h"
18 
19 #include "omitReason.h"
20 #include "texturePosition.h"
21 
22 #include "typedWritable.h"
23 #include "luse.h"
24 
25 #include "pset.h"
26 
27 class TextureImage;
28 class DestTextureImage;
29 class PaletteGroup;
30 class PaletteImage;
31 class PalettePage;
32 class TextureProperties;
33 class TextureReference;
34 class PNMImage;
35 
36 /**
37  * This corresponds to a particular assignment of a TextureImage with a
38  * PaletteGroup, and specifically describes which PaletteImage (if any), and
39  * where on the PaletteImage, the TextureImage has been assigned to.
40  */
42 private:
44 
45 public:
46  TexturePlacement(TextureImage *texture, PaletteGroup *group);
48 
49  const std::string &get_name() const;
50  TextureImage *get_texture() const;
51  const TextureProperties &get_properties() const;
52  PaletteGroup *get_group() const;
53 
54  void add_egg(TextureReference *reference);
55  void remove_egg(TextureReference *reference);
56  void mark_eggs_stale();
57 
58  void set_dest(DestTextureImage *dest);
59  DestTextureImage *get_dest() const;
60 
61  bool determine_size();
62  bool is_size_known() const;
64  int get_x_size() const;
65  int get_y_size() const;
66  double get_uv_area() const;
67 
68  bool is_placed() const;
69  PaletteImage *get_image() const;
70  PalettePage *get_page() const;
71  int get_placed_x() const;
72  int get_placed_y() const;
73  int get_placed_x_size() const;
74  int get_placed_y_size() const;
75  double get_placed_uv_area() const;
76 
77  void place_at(PaletteImage *image, int x, int y);
78  void force_replace();
79  void omit_solitary();
80  void not_solitary();
81  bool intersects(int x, int y, int x_size, int y_size);
82 
83  void compute_tex_matrix(LMatrix3d &transform);
84 
85  void write_placed(std::ostream &out, int indent_level = 0);
86 
87  bool is_filled() const;
88  void mark_unfilled();
89  void fill_image(PNMImage &image);
90  void fill_swapped_image(PNMImage &image, int index);
91  void flag_error_image(PNMImage &image);
92 
94  TextureSwaps _textureSwaps;
95 
96 private:
97  void compute_size_from_uvs(const LTexCoordd &min_uv, const LTexCoordd &max_uv);
98 
99  TextureImage *_texture;
100  PaletteGroup *_group;
101  PaletteImage *_image;
102  DestTextureImage *_dest;
103 
104  bool _has_uvs;
105  bool _size_known;
106  TexturePosition _position;
107 
108  bool _is_filled;
109  TexturePosition _placed;
110  OmitReason _omit_reason;
111 
113  References _references;
114 
115  // The TypedWritable interface follows.
116 public:
117  static void register_with_read_factory();
118  virtual void write_datagram(BamWriter *writer, Datagram &datagram);
119  virtual int complete_pointers(TypedWritable **p_list,
120  BamReader *manager);
121 
122 protected:
123  static TypedWritable *make_TexturePlacement(const FactoryParams &params);
124  void fillin(DatagramIterator &scan, BamReader *manager);
125 
126 private:
127  // This value is only filled in while reading from the bam file; don't use
128  // it otherwise.
129  int _num_references;
130  int _num_textureSwaps;
131 
132 public:
133  static TypeHandle get_class_type() {
134  return _type_handle;
135  }
136  static void init_type() {
137  TypedWritable::init_type();
138  register_type(_type_handle, "TexturePlacement",
139  TypedWritable::get_class_type());
140  }
141  virtual TypeHandle get_type() const {
142  return get_class_type();
143  }
144 
145 private:
146  static TypeHandle _type_handle;
147 };
148 
149 
150 // This is an STL object to sort an array of TexturePlacement pointers in
151 // order from biggest to smallest.
153 public:
154  bool operator ()(TexturePlacement *a, TexturePlacement *b) const;
155 };
156 
157 #endif
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition: bamReader.h:110
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition: bamWriter.h:63
A class to retrieve the individual data elements previously stored in a Datagram.
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition: datagram.h:38
This represents a texture filename as it has been resized and copied to the map directory (e....
An instance of this class is passed to the Factory when requesting it to do its business and construc...
Definition: factoryParams.h:36
The name of this class derives from the fact that we originally implemented it as a layer on top of t...
Definition: pnmImage.h:58
This is the highest level of grouping for TextureImages.
Definition: paletteGroup.h:43
This is a single palette image, one of several within a PalettePage, which is in turn one of several ...
Definition: paletteImage.h:32
This is a particular collection of textures, within a PaletteGroup, that all share the same TexturePr...
Definition: palettePage.h:33
bool operator()(TexturePlacement *a, TexturePlacement *b) const
Compares two TexturePlacement objects and returns true if the first one is bigger than the second one...
This represents a single source texture that is referenced by one or more egg files.
Definition: textureImage.h:46
This corresponds to a particular assignment of a TextureImage with a PaletteGroup,...
void write_placed(std::ostream &out, int indent_level=0)
Writes the placement position information on a line by itself.
void place_at(PaletteImage *image, int x, int y)
Assigns the texture to a particular position within the indicated PaletteImage.
double get_placed_uv_area() const
Returns the total area of the rectangle occupied by the UV minmax box, as it has been placed.
bool is_filled() const
Returns true if the texture has been filled (i.e.
OmitReason get_omit_reason() const
Returns the reason the texture has been omitted from a palette image, or OR_none if it has not.
DestTextureImage * get_dest() const
Returns the DestTextureImage that corresponds to this texture as it was copied to the install directo...
PaletteGroup * get_group() const
Returns the group that this placement represents.
void remove_egg(TextureReference *reference)
Notes that a particular egg file is no longer using this particular TexturePlacement.
int get_placed_x_size() const
Returns the size in the X dimension, in pixels, of the texture image as it has been placed within the...
void add_egg(TextureReference *reference)
Records the fact that a particular egg file is using this particular TexturePlacement.
void mark_eggs_stale()
Marks all the egg files that reference this placement stale.
bool intersects(int x, int y, int x_size, int y_size)
Returns true if the particular position this texture has been assigned to overlaps the rectangle whos...
bool is_size_known() const
Returns true if the texture's size is known, false otherwise.
int get_x_size() const
Returns the size in the X dimension, in pixels, of the texture image as it must appear in the palette...
const std::string & get_name() const
Returns the name of the texture that this placement represents.
double get_uv_area() const
Returns the total area of the rectangle occupied by the UV minmax box, in UV coordinates.
static void register_with_read_factory()
Registers the current object as something that can be read from a Bam file.
PaletteImage * get_image() const
Returns the particular PaletteImage on which the texture has been placed.
virtual void write_datagram(BamWriter *writer, Datagram &datagram)
Fills the indicated datagram up with a binary representation of the current object,...
void set_dest(DestTextureImage *dest)
Sets the DestTextureImage that corresponds to this texture as it was copied to the install directory.
virtual int complete_pointers(TypedWritable **p_list, BamReader *manager)
Called after the object is otherwise completely read from a Bam file, this function's job is to store...
void fill_swapped_image(PNMImage &image, int index)
Fills in the rectangle of the swapped palette image represented by the texture placement with the ima...
void flag_error_image(PNMImage &image)
Sets the rectangle of the palette image represented by the texture placement to red,...
const TextureProperties & get_properties() const
Returns the grouping properties of the image.
void mark_unfilled()
Marks the texture as unfilled, so that it will need to be copied into the palette image again.
int get_placed_x() const
Returns the X pixel at which the texture has been placed within its PaletteImage.
void compute_tex_matrix(LMatrix3d &transform)
Stores in the indicated matrix the appropriate texture matrix transform for the new placement of the ...
int get_placed_y() const
Returns the Y pixel at which the texture has been placed within its PaletteImage.
bool is_placed() const
Returns true if the texture has been placed on a palette image, false otherwise.
TextureImage * get_texture() const
Returns the texture that this placement represents.
bool determine_size()
Attempts to determine the appropriate size of the texture for the given placement.
void fill_image(PNMImage &image)
Fills in the rectangle of the palette image represented by the texture placement with the image pixel...
void omit_solitary()
Sets the omit reason (returned by get_omit()) to OR_solitary, indicating that the palettized version ...
void not_solitary()
Indicates that the texture, formerly indicated as solitary, is now no longer.
void force_replace()
Removes the texture from its particular PaletteImage, but does not remove it from the PaletteGroup.
PalettePage * get_page() const
Returns the particular PalettePage on which the texture has been placed.
int get_placed_y_size() const
Returns the size in the Y dimension, in pixels, of the texture image as it has been placed within the...
int get_y_size() const
Returns the size in the Y dimension, in pixels, of the texture image as it must appear in the palette...
This represents a particular position of a texture within a PaletteImage.
This is the set of characteristics of a texture that, if different from another texture,...
This is the particular reference of a texture filename by an egg file.
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
Base class for objects that can be written to and read from Bam files.
Definition: typedWritable.h:35
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
OmitReason
This enumerates the reasons why a texture may not have been placed in a palette image.
Definition: omitReason.h:23
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(),...
Definition: register_type.I:22
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.