/[escript]/trunk/pycad/py_src/primitives.py
ViewVC logotype

Diff of /trunk/pycad/py_src/primitives.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 931 by gross, Fri Jan 19 03:06:33 2007 UTC revision 944 by gross, Tue Jan 30 08:57:37 2007 UTC
# Line 774  class CurveLoop(Primitive, PrimitiveBase Line 774  class CurveLoop(Primitive, PrimitiveBase
774                raise TypeError("%s-th argument is not a Manifold1D object."%i)                raise TypeError("%s-th argument is not a Manifold1D object."%i)
775         # for the curves a loop:         # for the curves a loop:
776         used=[ False for i in curves]         used=[ False for i in curves]
777         self.__curves=[curves[0]]         self.__curves=list(curves)
        used[0]=True  
        while not min(used):  
           found=False  
           for i in xrange(len(curves)):  
              if not used[i]:  
                 if self.__curves[-1].getEndPoint() == curves[i].getStartPoint():  
                    self.__curves.append(curves[i])  
                    used[i]=True  
                    found=True  
                    break  
           if not found:  
              raise ValueError("loop is not closed.")  
        if not self.__curves[0].getStartPoint() == self.__curves[-1].getEndPoint():  
           raise ValueError("loop is not closed.")  
778         Primitive.__init__(self)         Primitive.__init__(self)
779         PrimitiveBase.__init__(self)         PrimitiveBase.__init__(self)
780    
# Line 1156  class SurfaceLoop(Primitive, PrimitiveBa Line 1142  class SurfaceLoop(Primitive, PrimitiveBa
1142         for i in range(len(surfaces)):         for i in range(len(surfaces)):
1143             if not isinstance(surfaces[i].getUnderlyingPrimitive(),Manifold2D):             if not isinstance(surfaces[i].getUnderlyingPrimitive(),Manifold2D):
1144                raise TypeError("%s-th argument is not a Manifold2D object."%i)                raise TypeError("%s-th argument is not a Manifold2D object."%i)
1145           self.__surfaces=list(surfaces)
1146         Primitive.__init__(self)         Primitive.__init__(self)
1147         PrimitiveBase.__init__(self)         PrimitiveBase.__init__(self)
        # for the curves a loop:  
        used=[ False for s in surfaces]  
        self.__surfaces=[surfaces[0]]  
        used[0]= True  
        edges=[ e for e in surfaces[0].getBoundary() ]  
        used_edges=[ False for e in surfaces[0].getBoundary() ]  
        while not min(used):  
           found=False  
           for i in xrange(len(surfaces)):  
              if not used[i]:  
                 i_boundary=surfaces[i].getBoundary()  
                 for ib in xrange(len(i_boundary)):    
                     if i_boundary[ib] in edges:  
                          found=True  
                          break  
                 if found:  
                     used[i]=True  
                     self.__surfaces.append(surfaces[i])  
                     for ib in xrange(len(i_boundary)):    
                        if i_boundary[ib] in edges:  
                          if used_edges[edges.index(i_boundary[ib])]:  
                             raise ValueError("boundary segment %s is shared by more than one surface."%str(i_boundary[ib].getUnderlyingPrimitive()))  
                          used_edges[edges.index(i_boundary[ib])]=True  
                        else:  
                          edges.append(i_boundary[ib])  
                          used_edges.append(False)  
                     break  
           if not found:  
                raise ValueError("loop is not closed.")  
        if not min(used_edges):  
           raise ValueError("loop is not closed. Surface is missing.")  
1148      def __len__(self):      def __len__(self):
1149         """         """
1150         return the number of curves in the SurfaceLoop         return the number of curves in the SurfaceLoop
# Line 1390  class Volume(Manifold3D, Primitive): Line 1346  class Volume(Manifold3D, Primitive):
1346          for h in self.getHoles(): out+=h.getSurfaces()          for h in self.getHoles(): out+=h.getSurfaces()
1347          return out          return out
1348    
1349  class PropertySet(PrimitiveBase):  class PropertySet(Primitive, PrimitiveBase):
1350      """      """
1351      defines a group L{PrimitiveBase} objects.      defines a group L{Primitive} which can be accessed through a name
1352      """      """
1353      def __init__(self,tag=None,*items):      def __init__(self,name,*items):
1354         super(PropertySet, self).__init__()         Primitive.__init__(self)
1355         self.__items=items         if len(items)==0:
1356         self.__tag=tag            raise ValueError("at least one item must be give.")
1357           if isinstance(items[0] ,Manifold1D):
1358                dim=1
1359           elif isinstance(items[0] ,Manifold2D):
1360                dim=2
1361           elif isinstance(items[0] ,Manifold3D):
1362               dim=3
1363           else:
1364               dim=0
1365           self.__dim=dim
1366           self.clearItems()
1367           self.addItem(*items)
1368           self.setName(name)
1369        def __repr__(self):
1370           """
1371           returns a string representation
1372           """
1373           return "%s(%s)"%(self.getName(),self.getID())
1374        def getManifoldClass(self):
1375            """
1376            returns the manifold class expected from items
1377            """
1378            d=self.getDim()
1379            if d==0:
1380               return Point
1381            elif d==1:
1382               return Manifold1D
1383            elif d==2:
1384               return Manifold2D
1385            else:
1386               return Manifold3D
1387        def getDim(self):
1388            """
1389            returns the dimension of the
1390            """
1391            return self.__dim
1392        def getName(self):
1393            """
1394            returns the name of the set
1395            """
1396            return self.__name
1397        def setName(self,name=None):
1398            """
1399            sets the name. If no name is given the id is used.
1400            """
1401            self.__name=str(name)
1402        def addItem(self,*items):
1403            """
1404            adds items. An item my be any L{Primitive} but no L{PropertySet}
1405            """
1406            m=self.getManifoldClass()
1407            for i in items:
1408                if not i in self.__items:
1409                   if not isinstance(i, m):
1410                      raise TypeError("argument %s is not a %s class object."%(i, m.__name__))
1411                   self.__items.append(i)
1412        def getItems(self):
1413            """
1414            returns the list of items
1415            """
1416            return self.__items
1417    
1418        def clearItems(self):
1419            """
1420            clears the list of items
1421            """
1422            self.__items=[]
1423      def collectPrimitiveBases(self):      def collectPrimitiveBases(self):
1424          out=[self]+self.getBoundaryLoop().collectPrimitiveBases()          """
1425          for i in self.getHoles(): out+=i.collectPrimitiveBases()          returns primitives used to construct the PropertySet
1426            """
1427            out=[self]
1428            for i in self.getItems(): out+=i.collectPrimitiveBases()
1429          return out          return out
1430    
1431        def getGmshCommand(self,scaling_factor=1.):
1432            """
1433            returns the Gmsh command(s) to create the primitive
1434            """
1435            k=self.getDim()
1436            out="Physical "
1437            if k==0:
1438                out+="Point"
1439            elif k==1:
1440                out+="Line"
1441            elif k==2:
1442                out+="Surface"
1443            else:
1444                out+="Volume"
1445            out2=""
1446            for i in self.getItems():
1447                if len(out2)>0:
1448                    out2+=", %s"%i.getDirectedID()
1449                else:
1450                    out2="%s"%i.getDirectedID()
1451            out+="(" + str(self.getID()) + ") = {"+out2+"};"
1452            return out
1453    
1454        def getTag(self):
1455             """
1456             returns the tag used for this
1457             """
1458             return self.getID()

Legend:
Removed from v.931  
changed lines
  Added in v.944

  ViewVC Help
Powered by ViewVC 1.1.26