1730 lines
39 KiB
C
1730 lines
39 KiB
C
|
/****************************************************************************
|
||
|
** Copyright (C) 2001-2013 RibbonSoft, GmbH. All rights reserved.
|
||
|
**
|
||
|
** This file is part of the dxflib project.
|
||
|
**
|
||
|
** This file is free software; you can redistribute it and/or modify
|
||
|
** it under the terms of the GNU General Public License as published by
|
||
|
** the Free Software Foundation; either version 2 of the License, or
|
||
|
** (at your option) any later version.
|
||
|
**
|
||
|
** Licensees holding valid dxflib Professional Edition licenses may use
|
||
|
** this file in accordance with the dxflib Commercial License
|
||
|
** Agreement provided with the Software.
|
||
|
**
|
||
|
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
||
|
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
**
|
||
|
** See http://www.ribbonsoft.com for further details.
|
||
|
**
|
||
|
** Contact info@ribbonsoft.com if any conditions of this licensing are
|
||
|
** not clear to you.
|
||
|
**
|
||
|
**********************************************************************/
|
||
|
|
||
|
#ifndef DL_ENTITIES_H
|
||
|
#define DL_ENTITIES_H
|
||
|
|
||
|
#include "dl_global.h"
|
||
|
|
||
|
#include <string>
|
||
|
#include <vector>
|
||
|
|
||
|
/**
|
||
|
* Layer Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_LayerData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_LayerData(const std::string& lName,
|
||
|
int lFlags) {
|
||
|
name = lName;
|
||
|
flags = lFlags;
|
||
|
}
|
||
|
|
||
|
/** Layer name. */
|
||
|
std::string name;
|
||
|
/** Layer flags. (1 = frozen, 2 = frozen by default, 4 = locked) */
|
||
|
int flags;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Block Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_BlockData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_BlockData(const std::string& bName,
|
||
|
int bFlags,
|
||
|
double bbpx, double bbpy, double bbpz) {
|
||
|
name = bName;
|
||
|
flags = bFlags;
|
||
|
bpx = bbpx;
|
||
|
bpy = bbpy;
|
||
|
bpz = bbpz;
|
||
|
}
|
||
|
|
||
|
/** Block name. */
|
||
|
std::string name;
|
||
|
/** Block flags. (not used currently) */
|
||
|
int flags;
|
||
|
/** X Coordinate of base point. */
|
||
|
double bpx;
|
||
|
/** Y Coordinate of base point. */
|
||
|
double bpy;
|
||
|
/** Z Coordinate of base point. */
|
||
|
double bpz;
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Line Type Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_LinetypeData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_LinetypeData(
|
||
|
const std::string& name,
|
||
|
const std::string& description,
|
||
|
int flags,
|
||
|
int numberOfDashes,
|
||
|
double patternLength,
|
||
|
double* pattern = NULL
|
||
|
)
|
||
|
: name(name),
|
||
|
description(description),
|
||
|
flags(flags),
|
||
|
numberOfDashes(numberOfDashes),
|
||
|
patternLength(patternLength),
|
||
|
pattern(pattern)
|
||
|
{}
|
||
|
|
||
|
/** Linetype name */
|
||
|
std::string name;
|
||
|
/** Linetype description */
|
||
|
std::string description;
|
||
|
/** Linetype flags */
|
||
|
int flags;
|
||
|
/** Number of dashes */
|
||
|
int numberOfDashes;
|
||
|
/** Pattern length */
|
||
|
double patternLength;
|
||
|
/** Pattern */
|
||
|
double* pattern;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Text style data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_StyleData {
|
||
|
/**
|
||
|
* Constructor
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_StyleData(
|
||
|
const std::string& name,
|
||
|
int flags,
|
||
|
double fixedTextHeight,
|
||
|
double widthFactor,
|
||
|
double obliqueAngle,
|
||
|
int textGenerationFlags,
|
||
|
double lastHeightUsed,
|
||
|
const std::string& primaryFontFile,
|
||
|
const std::string& bigFontFile
|
||
|
)
|
||
|
: name(name),
|
||
|
flags(flags),
|
||
|
fixedTextHeight(fixedTextHeight),
|
||
|
widthFactor(widthFactor),
|
||
|
obliqueAngle(obliqueAngle),
|
||
|
textGenerationFlags(textGenerationFlags),
|
||
|
lastHeightUsed(lastHeightUsed),
|
||
|
primaryFontFile(primaryFontFile),
|
||
|
bigFontFile(bigFontFile),
|
||
|
bold(false),
|
||
|
italic(false) {
|
||
|
}
|
||
|
|
||
|
bool operator==(const DL_StyleData& other) {
|
||
|
// ignore lastHeightUsed:
|
||
|
return (name==other.name &&
|
||
|
flags==other.flags &&
|
||
|
fixedTextHeight==other.fixedTextHeight &&
|
||
|
widthFactor==other.widthFactor &&
|
||
|
obliqueAngle==other.obliqueAngle &&
|
||
|
textGenerationFlags==other.textGenerationFlags &&
|
||
|
primaryFontFile==other.primaryFontFile &&
|
||
|
bigFontFile==other.bigFontFile);
|
||
|
}
|
||
|
|
||
|
/** Style name */
|
||
|
std::string name;
|
||
|
/** Style flags */
|
||
|
int flags;
|
||
|
/** Fixed text height or 0 for not fixed. */
|
||
|
double fixedTextHeight;
|
||
|
/** Width factor */
|
||
|
double widthFactor;
|
||
|
/** Oblique angle */
|
||
|
double obliqueAngle;
|
||
|
/** Text generation flags */
|
||
|
int textGenerationFlags;
|
||
|
/** Last height used */
|
||
|
double lastHeightUsed;
|
||
|
/** Primary font file name */
|
||
|
std::string primaryFontFile;
|
||
|
/** Big font file name */
|
||
|
std::string bigFontFile;
|
||
|
|
||
|
bool bold;
|
||
|
bool italic;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Point Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_PointData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_PointData(double px=0.0, double py=0.0, double pz=0.0) {
|
||
|
x = px;
|
||
|
y = py;
|
||
|
z = pz;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of the point. */
|
||
|
double x;
|
||
|
/*! Y Coordinate of the point. */
|
||
|
double y;
|
||
|
/*! Z Coordinate of the point. */
|
||
|
double z;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Line Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_LineData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_LineData(double lx1, double ly1, double lz1,
|
||
|
double lx2, double ly2, double lz2) {
|
||
|
x1 = lx1;
|
||
|
y1 = ly1;
|
||
|
z1 = lz1;
|
||
|
|
||
|
x2 = lx2;
|
||
|
y2 = ly2;
|
||
|
z2 = lz2;
|
||
|
}
|
||
|
|
||
|
/*! X Start coordinate of the point. */
|
||
|
double x1;
|
||
|
/*! Y Start coordinate of the point. */
|
||
|
double y1;
|
||
|
/*! Z Start coordinate of the point. */
|
||
|
double z1;
|
||
|
|
||
|
/*! X End coordinate of the point. */
|
||
|
double x2;
|
||
|
/*! Y End coordinate of the point. */
|
||
|
double y2;
|
||
|
/*! Z End coordinate of the point. */
|
||
|
double z2;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* XLine Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_XLineData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_XLineData(double bx, double by, double bz,
|
||
|
double dx, double dy, double dz) :
|
||
|
bx(bx), by(by), bz(bz),
|
||
|
dx(dx), dy(dy), dz(dz) {
|
||
|
}
|
||
|
|
||
|
/*! X base point. */
|
||
|
double bx;
|
||
|
/*! Y base point. */
|
||
|
double by;
|
||
|
/*! Z base point. */
|
||
|
double bz;
|
||
|
|
||
|
/*! X direction vector. */
|
||
|
double dx;
|
||
|
/*! Y direction vector. */
|
||
|
double dy;
|
||
|
/*! Z direction vector. */
|
||
|
double dz;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Ray Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_RayData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_RayData(double bx, double by, double bz,
|
||
|
double dx, double dy, double dz) :
|
||
|
bx(bx), by(by), bz(bz),
|
||
|
dx(dx), dy(dy), dz(dz) {
|
||
|
}
|
||
|
|
||
|
/*! X base point. */
|
||
|
double bx;
|
||
|
/*! Y base point. */
|
||
|
double by;
|
||
|
/*! Z base point. */
|
||
|
double bz;
|
||
|
|
||
|
/*! X direction vector. */
|
||
|
double dx;
|
||
|
/*! Y direction vector. */
|
||
|
double dy;
|
||
|
/*! Z direction vector. */
|
||
|
double dz;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Arc Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_ArcData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_ArcData(double acx, double acy, double acz,
|
||
|
double aRadius,
|
||
|
double aAngle1, double aAngle2) {
|
||
|
|
||
|
cx = acx;
|
||
|
cy = acy;
|
||
|
cz = acz;
|
||
|
radius = aRadius;
|
||
|
angle1 = aAngle1;
|
||
|
angle2 = aAngle2;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of center point. */
|
||
|
double cx;
|
||
|
/*! Y Coordinate of center point. */
|
||
|
double cy;
|
||
|
/*! Z Coordinate of center point. */
|
||
|
double cz;
|
||
|
|
||
|
/*! Radius of arc. */
|
||
|
double radius;
|
||
|
/*! Startangle of arc in degrees. */
|
||
|
double angle1;
|
||
|
/*! Endangle of arc in degrees. */
|
||
|
double angle2;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Circle Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_CircleData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_CircleData(double acx, double acy, double acz,
|
||
|
double aRadius) {
|
||
|
|
||
|
cx = acx;
|
||
|
cy = acy;
|
||
|
cz = acz;
|
||
|
radius = aRadius;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of center point. */
|
||
|
double cx;
|
||
|
/*! Y Coordinate of center point. */
|
||
|
double cy;
|
||
|
/*! Z Coordinate of center point. */
|
||
|
double cz;
|
||
|
|
||
|
/*! Radius of arc. */
|
||
|
double radius;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Polyline Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_PolylineData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_PolylineData(int pNumber, int pMVerteces, int pNVerteces, int pFlags) {
|
||
|
number = pNumber;
|
||
|
m = pMVerteces;
|
||
|
n = pNVerteces;
|
||
|
flags = pFlags;
|
||
|
}
|
||
|
|
||
|
/*! Number of vertices in this polyline. */
|
||
|
unsigned int number;
|
||
|
|
||
|
/*! Number of vertices in m direction if polyline is a polygon mesh. */
|
||
|
unsigned int m;
|
||
|
|
||
|
/*! Number of vertices in n direction if polyline is a polygon mesh. */
|
||
|
unsigned int n;
|
||
|
|
||
|
/*! Flags */
|
||
|
int flags;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Vertex Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_VertexData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_VertexData(double px=0.0, double py=0.0, double pz=0.0,
|
||
|
double pBulge=0.0) {
|
||
|
x = px;
|
||
|
y = py;
|
||
|
z = pz;
|
||
|
bulge = pBulge;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of the vertex. */
|
||
|
double x;
|
||
|
/*! Y Coordinate of the vertex. */
|
||
|
double y;
|
||
|
/*! Z Coordinate of the vertex. */
|
||
|
double z;
|
||
|
/*! Bulge of vertex.
|
||
|
* (The tangent of 1/4 of the arc angle or 0 for lines) */
|
||
|
double bulge;
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Trace Data / solid data / 3d face data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_TraceData {
|
||
|
DL_TraceData() {
|
||
|
thickness = 0.0;
|
||
|
for (int i=0; i<4; i++) {
|
||
|
x[i] = 0.0;
|
||
|
y[i] = 0.0;
|
||
|
z[i] = 0.0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_TraceData(double sx1, double sy1, double sz1,
|
||
|
double sx2, double sy2, double sz2,
|
||
|
double sx3, double sy3, double sz3,
|
||
|
double sx4, double sy4, double sz4,
|
||
|
double sthickness=0.0) {
|
||
|
|
||
|
thickness = sthickness;
|
||
|
|
||
|
x[0] = sx1;
|
||
|
y[0] = sy1;
|
||
|
z[0] = sz1;
|
||
|
|
||
|
x[1] = sx2;
|
||
|
y[1] = sy2;
|
||
|
z[1] = sz2;
|
||
|
|
||
|
x[2] = sx3;
|
||
|
y[2] = sy3;
|
||
|
z[2] = sz3;
|
||
|
|
||
|
x[3] = sx4;
|
||
|
y[3] = sy4;
|
||
|
z[3] = sz4;
|
||
|
}
|
||
|
|
||
|
/*! Thickness */
|
||
|
double thickness;
|
||
|
|
||
|
/*! Points */
|
||
|
double x[4];
|
||
|
double y[4];
|
||
|
double z[4];
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Solid Data.
|
||
|
*/
|
||
|
typedef DL_TraceData DL_SolidData;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 3dface Data.
|
||
|
*/
|
||
|
typedef DL_TraceData DL_3dFaceData;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Spline Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_SplineData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_SplineData(int degree,
|
||
|
int nKnots,
|
||
|
int nControl,
|
||
|
int nFit,
|
||
|
int flags) :
|
||
|
degree(degree),
|
||
|
nKnots(nKnots),
|
||
|
nControl(nControl),
|
||
|
nFit(nFit),
|
||
|
flags(flags) {
|
||
|
}
|
||
|
|
||
|
/*! Degree of the spline curve. */
|
||
|
unsigned int degree;
|
||
|
|
||
|
/*! Number of knots. */
|
||
|
unsigned int nKnots;
|
||
|
|
||
|
/*! Number of control points. */
|
||
|
unsigned int nControl;
|
||
|
|
||
|
/*! Number of fit points. */
|
||
|
unsigned int nFit;
|
||
|
|
||
|
/*! Flags */
|
||
|
int flags;
|
||
|
|
||
|
double tangentStartX;
|
||
|
double tangentStartY;
|
||
|
double tangentStartZ;
|
||
|
double tangentEndX;
|
||
|
double tangentEndY;
|
||
|
double tangentEndZ;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Spline knot data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_KnotData {
|
||
|
DL_KnotData() {}
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_KnotData(double pk) {
|
||
|
k = pk;
|
||
|
}
|
||
|
|
||
|
/*! Knot value. */
|
||
|
double k;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Spline control point data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_ControlPointData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_ControlPointData(double px, double py, double pz, double weight) {
|
||
|
x = px;
|
||
|
y = py;
|
||
|
z = pz;
|
||
|
w = weight;
|
||
|
}
|
||
|
|
||
|
/*! X coordinate of the control point. */
|
||
|
double x;
|
||
|
/*! Y coordinate of the control point. */
|
||
|
double y;
|
||
|
/*! Z coordinate of the control point. */
|
||
|
double z;
|
||
|
/*! Weight of control point. */
|
||
|
double w;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Spline fit point data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_FitPointData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_FitPointData(double x, double y, double z) : x(x), y(y), z(z) {}
|
||
|
|
||
|
/*! X coordinate of the fit point. */
|
||
|
double x;
|
||
|
/*! Y coordinate of the fit point. */
|
||
|
double y;
|
||
|
/*! Z coordinate of the fit point. */
|
||
|
double z;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Ellipse Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_EllipseData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_EllipseData(double cx, double cy, double cz,
|
||
|
double mx, double my, double mz,
|
||
|
double ratio,
|
||
|
double angle1, double angle2)
|
||
|
: cx(cx),
|
||
|
cy(cy),
|
||
|
cz(cz),
|
||
|
mx(mx),
|
||
|
my(my),
|
||
|
mz(mz),
|
||
|
ratio(ratio),
|
||
|
angle1(angle1),
|
||
|
angle2(angle2) {
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of center point. */
|
||
|
double cx;
|
||
|
/*! Y Coordinate of center point. */
|
||
|
double cy;
|
||
|
/*! Z Coordinate of center point. */
|
||
|
double cz;
|
||
|
|
||
|
/*! X coordinate of the endpoint of the major axis. */
|
||
|
double mx;
|
||
|
/*! Y coordinate of the endpoint of the major axis. */
|
||
|
double my;
|
||
|
/*! Z coordinate of the endpoint of the major axis. */
|
||
|
double mz;
|
||
|
|
||
|
/*! Ratio of minor axis to major axis.. */
|
||
|
double ratio;
|
||
|
/*! Startangle of ellipse in rad. */
|
||
|
double angle1;
|
||
|
/*! Endangle of ellipse in rad. */
|
||
|
double angle2;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Insert Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_InsertData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_InsertData(const std::string& name,
|
||
|
double ipx, double ipy, double ipz,
|
||
|
double sx, double sy, double sz,
|
||
|
double angle,
|
||
|
int cols, int rows,
|
||
|
double colSp, double rowSp) :
|
||
|
name(name),
|
||
|
ipx(ipx), ipy(ipy), ipz(ipz),
|
||
|
sx(sx), sy(sy), sz(sz),
|
||
|
angle(angle),
|
||
|
cols(cols), rows(rows),
|
||
|
colSp(colSp), rowSp(rowSp) {
|
||
|
}
|
||
|
|
||
|
/*! Name of the referred block. */
|
||
|
std::string name;
|
||
|
/*! X Coordinate of insertion point. */
|
||
|
double ipx;
|
||
|
/*! Y Coordinate of insertion point. */
|
||
|
double ipy;
|
||
|
/*! Z Coordinate of insertion point. */
|
||
|
double ipz;
|
||
|
/*! X Scale factor. */
|
||
|
double sx;
|
||
|
/*! Y Scale factor. */
|
||
|
double sy;
|
||
|
/*! Z Scale factor. */
|
||
|
double sz;
|
||
|
/*! Rotation angle in degrees. */
|
||
|
double angle;
|
||
|
/*! Number of colums if we insert an array of the block or 1. */
|
||
|
int cols;
|
||
|
/*! Number of rows if we insert an array of the block or 1. */
|
||
|
int rows;
|
||
|
/*! Values for the spacing between cols. */
|
||
|
double colSp;
|
||
|
/*! Values for the spacing between rows. */
|
||
|
double rowSp;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* MText Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_MTextData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_MTextData(double ipx, double ipy, double ipz,
|
||
|
double dirx, double diry, double dirz,
|
||
|
double height, double width,
|
||
|
int attachmentPoint,
|
||
|
int drawingDirection,
|
||
|
int lineSpacingStyle,
|
||
|
double lineSpacingFactor,
|
||
|
const std::string& text,
|
||
|
const std::string& style,
|
||
|
double angle) :
|
||
|
ipx(ipx), ipy(ipy), ipz(ipz),
|
||
|
dirx(dirx), diry(diry), dirz(dirz),
|
||
|
height(height), width(width),
|
||
|
attachmentPoint(attachmentPoint),
|
||
|
drawingDirection(drawingDirection),
|
||
|
lineSpacingStyle(lineSpacingStyle),
|
||
|
lineSpacingFactor(lineSpacingFactor),
|
||
|
text(text),
|
||
|
style(style),
|
||
|
angle(angle) {
|
||
|
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of insertion point. */
|
||
|
double ipx;
|
||
|
/*! Y Coordinate of insertion point. */
|
||
|
double ipy;
|
||
|
/*! Z Coordinate of insertion point. */
|
||
|
double ipz;
|
||
|
/*! X Coordinate of X direction vector. */
|
||
|
double dirx;
|
||
|
/*! Y Coordinate of X direction vector. */
|
||
|
double diry;
|
||
|
/*! Z Coordinate of X direction vector. */
|
||
|
double dirz;
|
||
|
/*! Text height */
|
||
|
double height;
|
||
|
/*! Width of the text box. */
|
||
|
double width;
|
||
|
/**
|
||
|
* Attachment point.
|
||
|
*
|
||
|
* 1 = Top left, 2 = Top center, 3 = Top right,
|
||
|
* 4 = Middle left, 5 = Middle center, 6 = Middle right,
|
||
|
* 7 = Bottom left, 8 = Bottom center, 9 = Bottom right
|
||
|
*/
|
||
|
int attachmentPoint;
|
||
|
/**
|
||
|
* Drawing direction.
|
||
|
*
|
||
|
* 1 = left to right, 3 = top to bottom, 5 = by style
|
||
|
*/
|
||
|
int drawingDirection;
|
||
|
/**
|
||
|
* Line spacing style.
|
||
|
*
|
||
|
* 1 = at least, 2 = exact
|
||
|
*/
|
||
|
int lineSpacingStyle;
|
||
|
/**
|
||
|
* Line spacing factor. 0.25 .. 4.0
|
||
|
*/
|
||
|
double lineSpacingFactor;
|
||
|
/*! Text string. */
|
||
|
std::string text;
|
||
|
/*! Style string. */
|
||
|
std::string style;
|
||
|
/*! Rotation angle. */
|
||
|
double angle;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Text Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_TextData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_TextData(double ipx, double ipy, double ipz,
|
||
|
double apx, double apy, double apz,
|
||
|
double height, double xScaleFactor,
|
||
|
int textGenerationFlags,
|
||
|
int hJustification,
|
||
|
int vJustification,
|
||
|
const std::string& text,
|
||
|
const std::string& style,
|
||
|
double angle)
|
||
|
: ipx(ipx), ipy(ipy), ipz(ipz),
|
||
|
apx(apx), apy(apy), apz(apz),
|
||
|
height(height), xScaleFactor(xScaleFactor),
|
||
|
textGenerationFlags(textGenerationFlags),
|
||
|
hJustification(hJustification),
|
||
|
vJustification(vJustification),
|
||
|
text(text),
|
||
|
style(style),
|
||
|
angle(angle) {
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of insertion point. */
|
||
|
double ipx;
|
||
|
/*! Y Coordinate of insertion point. */
|
||
|
double ipy;
|
||
|
/*! Z Coordinate of insertion point. */
|
||
|
double ipz;
|
||
|
|
||
|
/*! X Coordinate of alignment point. */
|
||
|
double apx;
|
||
|
/*! Y Coordinate of alignment point. */
|
||
|
double apy;
|
||
|
/*! Z Coordinate of alignment point. */
|
||
|
double apz;
|
||
|
|
||
|
/*! Text height */
|
||
|
double height;
|
||
|
/*! Relative X scale factor. */
|
||
|
double xScaleFactor;
|
||
|
/*! 0 = default, 2 = Backwards, 4 = Upside down */
|
||
|
int textGenerationFlags;
|
||
|
/**
|
||
|
* Horizontal justification.
|
||
|
*
|
||
|
* 0 = Left (default), 1 = Center, 2 = Right,
|
||
|
* 3 = Aligned, 4 = Middle, 5 = Fit
|
||
|
* For 3, 4, 5 the vertical alignment has to be 0.
|
||
|
*/
|
||
|
int hJustification;
|
||
|
/**
|
||
|
* Vertical justification.
|
||
|
*
|
||
|
* 0 = Baseline (default), 1 = Bottom, 2 = Middle, 3= Top
|
||
|
*/
|
||
|
int vJustification;
|
||
|
/*! Text string. */
|
||
|
std::string text;
|
||
|
/*! Style (font). */
|
||
|
std::string style;
|
||
|
/*! Rotation angle of dimension text away from default orientation. */
|
||
|
double angle;
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Block attribute data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_AttributeData : public DL_TextData {
|
||
|
DL_AttributeData(const DL_TextData& tData, const std::string& tag)
|
||
|
: DL_TextData(tData), tag(tag) {
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_AttributeData(double ipx, double ipy, double ipz,
|
||
|
double apx, double apy, double apz,
|
||
|
double height, double xScaleFactor,
|
||
|
int textGenerationFlags,
|
||
|
int hJustification,
|
||
|
int vJustification,
|
||
|
const std::string& tag,
|
||
|
const std::string& text,
|
||
|
const std::string& style,
|
||
|
double angle)
|
||
|
: DL_TextData(ipx, ipy, ipz,
|
||
|
apx, apy, apz,
|
||
|
height, xScaleFactor,
|
||
|
textGenerationFlags,
|
||
|
hJustification,
|
||
|
vJustification,
|
||
|
text,
|
||
|
style,
|
||
|
angle),
|
||
|
tag(tag) {
|
||
|
}
|
||
|
|
||
|
/*! Tag. */
|
||
|
std::string tag;
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Generic Dimension Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DimensionData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_DimensionData(double dpx, double dpy, double dpz,
|
||
|
double mpx, double mpy, double mpz,
|
||
|
int type,
|
||
|
int attachmentPoint,
|
||
|
int lineSpacingStyle,
|
||
|
double lineSpacingFactor,
|
||
|
const std::string& text,
|
||
|
const std::string& style,
|
||
|
double angle,
|
||
|
double linearFactor = 1.0,
|
||
|
double dimScale = 1.0) :
|
||
|
dpx(dpx), dpy(dpy), dpz(dpz),
|
||
|
mpx(mpx), mpy(mpy), mpz(mpz),
|
||
|
type(type),
|
||
|
attachmentPoint(attachmentPoint),
|
||
|
lineSpacingStyle(lineSpacingStyle),
|
||
|
lineSpacingFactor(lineSpacingFactor),
|
||
|
text(text),
|
||
|
style(style),
|
||
|
angle(angle),
|
||
|
linearFactor(linearFactor),
|
||
|
dimScale(dimScale) {
|
||
|
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of definition point. */
|
||
|
double dpx;
|
||
|
/*! Y Coordinate of definition point. */
|
||
|
double dpy;
|
||
|
/*! Z Coordinate of definition point. */
|
||
|
double dpz;
|
||
|
/*! X Coordinate of middle point of the text. */
|
||
|
double mpx;
|
||
|
/*! Y Coordinate of middle point of the text. */
|
||
|
double mpy;
|
||
|
/*! Z Coordinate of middle point of the text. */
|
||
|
double mpz;
|
||
|
/**
|
||
|
* Dimension type.
|
||
|
*
|
||
|
* 0 Rotated, horizontal, or vertical
|
||
|
* 1 Aligned
|
||
|
* 2 Angular
|
||
|
* 3 Diametric
|
||
|
* 4 Radius
|
||
|
* 5 Angular 3-point
|
||
|
* 6 Ordinate
|
||
|
* 64 Ordinate type. This is a bit value (bit 7)
|
||
|
* used only with integer value 6. If set,
|
||
|
* ordinate is X-type; if not set, ordinate is
|
||
|
* Y-type
|
||
|
* 128 This is a bit value (bit 8) added to the
|
||
|
* other group 70 values if the dimension text
|
||
|
* has been positioned at a user-defined
|
||
|
* location rather than at the default location
|
||
|
*/
|
||
|
int type;
|
||
|
/**
|
||
|
* Attachment point.
|
||
|
*
|
||
|
* 1 = Top left, 2 = Top center, 3 = Top right,
|
||
|
* 4 = Middle left, 5 = Middle center, 6 = Middle right,
|
||
|
* 7 = Bottom left, 8 = Bottom center, 9 = Bottom right,
|
||
|
*/
|
||
|
int attachmentPoint;
|
||
|
/**
|
||
|
* Line spacing style.
|
||
|
*
|
||
|
* 1 = at least, 2 = exact
|
||
|
*/
|
||
|
int lineSpacingStyle;
|
||
|
/**
|
||
|
* Line spacing factor. 0.25 .. 4.0
|
||
|
*/
|
||
|
double lineSpacingFactor;
|
||
|
/**
|
||
|
* Text string.
|
||
|
*
|
||
|
* Text string entered explicitly by user or null
|
||
|
* or "<>" for the actual measurement or " " (one blank space).
|
||
|
* for supressing the text.
|
||
|
*/
|
||
|
std::string text;
|
||
|
/*! Dimension style (font name). */
|
||
|
std::string style;
|
||
|
/**
|
||
|
* Rotation angle of dimension text away from
|
||
|
* default orientation.
|
||
|
*/
|
||
|
double angle;
|
||
|
/**
|
||
|
* Linear factor style override.
|
||
|
*/
|
||
|
double linearFactor;
|
||
|
/**
|
||
|
* Dimension scale (dimscale) style override.
|
||
|
*/
|
||
|
double dimScale;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Aligned Dimension Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DimAlignedData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_DimAlignedData(double depx1, double depy1, double depz1,
|
||
|
double depx2, double depy2, double depz2) {
|
||
|
|
||
|
epx1 = depx1;
|
||
|
epy1 = depy1;
|
||
|
epz1 = depz1;
|
||
|
|
||
|
epx2 = depx2;
|
||
|
epy2 = depy2;
|
||
|
epz2 = depz2;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of Extension point 1. */
|
||
|
double epx1;
|
||
|
/*! Y Coordinate of Extension point 1. */
|
||
|
double epy1;
|
||
|
/*! Z Coordinate of Extension point 1. */
|
||
|
double epz1;
|
||
|
|
||
|
/*! X Coordinate of Extension point 2. */
|
||
|
double epx2;
|
||
|
/*! Y Coordinate of Extension point 2. */
|
||
|
double epy2;
|
||
|
/*! Z Coordinate of Extension point 2. */
|
||
|
double epz2;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Linear (rotated) Dimension Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DimLinearData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_DimLinearData(double ddpx1, double ddpy1, double ddpz1,
|
||
|
double ddpx2, double ddpy2, double ddpz2,
|
||
|
double dAngle, double dOblique) {
|
||
|
|
||
|
dpx1 = ddpx1;
|
||
|
dpy1 = ddpy1;
|
||
|
dpz1 = ddpz1;
|
||
|
|
||
|
dpx2 = ddpx2;
|
||
|
dpy2 = ddpy2;
|
||
|
dpz2 = ddpz2;
|
||
|
|
||
|
angle = dAngle;
|
||
|
oblique = dOblique;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of Extension point 1. */
|
||
|
double dpx1;
|
||
|
/*! Y Coordinate of Extension point 1. */
|
||
|
double dpy1;
|
||
|
/*! Z Coordinate of Extension point 1. */
|
||
|
double dpz1;
|
||
|
|
||
|
/*! X Coordinate of Extension point 2. */
|
||
|
double dpx2;
|
||
|
/*! Y Coordinate of Extension point 2. */
|
||
|
double dpy2;
|
||
|
/*! Z Coordinate of Extension point 2. */
|
||
|
double dpz2;
|
||
|
|
||
|
/*! Rotation angle (angle of dimension line) in degrees. */
|
||
|
double angle;
|
||
|
/*! Oblique angle in degrees. */
|
||
|
double oblique;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Radial Dimension Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DimRadialData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_DimRadialData(double ddpx, double ddpy, double ddpz, double dleader) {
|
||
|
dpx = ddpx;
|
||
|
dpy = ddpy;
|
||
|
dpz = ddpz;
|
||
|
|
||
|
leader = dleader;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of definition point. */
|
||
|
double dpx;
|
||
|
/*! Y Coordinate of definition point. */
|
||
|
double dpy;
|
||
|
/*! Z Coordinate of definition point. */
|
||
|
double dpz;
|
||
|
|
||
|
/*! Leader length */
|
||
|
double leader;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Diametric Dimension Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DimDiametricData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_DimDiametricData(double ddpx, double ddpy, double ddpz, double dleader) {
|
||
|
dpx = ddpx;
|
||
|
dpy = ddpy;
|
||
|
dpz = ddpz;
|
||
|
|
||
|
leader = dleader;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of definition point (DXF 15). */
|
||
|
double dpx;
|
||
|
/*! Y Coordinate of definition point (DXF 25). */
|
||
|
double dpy;
|
||
|
/*! Z Coordinate of definition point (DXF 35). */
|
||
|
double dpz;
|
||
|
|
||
|
/*! Leader length */
|
||
|
double leader;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Angular Dimension Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DimAngularData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_DimAngularData(double ddpx1, double ddpy1, double ddpz1,
|
||
|
double ddpx2, double ddpy2, double ddpz2,
|
||
|
double ddpx3, double ddpy3, double ddpz3,
|
||
|
double ddpx4, double ddpy4, double ddpz4) {
|
||
|
|
||
|
dpx1 = ddpx1;
|
||
|
dpy1 = ddpy1;
|
||
|
dpz1 = ddpz1;
|
||
|
|
||
|
dpx2 = ddpx2;
|
||
|
dpy2 = ddpy2;
|
||
|
dpz2 = ddpz2;
|
||
|
|
||
|
dpx3 = ddpx3;
|
||
|
dpy3 = ddpy3;
|
||
|
dpz3 = ddpz3;
|
||
|
|
||
|
dpx4 = ddpx4;
|
||
|
dpy4 = ddpy4;
|
||
|
dpz4 = ddpz4;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of definition point 1. */
|
||
|
double dpx1;
|
||
|
/*! Y Coordinate of definition point 1. */
|
||
|
double dpy1;
|
||
|
/*! Z Coordinate of definition point 1. */
|
||
|
double dpz1;
|
||
|
|
||
|
/*! X Coordinate of definition point 2. */
|
||
|
double dpx2;
|
||
|
/*! Y Coordinate of definition point 2. */
|
||
|
double dpy2;
|
||
|
/*! Z Coordinate of definition point 2. */
|
||
|
double dpz2;
|
||
|
|
||
|
/*! X Coordinate of definition point 3. */
|
||
|
double dpx3;
|
||
|
/*! Y Coordinate of definition point 3. */
|
||
|
double dpy3;
|
||
|
/*! Z Coordinate of definition point 3. */
|
||
|
double dpz3;
|
||
|
|
||
|
/*! X Coordinate of definition point 4. */
|
||
|
double dpx4;
|
||
|
/*! Y Coordinate of definition point 4. */
|
||
|
double dpy4;
|
||
|
/*! Z Coordinate of definition point 4. */
|
||
|
double dpz4;
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Angular Dimension Data (3 points version).
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DimAngular3PData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_DimAngular3PData(double ddpx1, double ddpy1, double ddpz1,
|
||
|
double ddpx2, double ddpy2, double ddpz2,
|
||
|
double ddpx3, double ddpy3, double ddpz3) {
|
||
|
|
||
|
dpx1 = ddpx1;
|
||
|
dpy1 = ddpy1;
|
||
|
dpz1 = ddpz1;
|
||
|
|
||
|
dpx2 = ddpx2;
|
||
|
dpy2 = ddpy2;
|
||
|
dpz2 = ddpz2;
|
||
|
|
||
|
dpx3 = ddpx3;
|
||
|
dpy3 = ddpy3;
|
||
|
dpz3 = ddpz3;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of definition point 1. */
|
||
|
double dpx1;
|
||
|
/*! Y Coordinate of definition point 1. */
|
||
|
double dpy1;
|
||
|
/*! Z Coordinate of definition point 1. */
|
||
|
double dpz1;
|
||
|
|
||
|
/*! X Coordinate of definition point 2. */
|
||
|
double dpx2;
|
||
|
/*! Y Coordinate of definition point 2. */
|
||
|
double dpy2;
|
||
|
/*! Z Coordinate of definition point 2. */
|
||
|
double dpz2;
|
||
|
|
||
|
/*! X Coordinate of definition point 3. */
|
||
|
double dpx3;
|
||
|
/*! Y Coordinate of definition point 3. */
|
||
|
double dpy3;
|
||
|
/*! Z Coordinate of definition point 3. */
|
||
|
double dpz3;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Ordinate Dimension Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DimOrdinateData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_DimOrdinateData(double ddpx1, double ddpy1, double ddpz1,
|
||
|
double ddpx2, double ddpy2, double ddpz2,
|
||
|
bool dxtype) {
|
||
|
|
||
|
dpx1 = ddpx1;
|
||
|
dpy1 = ddpy1;
|
||
|
dpz1 = ddpz1;
|
||
|
|
||
|
dpx2 = ddpx2;
|
||
|
dpy2 = ddpy2;
|
||
|
dpz2 = ddpz2;
|
||
|
|
||
|
xtype = dxtype;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of definition point 1. */
|
||
|
double dpx1;
|
||
|
/*! Y Coordinate of definition point 1. */
|
||
|
double dpy1;
|
||
|
/*! Z Coordinate of definition point 1. */
|
||
|
double dpz1;
|
||
|
|
||
|
/*! X Coordinate of definition point 2. */
|
||
|
double dpx2;
|
||
|
/*! Y Coordinate of definition point 2. */
|
||
|
double dpy2;
|
||
|
/*! Z Coordinate of definition point 2. */
|
||
|
double dpz2;
|
||
|
|
||
|
/*! True if the dimension indicates the X-value, false for Y-value */
|
||
|
bool xtype;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Leader (arrow).
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_LeaderData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_LeaderData(int lArrowHeadFlag,
|
||
|
int lLeaderPathType,
|
||
|
int lLeaderCreationFlag,
|
||
|
int lHooklineDirectionFlag,
|
||
|
int lHooklineFlag,
|
||
|
double lTextAnnotationHeight,
|
||
|
double lTextAnnotationWidth,
|
||
|
int lNumber) {
|
||
|
|
||
|
arrowHeadFlag = lArrowHeadFlag;
|
||
|
leaderPathType = lLeaderPathType;
|
||
|
leaderCreationFlag = lLeaderCreationFlag;
|
||
|
hooklineDirectionFlag = lHooklineDirectionFlag;
|
||
|
hooklineFlag = lHooklineFlag;
|
||
|
textAnnotationHeight = lTextAnnotationHeight;
|
||
|
textAnnotationWidth = lTextAnnotationWidth;
|
||
|
number = lNumber;
|
||
|
}
|
||
|
|
||
|
/*! Arrow head flag (71). */
|
||
|
int arrowHeadFlag;
|
||
|
/*! Leader path type (72). */
|
||
|
int leaderPathType;
|
||
|
/*! Leader creation flag (73). */
|
||
|
int leaderCreationFlag;
|
||
|
/*! Hookline direction flag (74). */
|
||
|
int hooklineDirectionFlag;
|
||
|
/*! Hookline flag (75) */
|
||
|
int hooklineFlag;
|
||
|
/*! Text annotation height (40). */
|
||
|
double textAnnotationHeight;
|
||
|
/*! Text annotation width (41) */
|
||
|
double textAnnotationWidth;
|
||
|
/*! Number of vertices in leader (76). */
|
||
|
int number;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Leader Vertex Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_LeaderVertexData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_LeaderVertexData(double px=0.0, double py=0.0, double pz=0.0) {
|
||
|
x = px;
|
||
|
y = py;
|
||
|
z = pz;
|
||
|
}
|
||
|
|
||
|
/*! X Coordinate of the vertex. */
|
||
|
double x;
|
||
|
/*! Y Coordinate of the vertex. */
|
||
|
double y;
|
||
|
/*! Z Coordinate of the vertex. */
|
||
|
double z;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Hatch data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_HatchData {
|
||
|
/**
|
||
|
* Default constructor.
|
||
|
*/
|
||
|
DL_HatchData() {}
|
||
|
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_HatchData(int numLoops,
|
||
|
bool solid,
|
||
|
double scale,
|
||
|
double angle,
|
||
|
const std::string& pattern,
|
||
|
double originX = 0.0,
|
||
|
double originY = 0.0) :
|
||
|
numLoops(numLoops),
|
||
|
solid(solid),
|
||
|
scale(scale),
|
||
|
angle(angle),
|
||
|
pattern(pattern),
|
||
|
originX(originX),
|
||
|
originY(originY) {
|
||
|
|
||
|
}
|
||
|
|
||
|
/*! Number of boundary paths (loops). */
|
||
|
int numLoops;
|
||
|
/*! Solid fill flag (true=solid, false=pattern). */
|
||
|
bool solid;
|
||
|
/*! Pattern scale or spacing */
|
||
|
double scale;
|
||
|
/*! Pattern angle in degrees */
|
||
|
double angle;
|
||
|
/*! Pattern name. */
|
||
|
std::string pattern;
|
||
|
/*! Pattern origin */
|
||
|
double originX;
|
||
|
double originY;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Hatch boundary path (loop) data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_HatchLoopData {
|
||
|
/**
|
||
|
* Default constructor.
|
||
|
*/
|
||
|
DL_HatchLoopData() {}
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_HatchLoopData(int hNumEdges) {
|
||
|
numEdges = hNumEdges;
|
||
|
}
|
||
|
|
||
|
/*! Number of edges in this loop. */
|
||
|
int numEdges;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Hatch edge data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_HatchEdgeData {
|
||
|
/**
|
||
|
* Default constructor.
|
||
|
*/
|
||
|
DL_HatchEdgeData() : defined(false), x1(0.0), y1(0.0), x2(0.0), y2(0.0) {
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructor for a line edge.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_HatchEdgeData(double x1, double y1,
|
||
|
double x2, double y2) :
|
||
|
defined(true),
|
||
|
type(1),
|
||
|
x1(x1),
|
||
|
y1(y1),
|
||
|
x2(x2),
|
||
|
y2(y2) {
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructor for an arc edge.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_HatchEdgeData(double cx, double cy,
|
||
|
double radius,
|
||
|
double angle1, double angle2,
|
||
|
bool ccw) :
|
||
|
defined(true),
|
||
|
type(2),
|
||
|
cx(cx),
|
||
|
cy(cy),
|
||
|
radius(radius),
|
||
|
angle1(angle1),
|
||
|
angle2(angle2),
|
||
|
ccw(ccw) {
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructor for an ellipse arc edge.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_HatchEdgeData(double cx, double cy,
|
||
|
double mx, double my,
|
||
|
double ratio,
|
||
|
double angle1, double angle2,
|
||
|
bool ccw) :
|
||
|
defined(true),
|
||
|
type(3),
|
||
|
cx(cx),
|
||
|
cy(cy),
|
||
|
angle1(angle1),
|
||
|
angle2(angle2),
|
||
|
ccw(ccw),
|
||
|
mx(mx),
|
||
|
my(my),
|
||
|
ratio(ratio) {
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Constructor for a spline edge.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_HatchEdgeData(unsigned int degree,
|
||
|
bool rational,
|
||
|
bool periodic,
|
||
|
unsigned int nKnots,
|
||
|
unsigned int nControl,
|
||
|
unsigned int nFit,
|
||
|
const std::vector<double>& knots,
|
||
|
const std::vector<std::vector<double> >& controlPoints,
|
||
|
const std::vector<std::vector<double> >& fitPoints,
|
||
|
const std::vector<double>& weights,
|
||
|
double startTangentX,
|
||
|
double startTangentY,
|
||
|
double endTangentX,
|
||
|
double endTangentY) :
|
||
|
defined(true),
|
||
|
type(4),
|
||
|
degree(degree),
|
||
|
rational(rational),
|
||
|
periodic(periodic),
|
||
|
nKnots(nKnots),
|
||
|
nControl(nControl),
|
||
|
nFit(nFit),
|
||
|
controlPoints(controlPoints),
|
||
|
knots(knots),
|
||
|
weights(weights),
|
||
|
fitPoints(fitPoints),
|
||
|
startTangentX(startTangentX),
|
||
|
startTangentY(startTangentY),
|
||
|
endTangentX(endTangentX),
|
||
|
endTangentY(endTangentY) {
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set to true if this edge is fully defined.
|
||
|
*/
|
||
|
bool defined;
|
||
|
|
||
|
/**
|
||
|
* Edge type. 1=line, 2=arc, 3=elliptic arc, 4=spline.
|
||
|
*/
|
||
|
int type;
|
||
|
|
||
|
// line edges:
|
||
|
|
||
|
/*! Start point (X). */
|
||
|
double x1;
|
||
|
/*! Start point (Y). */
|
||
|
double y1;
|
||
|
/*! End point (X). */
|
||
|
double x2;
|
||
|
/*! End point (Y). */
|
||
|
double y2;
|
||
|
|
||
|
/*! Center point of arc or ellipse arc (X). */
|
||
|
double cx;
|
||
|
/*! Center point of arc or ellipse arc (Y). */
|
||
|
double cy;
|
||
|
/*! Arc radius. */
|
||
|
double radius;
|
||
|
/*! Start angle of arc or ellipse arc. */
|
||
|
double angle1;
|
||
|
/*! End angle of arc or ellipse arc. */
|
||
|
double angle2;
|
||
|
/*! Counterclockwise flag for arc or ellipse arc. */
|
||
|
bool ccw;
|
||
|
|
||
|
/*! Major axis end point (X). */
|
||
|
double mx;
|
||
|
/*! Major axis end point (Y). */
|
||
|
double my;
|
||
|
/*! Axis ratio */
|
||
|
double ratio;
|
||
|
|
||
|
|
||
|
/*! Spline degree */
|
||
|
unsigned int degree;
|
||
|
bool rational;
|
||
|
bool periodic;
|
||
|
/*! Number of knots. */
|
||
|
unsigned int nKnots;
|
||
|
/*! Number of control points. */
|
||
|
unsigned int nControl;
|
||
|
/*! Number of fit points. */
|
||
|
unsigned int nFit;
|
||
|
|
||
|
std::vector<std::vector<double> > controlPoints;
|
||
|
std::vector<double> knots;
|
||
|
std::vector<double> weights;
|
||
|
std::vector<std::vector<double> > fitPoints;
|
||
|
|
||
|
double startTangentX;
|
||
|
double startTangentY;
|
||
|
|
||
|
double endTangentX;
|
||
|
double endTangentY;
|
||
|
|
||
|
/** Polyline boundary vertices (x y [bulge])*/
|
||
|
std::vector<std::vector<double> > vertices;
|
||
|
//bool closed;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Image Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_ImageData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_ImageData(const std::string& iref,
|
||
|
double iipx, double iipy, double iipz,
|
||
|
double iux, double iuy, double iuz,
|
||
|
double ivx, double ivy, double ivz,
|
||
|
int iwidth, int iheight,
|
||
|
int ibrightness, int icontrast, int ifade) {
|
||
|
ref = iref;
|
||
|
ipx = iipx;
|
||
|
ipy = iipy;
|
||
|
ipz = iipz;
|
||
|
ux = iux;
|
||
|
uy = iuy;
|
||
|
uz = iuz;
|
||
|
vx = ivx;
|
||
|
vy = ivy;
|
||
|
vz = ivz;
|
||
|
width = iwidth;
|
||
|
height = iheight;
|
||
|
brightness = ibrightness;
|
||
|
contrast = icontrast;
|
||
|
fade = ifade;
|
||
|
}
|
||
|
|
||
|
/*! Reference to the image file
|
||
|
(unique, used to refer to the image def object). */
|
||
|
std::string ref;
|
||
|
/*! X Coordinate of insertion point. */
|
||
|
double ipx;
|
||
|
/*! Y Coordinate of insertion point. */
|
||
|
double ipy;
|
||
|
/*! Z Coordinate of insertion point. */
|
||
|
double ipz;
|
||
|
/*! X Coordinate of u vector along bottom of image. */
|
||
|
double ux;
|
||
|
/*! Y Coordinate of u vector along bottom of image. */
|
||
|
double uy;
|
||
|
/*! Z Coordinate of u vector along bottom of image. */
|
||
|
double uz;
|
||
|
/*! X Coordinate of v vector along left side of image. */
|
||
|
double vx;
|
||
|
/*! Y Coordinate of v vector along left side of image. */
|
||
|
double vy;
|
||
|
/*! Z Coordinate of v vector along left side of image. */
|
||
|
double vz;
|
||
|
/*! Width of image in pixel. */
|
||
|
int width;
|
||
|
/*! Height of image in pixel. */
|
||
|
int height;
|
||
|
/*! Brightness (0..100, default = 50). */
|
||
|
int brightness;
|
||
|
/*! Contrast (0..100, default = 50). */
|
||
|
int contrast;
|
||
|
/*! Fade (0..100, default = 0). */
|
||
|
int fade;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Image Definition Data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_ImageDefData {
|
||
|
/**
|
||
|
* Constructor.
|
||
|
* Parameters: see member variables.
|
||
|
*/
|
||
|
DL_ImageDefData(const std::string& iref,
|
||
|
const std::string& ifile) {
|
||
|
ref = iref;
|
||
|
file = ifile;
|
||
|
}
|
||
|
|
||
|
/*! Reference to the image file
|
||
|
(unique, used to refer to the image def object). */
|
||
|
std::string ref;
|
||
|
|
||
|
/*! Image file */
|
||
|
std::string file;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Dictionary data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DictionaryData {
|
||
|
DL_DictionaryData(const std::string& handle) : handle(handle) {}
|
||
|
std::string handle;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Dictionary entry data.
|
||
|
*/
|
||
|
struct DXFLIB_EXPORT DL_DictionaryEntryData {
|
||
|
DL_DictionaryEntryData(const std::string& name, const std::string& handle) :
|
||
|
name(name), handle(handle) {}
|
||
|
|
||
|
std::string name;
|
||
|
std::string handle;
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
|
||
|
// EOF
|