Skip to content

Commit 61e3f9f

Browse files
author
mhugent
committed
Take the changed geometry for rubberbanding instead of the original one
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@5103 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent a755560 commit 61e3f9f

File tree

1 file changed

+64
-53
lines changed

1 file changed

+64
-53
lines changed

src/core/qgsgeometry.cpp

Lines changed: 64 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -771,106 +771,117 @@ bool QgsGeometry::vertexAt(double &x, double &y,
771771
<< "." << std::endl;
772772
#endif
773773

774-
if(mGeometry)
775-
{
776-
int wkbType;
774+
if(mGeos)//try to find the vertex from the Geos geometry (it present)
775+
{
776+
geos::CoordinateSequence* cs = mGeos->getCoordinates();
777+
if(cs)
778+
{
779+
const geos::Coordinate& coord = cs->getAt(atVertex.back());
780+
x = coord.x;
781+
y = coord.y;
782+
delete cs;
783+
return true;
784+
}
785+
}
777786

778-
memcpy(&wkbType, (mGeometry+1), sizeof(int));
779-
switch (wkbType)
780-
{
787+
else if(mGeometry)
788+
{
789+
int wkbType;
790+
791+
memcpy(&wkbType, (mGeometry+1), sizeof(int));
792+
switch (wkbType)
793+
{
781794
case QGis::WKBPoint:
782-
{
795+
{
783796
// TODO
784797
return FALSE;
785798
break;
786-
}
799+
}
787800
case QGis::WKBLineString:
788-
{
801+
{
789802
unsigned char *ptr;
790803
int *nPoints;
791-
804+
792805
// get number of points in the line
793806
ptr = mGeometry + 5; // now at mGeometry.numPoints
794807
nPoints = (int *) ptr;
795-
808+
796809
#ifdef QGISDEBUG
797-
std::cout << "QgsGeometry::vertexAt: Number of points in WKBLineString is " << *nPoints
798-
<< "." << std::endl;
810+
std::cout << "QgsGeometry::vertexAt: Number of points in WKBLineString is " << *nPoints
811+
<< "." << std::endl;
799812
#endif
800813
// return error if underflow
801814
if (0 > atVertex.back())
802-
{
803-
return FALSE;
804-
}
815+
{
816+
return FALSE;
817+
}
805818
// return error if overflow
806819
if (*nPoints <= atVertex.back())
807-
{
808-
return FALSE;
809-
}
810-
820+
{
821+
return FALSE;
822+
}
823+
811824
// copy the vertex coordinates
812825
ptr = mGeometry + 9 + (atVertex.back() * 16);
813826
memcpy(&x, ptr, 8);
814827
ptr += 8;
815828
memcpy(&y, ptr, 8);
816-
829+
817830
#ifdef QGISDEBUG
818-
std::cout << "QgsGeometry::vertexAt: Point is (" << x << ", " << y << ")"
819-
<< "." << std::endl;
831+
std::cout << "QgsGeometry::vertexAt: Point is (" << x << ", " << y << ")"
832+
<< "." << std::endl;
820833
#endif
821-
834+
822835
break;
823-
}
836+
}
824837
case QGis::WKBPolygon:
825-
{
838+
{
826839
// TODO
827840
return false;
828841
break;
829-
}
842+
}
830843
case QGis::WKBMultiPoint:
831-
{
844+
{
832845
// TODO
833846
return false;
834847
break;
835-
}
836-
848+
}
849+
837850
case QGis::WKBMultiLineString:
838-
{
851+
{
839852
// TODO
840853
return false;
841854
break;
842-
}
843-
855+
}
856+
844857
case QGis::WKBMultiPolygon:
845-
{
846-
// TODO
858+
{
859+
// TODO
847860
return false;
848861
break;
849-
}
862+
}
850863
default:
851864
#ifdef QGISDEBUG
852-
qWarning("error: mGeometry type not recognized in QgsGeometry::vertexAt");
865+
qWarning("error: mGeometry type not recognized in QgsGeometry::vertexAt");
853866
#endif
854-
return false;
855-
break;
856-
}
857-
867+
return false;
868+
break;
869+
}
870+
858871
#ifdef QGISDEBUG
859-
std::cout << "QgsGeometry::vertexAt: Exiting TRUE." << std::endl;
872+
std::cout << "QgsGeometry::vertexAt: Exiting TRUE." << std::endl;
860873
#endif
861-
862-
return true;
863-
864-
}
865-
else
866-
{
874+
875+
return true;
876+
877+
}
878+
else
879+
{
867880
#ifdef QGISDEBUG
868-
qWarning("error: no mGeometry pointer in QgsGeometry::vertexAt");
881+
qWarning("error: no mGeometry pointer in QgsGeometry::vertexAt");
869882
#endif
870-
return false;
871-
}
872-
873-
883+
return false;
884+
}
874885
}
875886

876887

0 commit comments

Comments
 (0)