Hello everybody,<br>As against my previous approach, i followed a newer one.<br>Let user put/mark on canvas as QgsMapCanvasItem&nbsp; and mouse interactivity using QgsMapCanvasTool.<br>But i have some issue which i couldn't sort out.
<br>a. When i click on canvas ,after loading plugin , point symbol donot apears until i refesh.<br>Header file look like this:-<br>/*----------vp.h-------------*/<br>class vP:public QgsMapCanvasItem, public QgsMapTool, public QgisPlugin
<br>{<br>&nbsp; Q_OBJECT;<br>&nbsp; public:<br>&nbsp; vP(QgisApp * theApplication, QgisIface * theInterface);<br>&nbsp; //! Destructor<br>&nbsp; virtual ~vP();<br>&nbsp;&nbsp;&nbsp; //! Mouse move event for overriding<br>&nbsp;&nbsp;&nbsp; virtual void canvasMoveEvent(QMouseEvent * e) { }
<br><br>&nbsp;&nbsp;&nbsp; //! Mouse press event for overriding<br>&nbsp;&nbsp;&nbsp; virtual void canvasPressEvent(QMouseEvent * e) { }<br><br>&nbsp;&nbsp;&nbsp; //! Mouse release event for overriding<br>&nbsp;&nbsp;&nbsp; virtual void canvasReleaseEvent(QMouseEvent * e);<br>&nbsp;&nbsp;&nbsp; &nbsp;
<br>&nbsp;&nbsp;&nbsp; &nbsp;void drawShape(QPainter &amp; p);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;void updatePixmap();<br><br>public slots:<br>&nbsp; //! init the gui<br>&nbsp; virtual void initGui();<br>&nbsp; //! Show the dialog box<br>&nbsp; void run();<br>&nbsp; //! unload the plugin<br>
&nbsp; void unload();<br>&nbsp; //! show the help document<br>&nbsp; void help();<br>&nbsp;  <br>&nbsp; //!draw a raster layer in the qui<br>&nbsp; void drawRasterLayer(QString);<br>&nbsp; //! Add a vector layer given vectorLayerPath, baseName, providerKey (&quot;ogr&quot; or &quot;postgres&quot;);
<br>&nbsp; void drawVectorLayer(QString,QString,QString);<br>&nbsp; //!will receive signal pbnOk clicked<br>&nbsp;&nbsp;&nbsp; void recvOkClicked();<br>private:<br> &nbsp; int mPluginType;<br>&nbsp; //! Pointer to our toolbar<br>&nbsp; QToolBar *mToolBarPointer;
<br>&nbsp; //! Pionter to QGIS main application object<br>&nbsp; QgisApp *mQGisApp;<br>&nbsp; //! Pointer to the QGIS interface object<br>&nbsp; QgisIface *mQGisIface;<br>&nbsp; //!pointer to the qaction for this plugin<br>&nbsp; QAction * mQActionPointer;
<br>&nbsp;&nbsp;&nbsp; //! container for storing location of elements, later will be made of appropriate struct<br>&nbsp;&nbsp;&nbsp; QList&lt;float &gt; elementList;<br><br>};<br><br>here is code for drawShape()<br>&nbsp;&nbsp;&nbsp; [CODE]<br>&nbsp; //!This will draw the elements on to canvas
<br>void vP::drawShape(QPainter &amp;p)<br>{<br>&nbsp;&nbsp;&nbsp; double temp_x, temp_y;<br>&nbsp;&nbsp;&nbsp; QgsPoint qPoint(0.0,0.0);<br>&nbsp;&nbsp;&nbsp; QPoint cPoint(0,0);<br>&nbsp;&nbsp;&nbsp; //loading image to pixmap which will be displayed on points<br>&nbsp;&nbsp;&nbsp; QString myFileNameQString= &quot;/home1/qgis/images/vP/hit.png&quot;;
<br>&nbsp;&nbsp;&nbsp; QPixmap myQPixmap;<br>&nbsp;&nbsp;&nbsp; myQPixmap.load(myFileNameQString);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //displaying it at position where the points are marked<br>&nbsp;&nbsp;&nbsp; //currently drwing all points which are is in list but only point which is added latest should be drawn
<br>&nbsp;&nbsp;&nbsp; QListIterator&lt;float&gt; listIterator(elementList);<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;\n&quot;;<br>&nbsp;&nbsp;&nbsp; while(listIterator.hasNext())<br>&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; temp_x=listIterator.next();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //cout&lt;&lt;&quot;\t&quot;&lt;&lt;temp_x&lt;&lt;&quot; &quot;;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(listIterator.hasNext())<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; temp_y=listIterator.next(); //cout&lt;&lt;temp_y;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; qPoint.setX(temp_x);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; qPoint.setY(temp_y);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cPoint=QgsMapCanvasItem::toCanvasCoords(qPoint);
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; p.drawPixmap(cPoint.x(),cPoint.y(),myQPixmap);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; show();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;vp.cpp-205\t&quot;;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; updateCanvas();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; //update();
<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;vp.cpp-210\n&quot;;<br>&nbsp;}<br>[/CODE]<br><br>I had observer that this function drawShape() is continuously being called. I myself has not made any connection to it.<br><br>Code for canvasReleaseEvent() is :-
<br>void vP::canvasReleaseEvent(QMouseEvent * e)<br>{<br>&nbsp; QgsPoint point = mQGisIface-&gt;getMapCanvas()-&gt;getCoordinateTransform()-&gt;toMapCoordinates(e-&gt;x(), e-&gt;y());<br>if (e-&gt;button() == Qt::LeftButton)<br>
&nbsp; {<br>&nbsp;&nbsp;&nbsp; show();//why here-find out priority@5<br>&nbsp;&nbsp;&nbsp; //!make data available for storage <br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;&quot;\nelement bein added &quot;&lt;&lt;point.x()&lt;&lt;&quot; &quot;&lt;&lt;point.y()&lt;&lt;&quot;vp.cpp -171&quot;;
<br>&nbsp;&nbsp;&nbsp; elementList.append(point.x());<br>&nbsp;&nbsp;&nbsp; elementList.append(point.y());&nbsp;&nbsp;  <br>&nbsp; }<br>}<br><br>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?
<br>regards<br>quickNitin<br><br><div><span class="gmail_quote">On 8/21/06, <b class="gmail_sendername">nitin quick</b> &lt;<a href="mailto:quick.nitin@gmail.com">quick.nitin@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>hello everybody,<br>Currently i am trying to create a application which
let me overlay( creation of some&nbsp; objects using mouse like marking
something on map) some shapes over current map.<br>For this purpose i am thinking of few steps:
<br>1. Creating a new vector layer:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  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?<br>

2. Add projection information ( if this is independent of underlying map's projection information)<br>3. Displaying it and editing it.<br><br>Any advices on how i can carry out this task more effectively is welcome.<br><br>

regards<br>quickNitin<br>

</div></blockquote></div><br>