/[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 999 by gross, Tue Feb 27 08:12: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 of 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 items
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):
1398            """
1399            sets the name.
1400            """
1401            self.__name=str(name)
1402            
1403        def addItem(self,*items):
1404            """
1405            adds items. An item my be any L{Primitive} but no L{PropertySet}
1406            """
1407            m=self.getManifoldClass()
1408            for i in items:
1409                if not i in self.__items:
1410                   if not isinstance(i, m):
1411                      raise TypeError("argument %s is not a %s class object."%(i, m.__name__))
1412                   self.__items.append(i)
1413        def getItems(self):
1414            """
1415            returns the list of items
1416            """
1417            return self.__items
1418    
1419        def clearItems(self):
1420            """
1421            clears the list of items
1422            """
1423            self.__items=[]
1424      def collectPrimitiveBases(self):      def collectPrimitiveBases(self):
1425          out=[self]+self.getBoundaryLoop().collectPrimitiveBases()          """
1426          for i in self.getHoles(): out+=i.collectPrimitiveBases()          returns primitives used to construct the PropertySet
1427            """
1428            out=[self]
1429            for i in self.getItems(): out+=i.collectPrimitiveBases()
1430          return out          return out
1431    
1432        def getGmshCommand(self,scaling_factor=1.):
1433            """
1434            returns the Gmsh command(s) to create the primitive
1435            """
1436            k=self.getDim()
1437            out="Physical "
1438            if k==0:
1439                out+="Point"
1440            elif k==1:
1441                out+="Line"
1442            elif k==2:
1443                out+="Surface"
1444            else:
1445                out+="Volume"
1446            out2=""
1447            for i in self.getItems():
1448                if len(out2)>0:
1449                    out2+=", %s"%i.getDirectedID()
1450                else:
1451                    out2="%s"%i.getDirectedID()
1452            out+="(" + str(self.getID()) + ") = {"+out2+"};"
1453            return out
1454    
1455        def getTag(self):
1456             """
1457             returns the tag used for this property set
1458             """
1459             return self.getID()

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

  ViewVC Help
Powered by ViewVC 1.1.26