[BACK]Return to face_structures.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Dynlift

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Dynlift/face_structures.adb, Revision 1.1

1.1     ! maekawa     1: package body Face_Structures is
        !             2:
        !             3: -- CONSTRUCTOR :
        !             4:
        !             5:   procedure Compute_New_Faces
        !             6:                  ( fs : in out Face_Structure; k,n : in natural;
        !             7:                    point : in out Link_to_Vector; newfs : out Faces ) is
        !             8:
        !             9:     procedure Append ( fc : in VecVec ) is
        !            10:
        !            11:       f : Face;
        !            12:
        !            13:     begin
        !            14:       f.points := Shallow_Create(fc);
        !            15:       Append(res,res_last,f);
        !            16:     end Append;
        !            17:     procedure EnumLis is new Enumerate_Faces_in_List(Append);
        !            18:     procedure EnumTri is new Enumerate_Faces_in_Triangulation(Append);
        !            19:
        !            20:   begin
        !            21:    -- COMPUTE THE NEW FACES AND UPDATE fs :
        !            22:     if Is_Null(fs.t)
        !            23:      then
        !            24:        if Length_Of(fs.l) >= n
        !            25:         then
        !            26:           fs.t := Initial_Triangulation(n,fs.l,point);
        !            27:           if Is_Null(fs.t)
        !            28:            then EnumLis(fs.l,point,k);
        !            29:            else EnumTri(fs.t,point,k);
        !            30:           end if;
        !            31:         else
        !            32:           EnumLis(fs.l,point,k);
        !            33:        end if;
        !            34:      else
        !            35:        declare
        !            36:          newt : Triangulation;
        !            37:        begin
        !            38:          point(point'last) := Next_Lifting(fs.t,point.all);
        !            39:          Update(fs.t,point,newt);
        !            40:          Enumtri(newt,point,k);
        !            41:        end;
        !            42:     end if;
        !            43:     Append(fs.l,fs.last,point);
        !            44:     newfs := res;
        !            45:   end Compute_New_Faces;
        !            46:
        !            47: -- FLATTENING :
        !            48:
        !            49:   procedure Flatten ( f : in out Face ) is
        !            50:   begin
        !            51:     if f.normal /= null
        !            52:      then f.normal.all := (f.normal'range => 0);
        !            53:           f.normal(f.normal'last) := 1;
        !            54:     end if;
        !            55:     Flatten(f.points);
        !            56:   end Flatten;
        !            57:
        !            58:   procedure Flatten ( fs : in out Faces ) is
        !            59:
        !            60:     tmp : Faces := fs;
        !            61:     f : Face;
        !            62:
        !            63:   begin
        !            64:     while not Is_Null(tmp) loop
        !            65:       f := Head_Of(tmp);
        !            66:       Flatten(f);
        !            67:       Set_Head(tmp,f);
        !            68:       tmp := Tail_Of(tmp);
        !            69:     end loop;
        !            70:   end Flatten;
        !            71:
        !            72:   procedure Flatten ( fs : in out Face_Structure ) is
        !            73:   begin
        !            74:     Flatten(fs.l); Flatten(fs.t); Flatten(fs.f);
        !            75:   end Flatten;
        !            76:
        !            77:   procedure Flatten ( fs : in out Array_of_Face_Structures ) is
        !            78:   begin
        !            79:     for i in fs'range loop
        !            80:       Flatten(fs(i));
        !            81:     end loop;
        !            82:   end Flatten;
        !            83:
        !            84: -- SELECTORS :
        !            85:
        !            86:   function Is_In ( fs : Face_Structure; point : vector ) return boolean is
        !            87:   begin
        !            88:     if Is_Null(fs.t)
        !            89:      then return Is_In(fs.l,point);
        !            90:      else return Is_In(fs.t,point);
        !            91:     end if;
        !            92:   end Is_In;
        !            93:
        !            94: -- DESTRUCTORS :
        !            95:
        !            96:   procedure Deep_Clear ( fs : in out Face_Structure ) is
        !            97:   begin
        !            98:     Deep_Clear(fs.l); Deep_Clear(fs.f); Deep_Clear(fs.t);
        !            99:   end Deep_Clear;
        !           100:
        !           101:   procedure Shallow_Clear ( fs : in out Face_Structure ) is
        !           102:   begin
        !           103:     Shallow_Clear(fs.l); Shallow_Clear(fs.f); Shallow_Clear(fs.t);
        !           104:   end Shallow_Clear;
        !           105:
        !           106:   procedure Deep_Clear ( fs : in out Array_of_Face_Structures ) is
        !           107:   begin
        !           108:     for i in fs'range loop
        !           109:       Deep_Clear(fs(i));
        !           110:     end loop;
        !           111:   end Deep_Clear;
        !           112:
        !           113:   procedure Shallow_Clear ( fs : in out Array_of_Face_Structures );
        !           114:   begin
        !           115:     for i in fs'range loop
        !           116:       Shallow_Clear(fs(i));
        !           117:     end loop;
        !           118:   end Shallow_Clear;
        !           119:
        !           120: end Face_Structures;

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