[BACK]Return to face_cardinalities.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Math_Lib / Supports

Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Supports/face_cardinalities.adb, Revision 1.1

1.1     ! maekawa     1: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
        !             2: with Integer_Face_Enumerators;
        !             3: with Floating_Face_Enumerators;
        !             4:
        !             5: package body Face_Cardinalities is
        !             6:
        !             7:   function fvector ( pts : in Standard_Integer_VecVecs.VecVec )
        !             8:                    return Vector is
        !             9:
        !            10:   -- ALGORITHM : plain enumeration of vertices, edges, k-faces...
        !            11:
        !            12:     use Integer_Face_Enumerators;
        !            13:
        !            14:     n : constant natural := pts(pts'first).all'length;
        !            15:     f : Vector(-1..n);
        !            16:
        !            17:     procedure Count_Vertex ( i : in integer; cont : out boolean ) is
        !            18:     begin
        !            19:       f(0) := f(0) + 1;
        !            20:       cont := true;
        !            21:     end Count_Vertex;
        !            22:     procedure Count_Vertices is new Enumerate_Vertices(Count_Vertex);
        !            23:
        !            24:     procedure Count_Edge ( i,j : in integer; cont : out boolean ) is
        !            25:     begin
        !            26:       f(1) := f(1) + 1;
        !            27:       cont := true;
        !            28:     end Count_Edge;
        !            29:     procedure Count_Edges is new Enumerate_Edges(Count_Edge);
        !            30:
        !            31:     procedure Count_Face ( face : in Vector; cont : out boolean ) is
        !            32:     begin
        !            33:       f(face'length-1) := f(face'length-1) + 1;
        !            34:       cont := true;
        !            35:     end Count_Face;
        !            36:     procedure Count_Faces is new Enumerate_Faces(Count_Face);
        !            37:
        !            38:   begin
        !            39:     f(-1) := 1;
        !            40:     f(0..n) := (0..n => 0);
        !            41:     Count_Vertices(pts);
        !            42:     Count_Edges(pts);
        !            43:     for i in 2..(n-1) loop
        !            44:       Count_Faces(i,pts);
        !            45:       exit when (f(i) = 0);
        !            46:     end loop;
        !            47:     if f(n-1) > 1
        !            48:      then f(n) := 1;
        !            49:     end if;
        !            50:     return f;
        !            51:   end fvector;
        !            52:
        !            53:   function fvector ( pts : in Standard_Floating_VecVecs.VecVec )
        !            54:                    return Vector is
        !            55:
        !            56:   -- ALGORITHM : plain enumeration of vertices, edges, k-faces...
        !            57:
        !            58:     use Floating_Face_Enumerators;
        !            59:
        !            60:     n : constant natural := pts(pts'first).all'length;
        !            61:     f : Vector(-1..n);
        !            62:     tol : constant double_float := 10.0**(-8); --10.0**(-12);
        !            63:
        !            64:     procedure Count_Vertex ( i : in integer; cont : out boolean ) is
        !            65:     begin
        !            66:       f(0) := f(0) + 1;
        !            67:       cont := true;
        !            68:     end Count_Vertex;
        !            69:     procedure Count_Vertices is new Enumerate_Vertices(Count_Vertex);
        !            70:
        !            71:     procedure Count_Edge ( i,j : in integer; cont : out boolean ) is
        !            72:     begin
        !            73:       f(1) := f(1) + 1;
        !            74:       cont := true;
        !            75:     end Count_Edge;
        !            76:     procedure Count_Edges is new Enumerate_Edges(Count_Edge);
        !            77:
        !            78:     procedure Count_Face ( face : in Vector; cont : out boolean ) is
        !            79:     begin
        !            80:       f(face'length-1) := f(face'length-1) + 1;
        !            81:       cont := true;
        !            82:     end Count_Face;
        !            83:     procedure Count_Faces is new Enumerate_Faces(Count_Face);
        !            84:
        !            85:   begin
        !            86:     f(-1) := 1;
        !            87:     f(0..n) := (0..n => 0);
        !            88:     Count_Vertices(pts,tol);
        !            89:     Count_Edges(pts,tol);
        !            90:     for i in 2..(n-1) loop
        !            91:       Count_Faces(i,pts,tol);
        !            92:       exit when (f(i) = 0);
        !            93:     end loop;
        !            94:     if f(n-1) > 1
        !            95:      then f(n) := 1;
        !            96:     end if;
        !            97:     return f;
        !            98:   end fvector;
        !            99:
        !           100: end Face_Cardinalities;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>