~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Tina6/tina-libs/tina/file/fileGeom2_read.c

Version: ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /**********
  2  * 
  3  * Copyright (c) 2003, Division of Imaging Science and Biomedical Engineering,
  4  * University of Manchester, UK.  All rights reserved.
  5  * 
  6  * Redistribution and use in source and binary forms, with or without modification, 
  7  * are permitted provided that the following conditions are met:
  8  * 
  9  *   . Redistributions of source code must retain the above copyright notice, 
 10  *     this list of conditions and the following disclaimer.
 11  *    
 12  *   . Redistributions in binary form must reproduce the above copyright notice,
 13  *     this list of conditions and the following disclaimer in the documentation 
 14  *     and/or other materials provided with the distribution.
 15  * 
 16  *   . Neither the name of the University of Manchester nor the names of its
 17  *     contributors may be used to endorse or promote products derived from this 
 18  *     software without specific prior written permission.
 19  * 
 20  * 
 21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
 25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 31  * POSSIBILITY OF SUCH DAMAGE.
 32  *
 33  **********
 34  * 
 35  * Program :    TINA
 36  * File    :  $Source: /home/tina/cvs/tina-libs/tina/file/fileGeom2_read.c,v $
 37  * Date    :  $Date: 2003/09/22 16:09:01 $
 38  * Version :  $Revision: 1.3 $
 39  * CVS Id  :  $Id: fileGeom2_read.c,v 1.3 2003/09/22 16:09:01 tony Exp $
 40  *
 41  * Author  :  Legacy TINA
 42  *
 43  * Notes   :
 44  * 
 45  *  
 46  *********
 47 */
 48 
 49 #include "fileGeom2_read.h"
 50 
 51 #if HAVE_CONFIG_H
 52   #include <config.h>
 53 #endif
 54 
 55 #include <stdio.h>
 56 #include <tina/sys/sysPro.h>
 57 #include <tina/sys/sysDef.h>
 58 #include <tina/math/mathPro.h>
 59 #include <tina/math/mathDef.h>
 60 #include <tina/geometry/geomDef.h>
 61 #include <tina/geometry/geomPro.h>
 62 #include <tina/vision/visDef.h>
 63 #include <tina/vision/visPro.h>
 64 #include <tina/file/fileUtil_io.h>
 65 
 66 static Line2 *line2_sscanf(char *str)
 67 {
 68     int     label;
 69     Vec2    p1 = {Vec2_id};
 70     Vec2    p2 = {Vec2_id};
 71     Line2  *line;
 72 
 73     if (sscanf(str, "%*s %d %*d %*f %f %f %*f %f %f %*f ",
 74                &label,
 75                &vec2_x(p1), &vec2_y(p1),
 76                &vec2_x(p2), &vec2_y(p2)) != 5)
 77         return (NULL);
 78 
 79     line = line2_make(p1, p2, FROM_FILE);
 80     line->label = label;
 81     return (line);
 82 }
 83 
 84 static Conic *ellipse2_sscanf(char *str)
 85 {
 86     int     label;
 87     Vec2    center = {Vec2_id};
 88     float   theta, alpha, beta, t1, t2;
 89     Conic  *conic;
 90 
 91 
 92     if (sscanf(str, "%*s %d %f %f %*f %*f %*f %*f %*f %*f %*f %f %f %f %f %f",
 93                &label,
 94                &vec2_x(center), &vec2_y(center),
 95                &theta, &alpha, &beta, &t1, &t2) != 8)
 96         return (NULL);
 97     conic = conic_make(ELLIPSE, center, theta, alpha, beta, t1, t2, 0);
 98     conic->label = label;
 99     return (conic);
100 }
101 
102 List   *geom2_read_fp(FILE * fp)
103 {
104     void   *geom;
105     char    str[512];
106     char    type_s[2];
107     List   *list = NULL;
108     int     type;
109 
110     while (fgets(str, 512, fp) != NULL)
111     {
112         (void) sscanf(str, "%s", type_s);
113         switch (type_s[0])
114         {
115         case 'S':               /* straight line */
116             geom = (void *) line2_sscanf(str);
117             type = LINE2;
118             break;
119         case 'E':               /* ellipse section */
120             geom = (void *) ellipse2_sscanf(str);
121             type = CONIC2;
122             break;
123         default:
124             continue;
125         }
126         if (geom != NULL)
127             list = ref_addtostart(list, geom, type);
128     }
129 
130     return (list_reverse(list));
131 }
132 
133 List   *geom2_read(char *pathname)
134 {
135     char    temps[256];
136     List   *geom;
137     FILE   *fp;
138 
139     if ((fp = fopen(pathname, "r")) == NULL)
140     {
141         (void) string_append(temps, "can not open file ", pathname, 0);
142         error(temps, non_fatal);
143         return (NULL);
144     }
145     geom = geom2_read_fp(fp);
146     (void) fclose(fp);
147     return (geom);
148 }
149 
150 List   *line2_read_geom(char *pathname) /* historical */
151 
152 {
153     return (geom2_read(pathname));
154 }
155 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.