1 /****************************************************************************
2 ** Copyright (C) 2001-2013 RibbonSoft, GmbH. All rights reserved.
3 **
4 ** This file is part of the dxflib project.
5 **
6 ** This file is free software; you can redistribute it and/or modify
7 ** it under the terms of the GNU General Public License as published by
8 ** the Free Software Foundation; either version 2 of the License, or
9 ** (at your option) any later version.
10 **
11 ** Licensees holding valid dxflib Professional Edition licenses may use
12 ** this file in accordance with the dxflib Commercial License
13 ** Agreement provided with the Software.
14 **
15 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17 **
18 ** See http://www.ribbonsoft.com for further details.
19 **
20 ** Contact info@ribbonsoft.com if any conditions of this licensing are
21 ** not clear to you.
22 **
23 **********************************************************************/
24 
25 #ifndef DL_EXTRUSION_H
26 #define DL_EXTRUSION_H
27 
28 #include "dl_global.h"
29 
30 #include <math.h>
31 
32 
33 /**
34  * Extrusion direction.
35  *
36  * @author Andrew Mustun
37  */
38 class DXFLIB_EXPORT DL_Extrusion {
39 
40 public:
41 
42     /**
43      * Default constructor.
44      */
DL_Extrusion()45     DL_Extrusion() {
46         direction = new double[3];
47         setDirection(0.0, 0.0, 1.0);
48         setElevation(0.0);
49     }
50 
51 
52     /**
53      * Destructor.
54      */
~DL_Extrusion()55     ~DL_Extrusion() {
56         delete[] direction ;
57     }
58 
59 
60     /**
61      * Constructor for DXF extrusion.
62      *
63      * @param direction Vector of axis along which the entity shall be extruded
64      *                  this is also the Z axis of the Entity coordinate system
65      * @param elevation Distance of the entities XY plane from the origin of the
66      *                  world coordinate system
67      */
DL_Extrusion(double dx,double dy,double dz,double elevation)68     DL_Extrusion(double dx, double dy, double dz, double elevation) {
69         direction = new double[3];
70         setDirection(dx, dy, dz);
71         setElevation(elevation);
72     }
73 
74 
75 
76     /**
77      * Sets the direction vector.
78      */
setDirection(double dx,double dy,double dz)79     void setDirection(double dx, double dy, double dz) {
80         direction[0]=dx;
81         direction[1]=dy;
82         direction[2]=dz;
83     }
84 
85 
86 
87     /**
88      * @return direction vector.
89      */
getDirection()90     double* getDirection() const {
91         return direction;
92     }
93 
94 
95 
96     /**
97      * @return direction vector.
98      */
getDirection(double dir[])99     void getDirection(double dir[]) const {
100         dir[0]=direction[0];
101         dir[1]=direction[1];
102         dir[2]=direction[2];
103     }
104 
105 
106 
107     /**
108      * Sets the elevation.
109      */
setElevation(double elevation)110     void setElevation(double elevation) {
111         this->elevation = elevation;
112     }
113 
114 
115 
116     /**
117      * @return Elevation.
118      */
getElevation()119     double getElevation() const {
120         return elevation;
121     }
122 
123 
124 
125     /**
126      * Copies extrusion (deep copies) from another extrusion object.
127      */
128     DL_Extrusion& operator = (const DL_Extrusion& extru) {
129         setDirection(extru.direction[0], extru.direction[1], extru.direction[2]);
130         setElevation(extru.elevation);
131 
132         return *this;
133     }
134 
135 
136 
137 private:
138     double *direction;
139     double elevation;
140 };
141 
142 #endif
143 
144