<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body text="#000000" bgcolor="#ffffff">
    <font face="Helvetica, Arial, sans-serif">Hi all,<br>
      <br>
      I just read about running python scrips from Qgis Console(article
      by Gary Sherman
      <a class="moz-txt-link-freetext" href="http://spatialgalaxy.net/2012/01/27/qgis-running-scripts-in-the-python-console/">http://spatialgalaxy.net/2012/01/27/qgis-running-scripts-in-the-python-console/</a>).
      I am trying rotate each point in a layer based on a center point.
      I managed some code by copying from the CadTools plugin(by </font><font
      face="Helvetica, Arial, sans-serif">Stefan Ziegler)</font><font
      face="Helvetica, Arial, sans-serif">. Whenever i run this from
      qgis console, it crashes the application. Can somebody point me in
      the right direction? Please find the code below. I have to admit
      that i started python only yesterday.<br>
      <br>
      Note: I am not sure if this is the place to ask this. But i have
      been inspired by reading <br>
      <br>
      <br>
------------------------------------------------------------------------------------------------------------------------------------<br>
      #!/usr/bin/env Python<br>
      """Load all shapefiles in a given directory.<br>
      &nbsp; This script (iteratefeature.py) runs from the QGIS Python
      console.<br>
      &nbsp; From the console, use:<br>
      &nbsp;&nbsp;&nbsp; from iteratefeature import Looper<br>
      &nbsp;&nbsp;&nbsp; ldr = Looper(qgis.utils.iface)<br>
      &nbsp;&nbsp;&nbsp; ldr.LoopXY()<br>
      &nbsp;<br>
      &nbsp; """<br>
      from glob import glob<br>
      from os import path<br>
      from qgis.core import *<br>
      import math<br>
      &nbsp;<br>
      class Looper:<br>
      &nbsp;&nbsp;&nbsp; def __init__(self, iface):<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; """Initialize using the qgis.utils.iface <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object passed from the console.<br>
      &nbsp;<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; """<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.iface = iface<br>
      &nbsp;&nbsp;&nbsp; <br>
      &nbsp;<br>
      &nbsp;&nbsp;&nbsp; def LoopXY(self):<br>
      &nbsp;&nbsp;&nbsp; <br>
      &nbsp;&nbsp;&nbsp; basePoint=QgsPoint(-121.3140824,&nbsp; 38.63196648)<br>
      &nbsp;&nbsp;&nbsp; rotAngle=45<br>
      <br>
      &nbsp;&nbsp;&nbsp; mc = self.iface.mapCanvas()<br>
      &nbsp;&nbsp;&nbsp; layer = mc.layer(0)<br>
      &nbsp;&nbsp;&nbsp; provider = layer.dataProvider()<br>
      <br>
      &nbsp;&nbsp;&nbsp; feat = QgsFeature()<br>
      &nbsp;&nbsp;&nbsp; provider.select()<br>
      <br>
      <br>
      &nbsp;&nbsp;&nbsp; while(provider.nextFeature(feat)):<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #layer.startEditing()<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; geometry = feat.geometry()<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; geom1=rotate(geometry,basePoint,rotAngle * math.pi / 180)<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; layer.changeGeometry(feat.id(), geom1)<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #feat.setGeometry(geom1)<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #print "X Coord %d: " %geometry.asPoint().x()<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; #print "Y Coord %d: " %geometry.asPoint().y()<br>
      &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; layer.commitChanges()<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print "updated %d: " %feat.id()<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; print<br>
      <br>
      # Rotate script<br>
      def rotate(geometry,&nbsp; point,&nbsp; angle):<br>
      &nbsp;&nbsp;&nbsp; <br>
      &nbsp;&nbsp;&nbsp; if angle == 0 or angle == 2 * math.pi or angle == -2 *
      math.pi:<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return geom<br>
      &nbsp;&nbsp;&nbsp; <br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p0 = geometry.asPoint()<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p1 = QgsPoint(p0.x() - point.x(),&nbsp; p0.y() - point.y())<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p2 = rotatePoint(p1,&nbsp; angle)<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p3 = QgsPoint(point.x() + p2.x(),&nbsp; point.y() + p2.y())<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QgsGeometry().fromPoint(p3)<br>
      <br>
      <br>
      # Rotates a single point (centre 0/0).<br>
      # (c) Stefan Ziegler<br>
      def rotatePoint(point,&nbsp; angle):<br>
      &nbsp;&nbsp;&nbsp; x = math.cos(angle)*point.x() - math.sin(angle)*point.y()<br>
      &nbsp;&nbsp;&nbsp; y = math.sin(angle)*point.x() + math.cos(angle)*point.y()<br>
      &nbsp;&nbsp;&nbsp; return QgsPoint(x,&nbsp; y)<br>
      <br>
      <br>
----------------------------------------------------------------------------------------------------------------------------<br>
      <br>
      Regards<br>
      Vinayan<br>
      <br>
    </font>
  </body>
</html>