[Qgis-developer] Re: creating a new vector layer supporting all
line, point n polygon
nitin quick
quick.nitin at gmail.com
Thu Aug 24 01:57:24 EDT 2006
Hello everybody,
As against my previous approach, i followed a newer one.
Let user put/mark on canvas as QgsMapCanvasItem and mouse interactivity
using QgsMapCanvasTool.
But i have some issue which i couldn't sort out.
a. When i click on canvas ,after loading plugin , point symbol donot apears
until i refesh.
Header file look like this:-
/*----------vp.h-------------*/
class vP:public QgsMapCanvasItem, public QgsMapTool, public QgisPlugin
{
Q_OBJECT;
public:
vP(QgisApp * theApplication, QgisIface * theInterface);
//! Destructor
virtual ~vP();
//! Mouse move event for overriding
virtual void canvasMoveEvent(QMouseEvent * e) { }
//! Mouse press event for overriding
virtual void canvasPressEvent(QMouseEvent * e) { }
//! Mouse release event for overriding
virtual void canvasReleaseEvent(QMouseEvent * e);
void drawShape(QPainter & p);
void updatePixmap();
public slots:
//! init the gui
virtual void initGui();
//! Show the dialog box
void run();
//! unload the plugin
void unload();
//! show the help document
void help();
//!draw a raster layer in the qui
void drawRasterLayer(QString);
//! Add a vector layer given vectorLayerPath, baseName, providerKey ("ogr"
or "postgres");
void drawVectorLayer(QString,QString,QString);
//!will receive signal pbnOk clicked
void recvOkClicked();
private:
int mPluginType;
//! Pointer to our toolbar
QToolBar *mToolBarPointer;
//! Pionter to QGIS main application object
QgisApp *mQGisApp;
//! Pointer to the QGIS interface object
QgisIface *mQGisIface;
//!pointer to the qaction for this plugin
QAction * mQActionPointer;
//! container for storing location of elements, later will be made of
appropriate struct
QList<float > elementList;
};
here is code for drawShape()
[CODE]
//!This will draw the elements on to canvas
void vP::drawShape(QPainter &p)
{
double temp_x, temp_y;
QgsPoint qPoint(0.0,0.0);
QPoint cPoint(0,0);
//loading image to pixmap which will be displayed on points
QString myFileNameQString= "/home1/qgis/images/vP/hit.png";
QPixmap myQPixmap;
myQPixmap.load(myFileNameQString);
//displaying it at position where the points are marked
//currently drwing all points which are is in list but only point which
is added latest should be drawn
QListIterator<float> listIterator(elementList);
cout<<"\n";
while(listIterator.hasNext())
{ temp_x=listIterator.next();
//cout<<"\t"<<temp_x<<" ";
if(listIterator.hasNext())
{ temp_y=listIterator.next(); //cout<<temp_y;
qPoint.setX(temp_x);
qPoint.setY(temp_y);
cPoint=QgsMapCanvasItem::toCanvasCoords(qPoint);
p.drawPixmap(cPoint.x(),cPoint.y(),myQPixmap);
show();
}
cout<<"vp.cpp-205\t";
}
updateCanvas();
//update();
cout<<"vp.cpp-210\n";
}
[/CODE]
I had observer that this function drawShape() is continuously being called.
I myself has not made any connection to it.
Code for canvasReleaseEvent() is :-
void vP::canvasReleaseEvent(QMouseEvent * e)
{
QgsPoint point =
mQGisIface->getMapCanvas()->getCoordinateTransform()->toMapCoordinates(e->x(),
e->y());
if (e->button() == Qt::LeftButton)
{
show();//why here-find out priority at 5
//!make data available for storage
cout<<"\nelement bein added "<<point.x()<<" "<<point.y()<<"vp.cpp -171";
elementList.append(point.x());
elementList.append(point.y());
}
}
All advices are welcome. Also i keep stucking at such situations where i i
have to display on canvas through interactivity with user. Will anyone guide
me in improving here?
regards
quickNitin
On 8/21/06, nitin quick <quick.nitin at gmail.com> wrote:
>
> hello everybody,
> Currently i am trying to create a application which let me overlay(
> creation of some objects using mouse like marking something on map) some
> shapes over current map.
> For this purpose i am thinking of few steps:
> 1. Creating a new vector layer:
> Issue: here issue is layer supports only either lineor
> point or polygon but usually i want to have all of these available to me.
> How i can sort out this issue?
> 2. Add projection information ( if this is independent of underlying map's
> projection information)
> 3. Displaying it and editing it.
>
> Any advices on how i can carry out this task more effectively is welcome.
>
> regards
> quickNitin
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/qgis-developer/attachments/20060824/b8aafee5/attachment.html
More information about the Qgis-developer
mailing list