Panda3D
dxfToEggLayer.cxx
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 dxfToEggLayer.cxx
10  * @author drose
11  * @date 2004-05-04
12  */
13 
14 #include "dxfToEggLayer.h"
15 #include "dxfToEggConverter.h"
16 
17 #include "dxfFile.h"
18 #include "eggGroup.h"
19 #include "eggPolygon.h"
20 #include "eggLine.h"
21 #include "eggVertex.h"
22 #include "eggVertexPool.h"
23 
24 
25 /**
26  *
27  */
28 DXFToEggLayer::
29 DXFToEggLayer(const std::string &name, EggGroupNode *parent) : DXFLayer(name) {
30  _group = new EggGroup(name);
31  parent->add_child(_group);
32  _vpool = new EggVertexPool(name);
33  _group->add_child(_vpool);
34 }
35 
36 
37 /**
38  * Given that done_entity() has just been called and that the current entity
39  * represents a polygon, adds the corresponding polygon to the layer's
40  * EggGroup and vertex pool.
41  */
42 void DXFToEggLayer::
44  EggPolygon *poly = new EggPolygon;
45  _group->add_child(poly);
46 
47  const DXFFile::Color &color = entity->get_color();
48  poly->set_color(LColor(color.r, color.g, color.b, 1.0));
49 
50  // A polyline's vertices are stored in the attached vector by dxf.cxx. They
51  // were defined in the DXF file using a series of "VERTEX" entries.
52 
53  // For a 3dface, the vertices are defined explicitly as part of the entity;
54  // but in this case, they were added to the vector before add_polygon() was
55  // called.
56 
57  DXFVertices::const_iterator vi;
58  for (vi = entity->_verts.begin();
59  vi != entity->_verts.end();
60  ++vi) {
61  poly->add_vertex(add_vertex(*vi));
62  }
63 
64  poly->cleanup();
65 }
66 
67 
68 /**
69  * Similar to add_polygon(), but adds a set of point lights instead.
70  */
71 void DXFToEggLayer::
72 add_line(const DXFToEggConverter *entity) {
73  EggLine *line = new EggLine;
74  _group->add_child(line);
75 
76  const DXFFile::Color &color = entity->get_color();
77  line->set_color(LColor(color.r, color.g, color.b, 1.0));
78 
79  DXFVertices::const_iterator vi;
80  for (vi = entity->_verts.begin();
81  vi != entity->_verts.end();
82  ++vi) {
83  line->add_vertex(add_vertex(*vi));
84  }
85 }
86 
87 
88 /**
89  * Adds a unique vertex to the layer's vertex pool and returns it. If the
90  * vertex was already defined previously, returns the original definition.
91  * This is designed to share the common vertices within a layer.
92  */
94 add_vertex(const DXFVertex &vert) {
95  EggVertex egg_vert;
96  egg_vert.set_pos(vert._p);
97 
98  return _vpool->create_unique_vertex(egg_vert);
99 }
void add_line(const DXFToEggConverter *entity)
Similar to add_polygon(), but adds a set of point lights instead.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This represents a "layer" as read from the DXF file.
Definition: dxfLayer.h:28
A line segment, or a series of connected line segments, defined by a <Line> entry.
Definition: eggLine.h:25
virtual bool cleanup() override
Cleans up modeling errors in whatever context this makes sense.
Definition: eggPolygon.cxx:39
void set_pos(double pos)
Sets the vertex position.
Definition: eggVertex.I:42
A base class for nodes in the hierarchy that are not leaf nodes.
Definition: eggGroupNode.h:46
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
EggVertex * add_vertex(const DXFVertex &vertex)
Adds a unique vertex to the layer's vertex pool and returns it.
void add_polygon(const DXFToEggConverter *entity)
Given that done_entity() has just been called and that the current entity represents a polygon,...
The main glue of the egg hierarchy, this corresponds to the <Group>, <Instance>, and <Joint> type nod...
Definition: eggGroup.h:34
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
Any one-, two-, three-, or four-component vertex, possibly with attributes such as a normal.
Definition: eggVertex.h:39
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
A single polygon.
Definition: eggPolygon.h:24
EggNode * add_child(EggNode *node)
Adds the indicated child to the group and returns it.
Stored within DXFFile, this is the basic Vertex data of a DXF file.
Definition: dxfVertex.h:27
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
A collection of vertices.
Definition: eggVertexPool.h:41
EggVertex * add_vertex(EggVertex *vertex)
Adds the indicated vertex to the end of the primitive's list of vertices, and returns it.
const Color & get_color() const
This is a convenience function to return the r,g,b color of the current entity (at the time of done_e...
Definition: dxfFile.cxx:467
This class supervises the construction of an EggData structure from a DXF file.