Why are they not read?
Can you tell me ho to add code to read the weights?
Regards,
Bert
Spline weights are not read from DXF file.
Moderator: andrew
This patch should do it:
Code: Select all
Index: dl_dxf.cpp
--- dl_dxf.cpp (revision 19810)
+++ dl_dxf.cpp (working copy)
@@ -56,9 +56,11 @@
maxKnots = 0;
knotIndex = 0;
+ weights = NULL;
controlPoints = NULL;
maxControlPoints = 0;
controlPointIndex = 0;
+ weightIndex = 0;
leaderVertices = NULL;
maxLeaderVertices = 0;
@@ -88,6 +90,9 @@
if (controlPoints!=NULL) {
delete[] controlPoints;
}
+ if (weights!=NULL) {
+ delete[] weights;
+ }
if (leaderVertices!=NULL) {
delete[] leaderVertices;
}
@@ -941,7 +946,8 @@
for (i=0; i<maxControlPoints; i++) {
DL_ControlPointData d(controlPoints[i*3],
controlPoints[i*3+1],
- controlPoints[i*3+2]);
+ controlPoints[i*3+2],
+ weights[i]);
creationInterface->addControlPoint(d);
}
@@ -1218,21 +1224,27 @@
return true;
}
- // Allocate Spline control points (group code 73):
+ // Allocate Spline control points / weights (group code 73):
else if (groupCode==73) {
maxControlPoints = toInt(groupValue);
if (maxControlPoints>0) {
if (controlPoints!=NULL) {
delete[] controlPoints;
}
+ if (weights!=NULL) {
+ delete[] weights;
+ }
controlPoints = new double[3*maxControlPoints];
+ weights = new double[maxControlPoints];
for (int i=0; i<maxControlPoints; ++i) {
controlPoints[i*3] = 0.0;
controlPoints[i*3+1] = 0.0;
controlPoints[i*3+2] = 0.0;
+ weights[i] = 1.0;
}
}
controlPointIndex=-1;
+ weightIndex=-1;
return true;
}
@@ -1259,6 +1271,19 @@
}
return true;
}
+
+ // Compute spline weights (group code 41)
+ else if (groupCode==41) {
+
+ if (weightIndex<maxControlPoints-1) {
+ weightIndex++;
+ }
+
+ if (weightIndex>=0 && weightIndex<maxControlPoints) {
+ weights[weightIndex] = toReal(groupValue);
+ }
+ return true;
+ }
return false;
}
Index: dl_dxf.h
--- dl_dxf.h (revision 19810)
+++ dl_dxf.h (working copy)
@@ -379,9 +379,11 @@
int maxKnots;
int knotIndex;
+ double* weights;
double* controlPoints;
int maxControlPoints;
int controlPointIndex;
+ int weightIndex;
double* leaderVertices;
int maxLeaderVertices;
Index: dl_entities.h
--- dl_entities.h (revision 19810)
+++ dl_entities.h (working copy)
@@ -442,10 +442,11 @@
* Constructor.
* Parameters: see member variables.
*/
- DL_ControlPointData(double px, double py, double pz) {
+ DL_ControlPointData(double px, double py, double pz, double weight) {
x = px;
y = py;
z = pz;
+ w = weight;
}
/*! X coordinate of the control point. */
@@ -454,6 +455,8 @@
double y;
/*! Z coordinate of the control point. */
double z;
+ /*! Weight of control point. */
+ double w;
};