[Qgis-developer] Re: creating a new vector layer supporting all
line, point n polygon
nitin quick
quick.nitin at gmail.com
Thu Aug 24 05:11:17 EDT 2006
i found what wrong i was doing. i was calling updateCanvas( ) inside
drawShape() function which in turn was resulting in call to drawShape().
Second, slot defining visibility rectangle was not connnected.
On 8/24/06, nitin quick <quick.nitin at gmail.com> wrote:
>
> 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/4382eff8/attachment.html
More information about the Qgis-developer
mailing list