[mapguide-commits] r5436 - trunk/MgDev/Common/Stylization
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Fri Dec 3 13:20:44 EST 2010
Author: traianstanev
Date: 2010-12-03 10:20:44 -0800 (Fri, 03 Dec 2010)
New Revision: 5436
Modified:
trunk/MgDev/Common/Stylization/LineBuffer.cpp
trunk/MgDev/Common/Stylization/LineBuffer.h
Log:
Fixed two bugs which were causing crashes when round-tripping data with To/FromAgf().
One was that MultiLineStrings were serialized incorrectly (number of geometries was not correctly set).
The second was that m_dimensionality was blindly set to what comes in with an AGF stream, which sometimes may contain M values. During serialization, this dimensionality value was written back to the output stream, but no M values were written since LineBuffer does not support those. This fix was to remove the M flag from m_dimensionality.
Also changed some FdoDimensionality types to int, to reduce the API dependency on FDO types, but this is just a small part of a larger job.
Modified: trunk/MgDev/Common/Stylization/LineBuffer.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/LineBuffer.cpp 2010-12-03 12:53:35 UTC (rev 5435)
+++ trunk/MgDev/Common/Stylization/LineBuffer.cpp 2010-12-03 18:20:44 UTC (rev 5436)
@@ -41,7 +41,7 @@
#define MAX_POINT_BLOCK 128
-LineBuffer::LineBuffer(int size, FdoDimensionality dimensionality, bool bIgnoreZ) :
+LineBuffer::LineBuffer(int size, int dimensionality, bool bIgnoreZ) :
m_bounds(DBL_MAX, DBL_MAX, DBL_MAX, -DBL_MAX, -DBL_MAX, -DBL_MAX),
m_types(NULL),
m_types_len(0),
@@ -116,7 +116,7 @@
}
-void LineBuffer::Reset(FdoDimensionality dimensionality, bool bIgnoreZ)
+void LineBuffer::Reset(int dimensionality, bool bIgnoreZ)
{
m_cur_types = 0;
m_cur_cntr = -1; // will increment with first MoveTo segment
@@ -911,7 +911,7 @@
// ensure that all dimensionalities of each geometry are the same
_ASSERT(q==0 || m_dimensionality == dim);
- m_dimensionality = dim;
+ m_dimensionality = dim & ~FdoDimensionality_M; //LineBuffer doesn't support M
m_bProcessZ = (m_dimensionality & FdoDimensionality_Z) && !m_bIgnoreZ;
skip = 0;
@@ -1207,9 +1207,10 @@
int num_geoms = m_cur_geom + 1;
if (is_multi)
{
- if (m_geom_type == FdoGeometryType_MultiPoint)
+ if ( m_geom_type == FdoGeometryType_MultiPoint
+ || m_geom_type == FdoGeometryType_MultiLineString )
{
- //write number of geometries -- for multipoint the
+ //write number of geometries -- for multipoint/linestring the
//number of contours (i.e. MoveTos) is equal to the
//number of point geometries in the multipoint
WRITE_INT(os, m_num_geomcntrs[0]);
@@ -1465,7 +1466,7 @@
|| m_bounds.maxy < b.miny)
return NULL;
- std::auto_ptr<LineBuffer> spLB(LineBufferPool::NewLineBuffer(lbp, m_cur_types, m_dimensionality, m_bIgnoreZ));
+ std::auto_ptr<LineBuffer> spLB(LineBufferPool::NewLineBuffer(lbp, m_cur_types, (FdoDimensionality)m_dimensionality, m_bIgnoreZ));
if (clipType == ctArea)
{
@@ -2543,7 +2544,7 @@
FdoDimensionality LineBuffer::dimensionality()
{
- return m_dimensionality;
+ return (FdoDimensionality)m_dimensionality;
}
@@ -2604,7 +2605,7 @@
}
-LineBuffer* LineBufferPool::NewLineBuffer(LineBufferPool* pool, int requestSize, FdoDimensionality dimensionality, bool bIgnoreZ)
+LineBuffer* LineBufferPool::NewLineBuffer(LineBufferPool* pool, int requestSize, int dimensionality, bool bIgnoreZ)
{
if (pool && !pool->m_pool.empty())
{
Modified: trunk/MgDev/Common/Stylization/LineBuffer.h
===================================================================
--- trunk/MgDev/Common/Stylization/LineBuffer.h 2010-12-03 12:53:35 UTC (rev 5435)
+++ trunk/MgDev/Common/Stylization/LineBuffer.h 2010-12-03 18:20:44 UTC (rev 5436)
@@ -90,7 +90,7 @@
ctAGF = 4
};
- STYLIZATION_API LineBuffer(int size, FdoDimensionality dimensionality = FdoDimensionality_XY, bool bIgnoreZ = true);
+ STYLIZATION_API LineBuffer(int size, int dimensionality = FdoDimensionality_XY, bool bIgnoreZ = true);
STYLIZATION_API virtual ~LineBuffer();
// rudimentary stuff
@@ -120,7 +120,7 @@
STYLIZATION_API void Centroid(GeomOperationType type, double* x, double * y, double* slope) const;
// clears the buffer for reuse
- STYLIZATION_API void Reset(FdoDimensionality dimensionality = FdoDimensionality_XY, bool bIgnoreZ = true);
+ STYLIZATION_API void Reset(int dimensionality = FdoDimensionality_XY, bool bIgnoreZ = true);
STYLIZATION_API void SetGeometryType(int geomType);
// computes the bounds of the line buffer's geometry
@@ -211,7 +211,7 @@
int m_cur_geom;
bool m_bIgnoreZ;
bool m_bProcessZ;
- FdoDimensionality m_dimensionality;
+ int m_dimensionality;
double m_drawingScale;
int m_arcs_sp_len; // length of m_arcs_sp array
int m_cur_arcs_sp; // current index into m_arcs_sp
@@ -266,7 +266,7 @@
STYLIZATION_API LineBufferPool();
STYLIZATION_API virtual ~LineBufferPool();
- STYLIZATION_API static LineBuffer* NewLineBuffer(LineBufferPool* pool, int requestSize, FdoDimensionality dimensionality = FdoDimensionality_XY, bool bIgnoreZ = true);
+ STYLIZATION_API static LineBuffer* NewLineBuffer(LineBufferPool* pool, int requestSize, int dimensionality = FdoDimensionality_XY, bool bIgnoreZ = true);
STYLIZATION_API static void FreeLineBuffer(LineBufferPool* pool, LineBuffer* lb);
private:
More information about the mapguide-commits
mailing list