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
TexturePlacement::is_size_known
bool is_size_known() const
Returns true if the texture's size is known, false otherwise.
Definition: texturePlacement.cxx:392
TexturePlacement::write_datagram
virtual void write_datagram(BamWriter *writer, Datagram &datagram)
Fills the indicated datagram up with a binary representation of the current object,...
Definition: texturePlacement.cxx:998
PaletteImage
This is a single palette image, one of several within a PalettePage, which is in turn one of several ...
Definition: paletteImage.h:32
TexturePlacement::set_dest
void set_dest(DestTextureImage *dest)
Sets the DestTextureImage that corresponds to this texture as it was copied to the install directory.
Definition: texturePlacement.cxx:173
TexturePlacement::complete_pointers
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...
Definition: texturePlacement.cxx:1034
omitReason.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PaletteGroup
This is the highest level of grouping for TextureImages.
Definition: paletteGroup.h:43
pvector< TextureImage * >
TexturePlacement::flag_error_image
void flag_error_image(PNMImage &image)
Sets the rectangle of the palette image represented by the texture placement to red,...
Definition: texturePlacement.cxx:918
DatagramIterator
A class to retrieve the individual data elements previously stored in a Datagram.
Definition: datagramIterator.h:27
typedWritable.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
register_type
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
BamReader
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition: bamReader.h:110
TexturePlacement::get_name
const std::string & get_name() const
Returns the name of the texture that this placement represents.
Definition: texturePlacement.cxx:95
BamWriter
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition: bamWriter.h:63
TexturePlacement::fill_swapped_image
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...
Definition: texturePlacement.cxx:823
TexturePlacement::force_replace
void force_replace()
Removes the texture from its particular PaletteImage, but does not remove it from the PaletteGroup.
Definition: texturePlacement.cxx:545
TexturePlacement::add_egg
void add_egg(TextureReference *reference)
Records the fact that a particular egg file is using this particular TexturePlacement.
Definition: texturePlacement.cxx:128
TexturePlacement::get_properties
const TextureProperties & get_properties() const
Returns the grouping properties of the image.
Definition: texturePlacement.cxx:111
TypedWritable
Base class for objects that can be written to and read from Bam files.
Definition: typedWritable.h:35
PNMImage
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
Datagram
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition: datagram.h:38
TexturePosition
This represents a particular position of a texture within a PaletteImage.
Definition: texturePosition.h:31
TexturePlacement::get_placed_x_size
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...
Definition: texturePlacement.cxx:495
OmitReason
OmitReason
This enumerates the reasons why a texture may not have been placed in a palette image.
Definition: omitReason.h:23
TypeHandle
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
TexturePlacement::get_placed_uv_area
double get_placed_uv_area() const
Returns the total area of the rectangle occupied by the UV minmax box, as it has been placed.
Definition: texturePlacement.cxx:515
TexturePlacement::get_page
PalettePage * get_page() const
Returns the particular PalettePage on which the texture has been placed.
Definition: texturePlacement.cxx:465
TexturePlacement::get_omit_reason
OmitReason get_omit_reason() const
Returns the reason the texture has been omitted from a palette image, or OR_none if it has not.
Definition: texturePlacement.cxx:401
FactoryParams
An instance of this class is passed to the Factory when requesting it to do its business and construc...
Definition: factoryParams.h:36
texturePosition.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
TexturePlacement::get_x_size
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...
Definition: texturePlacement.cxx:411
TexturePlacement::get_y_size
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...
Definition: texturePlacement.cxx:422
TexturePlacement::get_image
PaletteImage * get_image() const
Returns the particular PaletteImage on which the texture has been placed.
Definition: texturePlacement.cxx:456
TexturePlacement::compute_tex_matrix
void compute_tex_matrix(LMatrix3d &transform)
Stores in the indicated matrix the appropriate texture matrix transform for the new placement of the ...
Definition: texturePlacement.cxx:608
TexturePlacement::register_with_read_factory
static void register_with_read_factory()
Registers the current object as something that can be read from a Bam file.
Definition: texturePlacement.cxx:988
luse.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
TexturePlacement::place_at
void place_at(PaletteImage *image, int x, int y)
Assigns the texture to a particular position within the indicated PaletteImage.
Definition: texturePlacement.cxx:527
TexturePlacement::intersects
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...
Definition: texturePlacement.cxx:590
TexturePlacement::mark_unfilled
void mark_unfilled()
Marks the texture as unfilled, so that it will need to be copied into the palette image again.
Definition: texturePlacement.cxx:685
PalettePage
This is a particular collection of textures, within a PaletteGroup, that all share the same TexturePr...
Definition: palettePage.h:33
TexturePlacement::get_placed_y_size
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...
Definition: texturePlacement.cxx:505
TexturePlacement::write_placed
void write_placed(std::ostream &out, int indent_level=0)
Writes the placement position information on a line by itself.
Definition: texturePlacement.cxx:646
TexturePlacement::get_texture
TextureImage * get_texture() const
Returns the texture that this placement represents.
Definition: texturePlacement.cxx:103
SortPlacementBySize
Definition: texturePlacement.h:152
TexturePlacement::remove_egg
void remove_egg(TextureReference *reference)
Notes that a particular egg file is no longer using this particular TexturePlacement.
Definition: texturePlacement.cxx:145
TextureProperties
This is the set of characteristics of a texture that, if different from another texture,...
Definition: textureProperties.h:30
TexturePlacement::get_placed_x
int get_placed_x() const
Returns the X pixel at which the texture has been placed within its PaletteImage.
Definition: texturePlacement.cxx:475
TexturePlacement::is_filled
bool is_filled() const
Returns true if the texture has been filled (i.e.
Definition: texturePlacement.cxx:676
TexturePlacement
This corresponds to a particular assignment of a TextureImage with a PaletteGroup,...
Definition: texturePlacement.h:41
pset.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
TextureReference
This is the particular reference of a texture filename by an egg file.
Definition: textureReference.h:40
pandatoolbase.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
TexturePlacement::get_group
PaletteGroup * get_group() const
Returns the group that this placement represents.
Definition: texturePlacement.cxx:119
TexturePlacement::fill_image
void fill_image(PNMImage &image)
Fills in the rectangle of the palette image represented by the texture placement with the image pixel...
Definition: texturePlacement.cxx:694
TexturePlacement::get_uv_area
double get_uv_area() const
Returns the total area of the rectangle occupied by the UV minmax box, in UV coordinates.
Definition: texturePlacement.cxx:433
SortPlacementBySize::operator()
bool operator()(TexturePlacement *a, TexturePlacement *b) const
Compares two TexturePlacement objects and returns true if the first one is bigger than the second one...
Definition: texturePlacement.cxx:1129
TexturePlacement::get_dest
DestTextureImage * get_dest() const
Returns the DestTextureImage that corresponds to this texture as it was copied to the install directo...
Definition: texturePlacement.cxx:182
TexturePlacement::is_placed
bool is_placed() const
Returns true if the texture has been placed on a palette image, false otherwise.
Definition: texturePlacement.cxx:448
TexturePlacement::mark_eggs_stale
void mark_eggs_stale()
Marks all the egg files that reference this placement stale.
Definition: texturePlacement.cxx:159
DestTextureImage
This represents a texture filename as it has been resized and copied to the map directory (e....
Definition: destTextureImage.h:28
TexturePlacement::omit_solitary
void omit_solitary()
Sets the omit reason (returned by get_omit()) to OR_solitary, indicating that the palettized version ...
Definition: texturePlacement.cxx:563
TexturePlacement::get_placed_y
int get_placed_y() const
Returns the Y pixel at which the texture has been placed within its PaletteImage.
Definition: texturePlacement.cxx:485
TexturePlacement::not_solitary
void not_solitary()
Indicates that the texture, formerly indicated as solitary, is now no longer.
Definition: texturePlacement.cxx:576
TexturePlacement::determine_size
bool determine_size()
Attempts to determine the appropriate size of the texture for the given placement.
Definition: texturePlacement.cxx:196
TextureImage
This represents a single source texture that is referenced by one or more egg files.
Definition: textureImage.h:46
pset< TextureReference * >