Panda3D
Loading...
Searching...
No Matches
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 */
28DXFToEggLayer::
29DXFToEggLayer(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 */
43add_polygon(const DXFToEggConverter *entity) {
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 */
72add_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 */
94add_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}
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 represents a "layer" as read from the DXF file.
Definition dxfLayer.h:28
This class supervises the construction of an EggData structure from a DXF file.
void add_polygon(const DXFToEggConverter *entity)
Given that done_entity() has just been called and that the current entity represents a polygon,...
EggVertex * add_vertex(const DXFVertex &vertex)
Adds a unique vertex to the layer's vertex pool and returns it.
void add_line(const DXFToEggConverter *entity)
Similar to add_polygon(), but adds a set of point lights instead.
Stored within DXFFile, this is the basic Vertex data of a DXF file.
Definition dxfVertex.h:27
A base class for nodes in the hierarchy that are not leaf nodes.
EggNode * add_child(EggNode *node)
Adds the indicated child to the group and returns it.
The main glue of the egg hierarchy, this corresponds to the <Group>, <Instance>, and <Joint> type nod...
Definition eggGroup.h:34
A line segment, or a series of connected line segments, defined by a <Line> entry.
Definition eggLine.h:25
A single polygon.
Definition eggPolygon.h:24
virtual bool cleanup() override
Cleans up modeling errors in whatever context this makes sense.
EggVertex * add_vertex(EggVertex *vertex)
Adds the indicated vertex to the end of the primitive's list of vertices, and returns it.
A collection of vertices.
Any one-, two-, three-, or four-component vertex, possibly with attributes such as a normal.
Definition eggVertex.h:39
void set_pos(double pos)
Sets the vertex position.
Definition eggVertex.I:42
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.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.