]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Add the python module sketcher.py
authorboulant <boulant>
Wed, 25 Jan 2012 14:41:18 +0000 (14:41 +0000)
committerboulant <boulant>
Wed, 25 Jan 2012 14:41:18 +0000 (14:41 +0000)
src/GEOM_PY/Makefile.am
src/GEOM_PY/sketcher.py [new file with mode: 0644]

index 5bf0962ffe82541139825f1d4c3a8538fea96fbd..5a719cbdc97ad025c1616855d389f50aca9b3c3a 100644 (file)
@@ -24,4 +24,5 @@ SUBDIRS= structelem
 mypkgpythondir = $(salomepythondir)/salome/geom
 mypkgpython_PYTHON = \
        __init__.py \
-       geomtools.py
+       geomtools.py \
+       sketcher.py
diff --git a/src/GEOM_PY/sketcher.py b/src/GEOM_PY/sketcher.py
new file mode 100644 (file)
index 0000000..6b4f864
--- /dev/null
@@ -0,0 +1,141 @@
+# -*- coding: iso-8859-1 -*-
+#
+# Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+# (gboulant - 26/11/2008)
+"""
+This module provides the user with a simple python API to realize
+various sketches from the GEOM text user interface.
+
+Example::
+
+    from salome.geom.sketcher import Sketcher
+
+    # Create the sketch
+    mysketcher = Sketcher()
+    mysketcher.startAtPoint(0,0)
+    mysketcher.translateToPoint(100,0)
+    mysketcher.translateWithAngleAndLength(30,100)
+    mysketcher.intersectYWithAngle(15,100)
+    mysketcher.close()
+
+    # Get the geom object
+    wire = mysketcher.getGeomWire()
+
+    # Put it in the study
+    import geompy
+    geompy.addToStudy( wire, 'mysketch' )
+
+Additionnal examples can be found as unit tests in the source code.
+"""
+
+geompyEnable = True
+try:
+    import geompy
+except ImportError:
+    geompyEnable = False
+    
+
+class Sketcher:
+
+    __sketch = None
+    __xstart = 0
+    __ystart = 0
+
+    def __init__(self):
+        self.__sketch = "Sketcher:"
+
+    def startAtPoint(self,x=0,y=0):
+        self.__sketch = "Sketcher:F "+str(x)+" "+str(y)
+        # the data x and y are registered to process the ending closure.
+        self.__xstart = x
+        self.__ystart = y
+
+    def translateToPoint(self,x=10,y=0):
+        '''segment->point->absolute'''
+        self.__sketch = self.__sketch + ":TT "+str(x)+" "+str(y) 
+
+    def translateWithVector(self,deltax=10,deltay=0):
+        '''segment->point->relative'''
+        self.__sketch = self.__sketch + ":T "+str(deltax)+" "+str(deltay) 
+
+    #def translateToSelection(self,vertex):
+    #    '''segment->point->selection'''
+    #    self.__sketch = self.__sketch + ":T "+str(deltax)+" "+str(deltay) 
+
+    def translateWithAngleAndLength(self,angle=30,length=100):
+        '''segment->direction->angle+length'''
+        self.__sketch = self.__sketch + ":R "+str(angle)+":L "+str(length)
+
+    def intersectXWithAngle(self,angle=30,x=100):
+        '''segment->direction->angle+length'''
+        self.__sketch = self.__sketch + ":R "+str(angle)+":IX "+str(x)
+
+    def intersectYWithAngle(self,angle=30,y=100):
+        '''segment->direction->angle+length'''
+        self.__sketch = self.__sketch + ":R "+str(angle)+":IY "+str(y)
+
+    def close(self):
+        '''
+        add a segment to reach the starting point and get a closed wire.
+        '''
+        self.__sketch = self.__sketch + ":WW"
+
+    def toString(self):
+        return self.__sketch
+
+    def getGeomWire(self):
+        if not geompyEnable:
+            return None
+        wire = geompy.MakeSketcher(self.__sketch, [0, 0, 0, 0, 0, 1, 1, 0, -0])
+        return wire
+#
+# ===============================================================
+# Use cases and unit tests
+# ===============================================================
+#
+def TEST_toString():
+    mysketcher = Sketcher()
+
+    mysketcher.startAtPoint(1.234,4.321)
+    mysketcher.translateToPoint(2.234,5.321)
+
+    expectedResult = "Sketcher:F 1.234 4.321:TT 2.234 5.321"
+    result = mysketcher.toString()
+    print "sketcher=",mysketcher.toString()
+    if result == expectedResult:
+        print "OK"
+    else:
+        print "Not OK"
+
+def TEST_usingGeom():
+    mysketcher = Sketcher()
+    mysketcher.startAtPoint(0,0)
+    mysketcher.translateToPoint(100,0)
+    mysketcher.translateWithAngleAndLength(30,100)
+    mysketcher.intersectYWithAngle(15,100)
+    mysketcher.close()
+    wire = mysketcher.getGeomWire()
+    if geompyEnable:
+        geompy.addToStudy( wire, "Sketch" )
+        
+
+if __name__ == "__main__":
+    #TEST_toString()
+    TEST_usingGeom()