<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Progressive surfaces</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="GTS Library Reference Manual" HREF="book1.html"><LINK REL="UP" TITLE="Progressive and Hierarchical surfaces" HREF="c15264.html"><LINK REL="PREVIOUS" TITLE="Vertex split" HREF="gts-vertex-split.html"><LINK REL="NEXT" TITLE="Hierarchical vertex split" HREF="gts-hierarchical-vertex-split.html"><STYLE TYPE="text/css" >.synopsis, .classsynopsis { background: #eeeeee; border: solid 1px #aaaaaa; padding: 0.5em; } .programlisting { background: #eeeeff; border: solid 1px #aaaaff; padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .navigation { background: #ffeeee; border: solid 1px #ffaaaa; margin-top: 0.5em; margin-bottom: 0.5em; } .navigation a { color: #770000; } .navigation a:visited { color: #550000; } .navigation .title { font-size: 200%; }</STYLE ></HEAD ><BODY CLASS="REFENTRY" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><TABLE WIDTH="100%" CLASS="navigation" SUMMARY="Navigation header" CELLPADDING="2" CELLSPACING="2" ><TR VALIGN="middle" ><TD ><A ACCESSKEY="p" HREF="gts-vertex-split.html" ><IMG SRC="left.png" WIDTH="24" HEIGHT="24" BORDER="0" ALT="Prev"></A ></TD ><TD ><A ACCESSKEY="u" HREF="c15264.html" ><IMG SRC="up.png" WIDTH="24" HEIGHT="24" BORDER="0" ALT="Up"></A ></TD ><TD ><A ACCESSKEY="h" HREF="book1.html" ><IMG SRC="home.png" WIDTH="24" HEIGHT="24" BORDER="0" ALT="Home"></A ></TD ><TH WIDTH="100%" align="center" >GTS Library Reference Manual</TH ><TD ><A ACCESSKEY="n" HREF="gts-hierarchical-vertex-split.html" ><IMG SRC="right.png" WIDTH="24" HEIGHT="24" BORDER="0" ALT="Next"></A ></TD ></TR ></TABLE ><H1 ><A NAME="GTS-PROGRESSIVE-SURFACES" ></A >Progressive surfaces</H1 ><DIV CLASS="REFNAMEDIV" ><A NAME="AEN15757" ></A ><H2 >Name</H2 >Progressive surfaces -- continuous level-of-detail for surfaces.</DIV ><DIV CLASS="REFSYNOPSISDIV" ><A NAME="AEN15760" ></A ><H2 >Synopsis</H2 ><PRE CLASS="SYNOPSIS" > #include <gts.h> #define <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLASS:CAPS" >GTS_PSURFACE_CLASS</A > (klass) #define <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE:CAPS" >GTS_PSURFACE</A > (obj) #define <A HREF="gts-progressive-surfaces.html#GTS-IS-PSURFACE:CAPS" >GTS_IS_PSURFACE</A > (obj) #define <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-IS-CLOSED:CAPS" >GTS_PSURFACE_IS_CLOSED</A > (ps) <A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" >GtsPSurfaceClass</A >; <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A >; <A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" >GtsPSurfaceClass</A >* <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLASS" >gts_psurface_class</A > (void); <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A >* <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-NEW" >gts_psurface_new</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" >GtsPSurfaceClass</A > *klass, <A HREF="gts-surfaces.html#GTSSURFACE" >GtsSurface</A > *surface, <A HREF="gts-vertex-split.html#GTSSPLITCLASS" >GtsSplitClass</A > *split_class, <A HREF="gts-extended-binary-heaps.html#GTSKEYFUNC" >GtsKeyFunc</A > cost_func, <GTKDOCLINK HREF="GPOINTER" >gpointer</GTKDOCLINK > cost_data, <A HREF="gts-surface-simplification-and-refinement.html#GTSCOARSENFUNC" >GtsCoarsenFunc</A > coarsen_func, <GTKDOCLINK HREF="GPOINTER" >gpointer</GTKDOCLINK > coarsen_data, <A HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC" >GtsStopFunc</A > stop_func, <GTKDOCLINK HREF="GPOINTER" >gpointer</GTKDOCLINK > stop_data, <GTKDOCLINK HREF="GDOUBLE" >gdouble</GTKDOCLINK > minangle); <A HREF="gts-vertex-split.html#GTSSPLIT" >GtsSplit</A >* <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-ADD-VERTEX" >gts_psurface_add_vertex</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps); <A HREF="gts-vertex-split.html#GTSSPLIT" >GtsSplit</A >* <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-REMOVE-VERTEX" >gts_psurface_remove_vertex</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps); <GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-SET-VERTEX-NUMBER" >gts_psurface_set_vertex_number</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps, <GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > n); <GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-GET-VERTEX-NUMBER" >gts_psurface_get_vertex_number</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps); <GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-MIN-VERTEX-NUMBER" >gts_psurface_min_vertex_number</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps); <GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-MAX-VERTEX-NUMBER" >gts_psurface_max_vertex_number</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps); <GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-FOREACH-VERTEX" >gts_psurface_foreach_vertex</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps, <A HREF="gts-surfaces.html#GTSFUNC" >GtsFunc</A > func, <GTKDOCLINK HREF="GPOINTER" >gpointer</GTKDOCLINK > data); <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A >* <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN" >gts_psurface_open</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" >GtsPSurfaceClass</A > *klass, <A HREF="gts-surfaces.html#GTSSURFACE" >GtsSurface</A > *s, <A HREF="gts-vertex-split.html#GTSSPLITCLASS" >GtsSplitClass</A > *split_class, <A HREF="gts-miscellaneous-macros-and-functions.html#GTSFILE" >GtsFile</A > *f); <A HREF="gts-vertex-split.html#GTSSPLIT" >GtsSplit</A >* <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-READ-VERTEX" >gts_psurface_read_vertex</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps, <A HREF="gts-miscellaneous-macros-and-functions.html#GTSFILE" >GtsFile</A > *fp); <GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLOSE" >gts_psurface_close</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps); <GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-WRITE" >gts_psurface_write</A > (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps, <GTKDOCLINK HREF="FILE:CAPS" >FILE</GTKDOCLINK > *fptr);</PRE ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN15824" ></A ><H2 >Description</H2 ><P >Progressive surfaces allow you to control precisely and continuously the level of detail of a <A HREF="gts-surfaces.html#GTSSURFACE" ><SPAN CLASS="TYPE" >GtsSurface</SPAN ></A >. They are built off-line by storing the sequence of edge collapses performed during surface simplification (see <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-NEW" ><CODE CLASS="FUNCTION" >gts_psurface_new()</CODE ></A >). Fast traversal of the pre-built sequence allow on-line selection of the required level of detail.</P ><P >Using the <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-WRITE" ><CODE CLASS="FUNCTION" >gts_psurface_write()</CODE ></A > function a text representation of a progressive surface can be written to a file, pipe or socket. This text representation allows the progressive transmission of a surface, starting with the coarsest representation and progressively refining it as data is read or received (see <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN" ><CODE CLASS="FUNCTION" >gts_psurface_open()</CODE ></A >, <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-READ-VERTEX" ><CODE CLASS="FUNCTION" >gts_psurface_read_vertex()</CODE ></A > and <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLOSE" ><CODE CLASS="FUNCTION" >gts_psurface_close()</CODE ></A > for details).</P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN15840" ></A ><H2 >Details</H2 ><DIV CLASS="REFSECT2" ><A NAME="AEN15842" ></A ><H3 ><A NAME="GTS-PSURFACE-CLASS:CAPS" ></A >GTS_PSURFACE_CLASS()</H3 ><PRE CLASS="PROGRAMLISTING" >#define GTS_PSURFACE_CLASS(klass)</PRE ><P >Casts <CODE CLASS="PARAMETER" >klass</CODE > to <A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" ><SPAN CLASS="TYPE" >GtsPSurfaceClass</SPAN ></A >.</P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15853"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >klass</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >a descendant of <A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" ><SPAN CLASS="TYPE" >GtsPSurfaceClass</SPAN ></A >. </P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN15860" ></A ><H3 ><A NAME="GTS-PSURFACE:CAPS" ></A >GTS_PSURFACE()</H3 ><PRE CLASS="PROGRAMLISTING" >#define GTS_PSURFACE(obj)</PRE ><P >Casts <CODE CLASS="PARAMETER" >obj</CODE > to <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >.</P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15871"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >obj</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >a descendant of <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >. </P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN15878" ></A ><H3 ><A NAME="GTS-IS-PSURFACE:CAPS" ></A >GTS_IS_PSURFACE()</H3 ><PRE CLASS="PROGRAMLISTING" >#define GTS_IS_PSURFACE(obj)</PRE ><P >Evaluates to <TT CLASS="LITERAL" >TRUE</TT > if <CODE CLASS="PARAMETER" >obj</CODE > is a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >, <TT CLASS="LITERAL" >FALSE</TT > otherwise.</P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15891"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >obj</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >a pointer to test. </P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN15896" ></A ><H3 ><A NAME="GTS-PSURFACE-IS-CLOSED:CAPS" ></A >GTS_PSURFACE_IS_CLOSED()</H3 ><PRE CLASS="PROGRAMLISTING" >#define GTS_PSURFACE_IS_CLOSED(ps) (!(ps)->vertices)</PRE ><P >Evaluates to <TT CLASS="LITERAL" >TRUE</TT > if <CODE CLASS="PARAMETER" >ps</CODE > has not been created with <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN" ><CODE CLASS="FUNCTION" >gts_psurface_open()</CODE ></A > or if it has been closed using <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLOSE" ><CODE CLASS="FUNCTION" >gts_psurface_close()</CODE ></A >.</P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15910"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >. </P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN15917" ></A ><H3 ><A NAME="GTSPSURFACECLASS" ></A >GtsPSurfaceClass</H3 ><PRE CLASS="PROGRAMLISTING" >typedef struct { GtsObjectClass parent_class; } GtsPSurfaceClass;</PRE ><P >The progressive surface class derived from <A HREF="gts-object-class.html#GTSOBJECTCLASS" ><SPAN CLASS="TYPE" >GtsObjectClass</SPAN ></A >.</P ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN15926" ></A ><H3 ><A NAME="GTSPSURFACE" ></A >GtsPSurface</H3 ><PRE CLASS="PROGRAMLISTING" >typedef struct { GtsObject object; GtsSurface * s; GPtrArray * split; GtsSplitClass * split_class; guint pos, min; GPtrArray * vertices; GPtrArray * faces; } GtsPSurface;</PRE ><P >The progressive surface object. derived from <A HREF="gts-object-class.html#GTSOBJECT" ><SPAN CLASS="TYPE" >GtsObject</SPAN ></A >. The field <CODE CLASS="PARAMETER" >s</CODE > is the <A HREF="gts-surfaces.html#GTSSURFACE" ><SPAN CLASS="TYPE" >GtsSurface</SPAN ></A > being refined or coarsened by operations on the progressive surface. All the other fields must be considered private and accessed only through the following functions.</P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15939"><SPAN STYLE="white-space: nowrap" ><A HREF="gts-object-class.html#GTSOBJECT" >GtsObject</A > <CODE CLASS="STRUCTFIELD" >object</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >The parent object.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15945"><SPAN STYLE="white-space: nowrap" ><A HREF="gts-surfaces.html#GTSSURFACE" >GtsSurface</A > *<CODE CLASS="STRUCTFIELD" >s</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >The <A HREF="gts-surfaces.html#GTSSURFACE" ><SPAN CLASS="TYPE" >GtsSurface</SPAN ></A > being refined or coarsened by operations on the progressive surface.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15953"><SPAN STYLE="white-space: nowrap" ><GTKDOCLINK HREF="GPTRARRAY" >GPtrArray</GTKDOCLINK > *<CODE CLASS="STRUCTFIELD" >split</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P ></P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15959"><SPAN STYLE="white-space: nowrap" ><A HREF="gts-vertex-split.html#GTSSPLITCLASS" >GtsSplitClass</A > *<CODE CLASS="STRUCTFIELD" >split_class</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P ></P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15965"><SPAN STYLE="white-space: nowrap" ><GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > <CODE CLASS="STRUCTFIELD" >pos</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P ></P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15971"><SPAN STYLE="white-space: nowrap" ><GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > <CODE CLASS="STRUCTFIELD" >min</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P ></P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15977"><SPAN STYLE="white-space: nowrap" ><GTKDOCLINK HREF="GPTRARRAY" >GPtrArray</GTKDOCLINK > *<CODE CLASS="STRUCTFIELD" >vertices</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P ></P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15983"><SPAN STYLE="white-space: nowrap" ><GTKDOCLINK HREF="GPTRARRAY" >GPtrArray</GTKDOCLINK > *<CODE CLASS="STRUCTFIELD" >faces</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P ></P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN15989" ></A ><H3 ><A NAME="GTS-PSURFACE-CLASS" ></A >gts_psurface_class ()</H3 ><PRE CLASS="PROGRAMLISTING" ><A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" >GtsPSurfaceClass</A >* gts_psurface_class (void);</PRE ><P ></P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN15999"><SPAN STYLE="white-space: nowrap" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the <A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" ><SPAN CLASS="TYPE" >GtsPSurfaceClass</SPAN ></A >.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16006" ></A ><H3 ><A NAME="GTS-PSURFACE-NEW" ></A >gts_psurface_new ()</H3 ><PRE CLASS="PROGRAMLISTING" ><A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A >* gts_psurface_new (<A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" >GtsPSurfaceClass</A > *klass, <A HREF="gts-surfaces.html#GTSSURFACE" >GtsSurface</A > *surface, <A HREF="gts-vertex-split.html#GTSSPLITCLASS" >GtsSplitClass</A > *split_class, <A HREF="gts-extended-binary-heaps.html#GTSKEYFUNC" >GtsKeyFunc</A > cost_func, <GTKDOCLINK HREF="GPOINTER" >gpointer</GTKDOCLINK > cost_data, <A HREF="gts-surface-simplification-and-refinement.html#GTSCOARSENFUNC" >GtsCoarsenFunc</A > coarsen_func, <GTKDOCLINK HREF="GPOINTER" >gpointer</GTKDOCLINK > coarsen_data, <A HREF="gts-surface-simplification-and-refinement.html#GTSSTOPFUNC" >GtsStopFunc</A > stop_func, <GTKDOCLINK HREF="GPOINTER" >gpointer</GTKDOCLINK > stop_data, <GTKDOCLINK HREF="GDOUBLE" >gdouble</GTKDOCLINK > minangle);</PRE ><P >This function works in exactly the same way as the <A HREF="gts-surface-simplification-and-refinement.html#GTS-SURFACE-COARSEN" ><CODE CLASS="FUNCTION" >gts_surface_coarsen()</CODE ></A > function, except that the history of edge collapse is saved in an array of <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > objects. This allows for dynamic continuous multiresolution control of the input <CODE CLASS="PARAMETER" >surface</CODE >.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16031"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >klass</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" ><SPAN CLASS="TYPE" >GtsPSurfaceClass</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16038"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >surface</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-surfaces.html#GTSSURFACE" ><SPAN CLASS="TYPE" >GtsSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16045"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >split_class</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-vertex-split.html#GTSSPLITCLASS" ><SPAN CLASS="TYPE" >GtsSplitClass</SPAN ></A > to use for the new progressive surface.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16052"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >cost_func</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > cost function for the edge collapse algorithm.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16057"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >cost_data</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > data to pass to <CODE CLASS="PARAMETER" >cost_func</CODE >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16063"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >coarsen_func</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the function returning the vertex replacement for the edge collapse.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16068"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >coarsen_data</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > data to pass to <CODE CLASS="PARAMETER" >coarsen_func</CODE >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16074"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >stop_func</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the function to call to decide whether to stop the coarsening process.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16079"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >stop_data</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > data to pass to <CODE CLASS="PARAMETER" >stop_func</CODE >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16085"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >minangle</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the minimum angle allowable between two neighboring triangles. This is used to avoid introducing folds in the mesh during simplification.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16090"><SPAN STYLE="white-space: nowrap" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a new progressive surface.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16095" ></A ><H3 ><A NAME="GTS-PSURFACE-ADD-VERTEX" ></A >gts_psurface_add_vertex ()</H3 ><PRE CLASS="PROGRAMLISTING" ><A HREF="gts-vertex-split.html#GTSSPLIT" >GtsSplit</A >* gts_psurface_add_vertex (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps);</PRE ><P >Adds a vertex to the progressive surface <CODE CLASS="PARAMETER" >ps</CODE > by expanding the next available <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A >.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16109"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16116"><SPAN STYLE="white-space: nowrap" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the expanded <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > or <TT CLASS="LITERAL" >NULL</TT > if all the <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > have already been expanded.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16126" ></A ><H3 ><A NAME="GTS-PSURFACE-REMOVE-VERTEX" ></A >gts_psurface_remove_vertex ()</H3 ><PRE CLASS="PROGRAMLISTING" ><A HREF="gts-vertex-split.html#GTSSPLIT" >GtsSplit</A >* gts_psurface_remove_vertex (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps);</PRE ><P >Removes one vertex from the progressive surface <CODE CLASS="PARAMETER" >ps</CODE > by collapsing the first available <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A >.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16140"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16147"><SPAN STYLE="white-space: nowrap" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the collapsed <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > or <TT CLASS="LITERAL" >NULL</TT > if all the <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > have already been collapsed.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16157" ></A ><H3 ><A NAME="GTS-PSURFACE-SET-VERTEX-NUMBER" ></A >gts_psurface_set_vertex_number ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > gts_psurface_set_vertex_number (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps, <GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > n);</PRE ><P >Performs the required number of collapses or expansions to set the number of vertices of <CODE CLASS="PARAMETER" >ps</CODE > to <CODE CLASS="PARAMETER" >n</CODE >.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16171"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16178"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >n</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a number of vertices.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16183" ></A ><H3 ><A NAME="GTS-PSURFACE-GET-VERTEX-NUMBER" ></A >gts_psurface_get_vertex_number ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > gts_psurface_get_vertex_number (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps);</PRE ><P ></P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16194"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16201"><SPAN STYLE="white-space: nowrap" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the current number of vertices of <CODE CLASS="PARAMETER" >ps</CODE >.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16207" ></A ><H3 ><A NAME="GTS-PSURFACE-MIN-VERTEX-NUMBER" ></A >gts_psurface_min_vertex_number ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > gts_psurface_min_vertex_number (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps);</PRE ><P ></P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16218"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16225"><SPAN STYLE="white-space: nowrap" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the minimum number of vertices of <CODE CLASS="PARAMETER" >ps</CODE > i.e. the number of vertices if all the <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > were collapsed.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16233" ></A ><H3 ><A NAME="GTS-PSURFACE-MAX-VERTEX-NUMBER" ></A >gts_psurface_max_vertex_number ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > gts_psurface_max_vertex_number (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps);</PRE ><P ></P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16244"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16251"><SPAN STYLE="white-space: nowrap" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the maximum number of vertices of <CODE CLASS="PARAMETER" >ps</CODE > i.e. the number of vertices if all the <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > were expanded.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16259" ></A ><H3 ><A NAME="GTS-PSURFACE-FOREACH-VERTEX" ></A >gts_psurface_foreach_vertex ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > gts_psurface_foreach_vertex (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps, <A HREF="gts-surfaces.html#GTSFUNC" >GtsFunc</A > func, <GTKDOCLINK HREF="GPOINTER" >gpointer</GTKDOCLINK > data);</PRE ><P >Calls <CODE CLASS="PARAMETER" >func</CODE > for each (potential) vertex of <CODE CLASS="PARAMETER" >ps</CODE >, whether actually used or not. The vertices are called in the order they were created during the edge collapse operation.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16274"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16281"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >func</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a function to call for each vertex of <CODE CLASS="PARAMETER" >ps</CODE >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16287"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >data</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > data to be passed to <CODE CLASS="PARAMETER" >func</CODE >.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16293" ></A ><H3 ><A NAME="GTS-PSURFACE-OPEN" ></A >gts_psurface_open ()</H3 ><PRE CLASS="PROGRAMLISTING" ><A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A >* gts_psurface_open (<A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" >GtsPSurfaceClass</A > *klass, <A HREF="gts-surfaces.html#GTSSURFACE" >GtsSurface</A > *s, <A HREF="gts-vertex-split.html#GTSSPLITCLASS" >GtsSplitClass</A > *split_class, <A HREF="gts-miscellaneous-macros-and-functions.html#GTSFILE" >GtsFile</A > *f);</PRE ><P >Creates a new <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A > prepared for input from the file <CODE CLASS="PARAMETER" >f</CODE > containing a valid GTS representation of a progressive surface. The initial shape of the progressive surface is loaded into <CODE CLASS="PARAMETER" >s</CODE >.</P ><P >Before being usable as such this progressive surface must be closed using <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-CLOSE" ><CODE CLASS="FUNCTION" >gts_psurface_close()</CODE ></A >. While open however, the functions <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-GET-VERTEX-NUMBER" ><CODE CLASS="FUNCTION" >gts_psurface_get_vertex_number()</CODE ></A >, <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-MIN-VERTEX-NUMBER" ><CODE CLASS="FUNCTION" >gts_psurface_min_vertex_number()</CODE ></A > and <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-MAX-VERTEX-NUMBER" ><CODE CLASS="FUNCTION" >gts_psurface_max_vertex_number()</CODE ></A > can still be used.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16320"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >klass</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACECLASS" ><SPAN CLASS="TYPE" >GtsPSurfaceClass</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16327"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >s</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-surfaces.html#GTSSURFACE" ><SPAN CLASS="TYPE" >GtsSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16334"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >split_class</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-vertex-split.html#GTSSPLITCLASS" ><SPAN CLASS="TYPE" >GtsSplitClass</SPAN ></A > to use for the <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16343"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >f</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-miscellaneous-macros-and-functions.html#GTSFILE" ><SPAN CLASS="TYPE" >GtsFile</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16350"><SPAN STYLE="white-space: nowrap" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a new <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A > or <TT CLASS="LITERAL" >NULL</TT > if there was a format error while reading the file, in which case <CODE CLASS="PARAMETER" >f</CODE > contains information about the error.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16359" ></A ><H3 ><A NAME="GTS-PSURFACE-READ-VERTEX" ></A >gts_psurface_read_vertex ()</H3 ><PRE CLASS="PROGRAMLISTING" ><A HREF="gts-vertex-split.html#GTSSPLIT" >GtsSplit</A >* gts_psurface_read_vertex (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps, <A HREF="gts-miscellaneous-macros-and-functions.html#GTSFILE" >GtsFile</A > *fp);</PRE ><P >Reads in one vertex split operation from <CODE CLASS="PARAMETER" >fp</CODE > and performs the expansion.</P ><P >If an error occurs while reading the file, the <CODE CLASS="PARAMETER" >error</CODE > field of <CODE CLASS="PARAMETER" >fp</CODE > is set.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16375"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A > prealably created with <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN" ><CODE CLASS="FUNCTION" >gts_psurface_open()</CODE ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16384"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >fp</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-miscellaneous-macros-and-functions.html#GTSFILE" ><SPAN CLASS="TYPE" >GtsFile</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16391"><SPAN STYLE="white-space: nowrap" ><SPAN CLASS="emphasis" ><I CLASS="EMPHASIS" >Returns</I ></SPAN > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > the newly created <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > or <TT CLASS="LITERAL" >NULL</TT > if no vertex split could be read from <CODE CLASS="PARAMETER" >fp</CODE >.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16400" ></A ><H3 ><A NAME="GTS-PSURFACE-CLOSE" ></A >gts_psurface_close ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > gts_psurface_close (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps);</PRE ><P >Closes a progressive surface.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16411"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A > prealably created with <A HREF="gts-progressive-surfaces.html#GTS-PSURFACE-OPEN" ><CODE CLASS="FUNCTION" >gts_psurface_open()</CODE ></A >.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16420" ></A ><H3 ><A NAME="GTS-PSURFACE-WRITE" ></A >gts_psurface_write ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > gts_psurface_write (<A HREF="gts-progressive-surfaces.html#GTSPSURFACE" >GtsPSurface</A > *ps, <GTKDOCLINK HREF="FILE:CAPS" >FILE</GTKDOCLINK > *fptr);</PRE ><P >Writes to <CODE CLASS="PARAMETER" >fptr</CODE > a GTS progressive surface description.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16433"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >ps</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-progressive-surfaces.html#GTSPSURFACE" ><SPAN CLASS="TYPE" >GtsPSurface</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16440"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >fptr</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a file pointer.</P ></TD ></TR ></TBODY ></TABLE ></DIV ></DIV ><TABLE CLASS="navigation" WIDTH="100%" SUMMARY="Navigation footer" CELLPADDING="2" CELLSPACING="2" ><TR VALIGN="middle" ><TD ALIGN="left" ><A ACCESSKEY="p" HREF="gts-vertex-split.html" ><B ><<< Vertex split</B ></A ></TD ><TD ALIGN="right" ><A ACCESSKEY="n" HREF="gts-hierarchical-vertex-split.html" ><B >Hierarchical vertex split >>></B ></A ></TD ></TR ></TABLE ></BODY ></HTML >