<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Hierarchical vertex split</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="Progressive surfaces" HREF="gts-progressive-surfaces.html"><LINK REL="NEXT" TITLE="Hierarchical surfaces" HREF="gts-hierarchical-surfaces.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-progressive-surfaces.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-surfaces.html" ><IMG SRC="right.png" WIDTH="24" HEIGHT="24" BORDER="0" ALT="Next"></A ></TD ></TR ></TABLE ><H1 ><A NAME="GTS-HIERARCHICAL-VERTEX-SPLIT" ></A >Hierarchical vertex split</H1 ><DIV CLASS="REFNAMEDIV" ><A NAME="AEN16450" ></A ><H2 >Name</H2 >Hierarchical vertex split -- hierarchical extension of the vertex split.</DIV ><DIV CLASS="REFSYNOPSISDIV" ><A NAME="AEN16453" ></A ><H2 >Synopsis</H2 ><PRE CLASS="SYNOPSIS" > #include <gts.h> #define <A HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-CLASS:CAPS" >GTS_HSPLIT_CLASS</A > (klass) #define <A HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT:CAPS" >GTS_HSPLIT</A > (obj) #define <A HREF="gts-hierarchical-vertex-split.html#GTS-IS-HSPLIT:CAPS" >GTS_IS_HSPLIT</A > (obj) <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS" >GtsHSplitClass</A >; <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A >; <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS" >GtsHSplitClass</A >* <A HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-CLASS" >gts_hsplit_class</A > (void); <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A >* <A HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-NEW" >gts_hsplit_new</A > (<A HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS" >GtsHSplitClass</A > *klass, <A HREF="gts-vertex-split.html#GTSSPLIT" >GtsSplit</A > *vs); <GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > <A HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-COLLAPSE" >gts_hsplit_collapse</A > (<A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A > *hs, <A HREF="gts-hierarchical-surfaces.html#GTSHSURFACE" >GtsHSurface</A > *hsurface); <GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > <A HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-EXPAND" >gts_hsplit_expand</A > (<A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A > *hs, <A HREF="gts-hierarchical-surfaces.html#GTSHSURFACE" >GtsHSurface</A > *hsurface); <GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > <A HREF="gts-hierarchical-vertex-split.html#GTS-HSPLIT-FORCE-EXPAND" >gts_hsplit_force_expand</A > (<A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A > *hs, <A HREF="gts-hierarchical-surfaces.html#GTSHSURFACE" >GtsHSurface</A > *hsurface);</PRE ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN16479" ></A ><H2 >Description</H2 ><P >Hierarchical vertex splits are the building blocks of hierarchical surfaces. They are derived from <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > objects but add pointers to their parents in the vertex split tree and information on the state (collapsed or expanded) of their children.</P ><P >Together with <A HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR" ><SPAN CLASS="TYPE" >GtsEHeapPair</SPAN ></A > fields these informations allow to manage any valid sequence of expansions or collapses.</P ></DIV ><DIV CLASS="REFSECT1" ><A NAME="AEN16487" ></A ><H2 >Details</H2 ><DIV CLASS="REFSECT2" ><A NAME="AEN16489" ></A ><H3 ><A NAME="GTS-HSPLIT-CLASS:CAPS" ></A >GTS_HSPLIT_CLASS()</H3 ><PRE CLASS="PROGRAMLISTING" >#define GTS_HSPLIT_CLASS(klass)</PRE ><P >Casts <CODE CLASS="PARAMETER" >klass</CODE > to <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS" ><SPAN CLASS="TYPE" >GtsHSplitClass</SPAN ></A >.</P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16500"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >klass</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >a descendant of <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS" ><SPAN CLASS="TYPE" >GtsHSplitClass</SPAN ></A >. </P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16507" ></A ><H3 ><A NAME="GTS-HSPLIT:CAPS" ></A >GTS_HSPLIT()</H3 ><PRE CLASS="PROGRAMLISTING" >#define GTS_HSPLIT(obj)</PRE ><P >Casts <CODE CLASS="PARAMETER" >obj</CODE > to <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" ><SPAN CLASS="TYPE" >GtsHSplit</SPAN ></A >.</P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16518"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >obj</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >a descendant of <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" ><SPAN CLASS="TYPE" >GtsHSplit</SPAN ></A >. </P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16525" ></A ><H3 ><A NAME="GTS-IS-HSPLIT:CAPS" ></A >GTS_IS_HSPLIT()</H3 ><PRE CLASS="PROGRAMLISTING" >#define GTS_IS_HSPLIT(obj)</PRE ><P >Evaluates to <TT CLASS="LITERAL" >TRUE</TT > if <CODE CLASS="PARAMETER" >obj</CODE > is a <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" ><SPAN CLASS="TYPE" >GtsHSplit</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="AEN16538"><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="AEN16543" ></A ><H3 ><A NAME="GTSHSPLITCLASS" ></A >GtsHSplitClass</H3 ><PRE CLASS="PROGRAMLISTING" >typedef struct { GtsSplitClass parent_class; } GtsHSplitClass;</PRE ><P >The hierarchical split vertex class derived from <A HREF="gts-vertex-split.html#GTSSPLITCLASS" ><SPAN CLASS="TYPE" >GtsSplitClass</SPAN ></A >.</P ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16552" ></A ><H3 ><A NAME="GTSHSPLIT" ></A >GtsHSplit</H3 ><PRE CLASS="PROGRAMLISTING" >typedef struct { GtsSplit split; GtsEHeapPair * index; GtsHSplit * parent; guint nchild; } GtsHSplit;</PRE ><P >The hierarchical split vertex object.</P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16560"><SPAN STYLE="white-space: nowrap" ><A HREF="gts-vertex-split.html#GTSSPLIT" >GtsSplit</A > <CODE CLASS="STRUCTFIELD" >split</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >The parent object.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16566"><SPAN STYLE="white-space: nowrap" ><A HREF="gts-extended-binary-heaps.html#GTSEHEAPPAIR" >GtsEHeapPair</A > *<CODE CLASS="STRUCTFIELD" >index</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >Used when managing priority heaps for vertex split and collapse.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16572"><SPAN STYLE="white-space: nowrap" ><A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A > *<CODE CLASS="STRUCTFIELD" >parent</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >Parent of this hierarchical split vertex in the split vertex tree.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16578"><SPAN STYLE="white-space: nowrap" ><GTKDOCLINK HREF="GUINT" >guint</GTKDOCLINK > <CODE CLASS="STRUCTFIELD" >nchild</CODE >;</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P >Number of expanded children of this vertex split (0, 1, or 2). </P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16584" ></A ><H3 ><A NAME="GTS-HSPLIT-CLASS" ></A >gts_hsplit_class ()</H3 ><PRE CLASS="PROGRAMLISTING" ><A HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS" >GtsHSplitClass</A >* gts_hsplit_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="AEN16594"><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-hierarchical-vertex-split.html#GTSHSPLITCLASS" ><SPAN CLASS="TYPE" >GtsHSplitClass</SPAN ></A >.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16601" ></A ><H3 ><A NAME="GTS-HSPLIT-NEW" ></A >gts_hsplit_new ()</H3 ><PRE CLASS="PROGRAMLISTING" ><A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A >* gts_hsplit_new (<A HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS" >GtsHSplitClass</A > *klass, <A HREF="gts-vertex-split.html#GTSSPLIT" >GtsSplit</A > *vs);</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="AEN16613"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >klass</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLITCLASS" ><SPAN CLASS="TYPE" >GtsHSplitClass</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16620"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >vs</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16627"><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-hierarchical-vertex-split.html#GTSHSPLIT" ><SPAN CLASS="TYPE" >GtsHSplit</SPAN ></A >, hierarchical extension of <CODE CLASS="PARAMETER" >vs</CODE >.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16635" ></A ><H3 ><A NAME="GTS-HSPLIT-COLLAPSE" ></A >gts_hsplit_collapse ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > gts_hsplit_collapse (<A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A > *hs, <A HREF="gts-hierarchical-surfaces.html#GTSHSURFACE" >GtsHSurface</A > *hsurface);</PRE ><P >Collapses the <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > defined by <CODE CLASS="PARAMETER" >hs</CODE >, updates the expandable and collapsable priority heaps of <CODE CLASS="PARAMETER" >hsurface</CODE >.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16651"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >hs</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" ><SPAN CLASS="TYPE" >GtsHSplit</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16658"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >hsurface</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-hierarchical-surfaces.html#GTSHSURFACE" ><SPAN CLASS="TYPE" >GtsHSurface</SPAN ></A >.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16665" ></A ><H3 ><A NAME="GTS-HSPLIT-EXPAND" ></A >gts_hsplit_expand ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > gts_hsplit_expand (<A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A > *hs, <A HREF="gts-hierarchical-surfaces.html#GTSHSURFACE" >GtsHSurface</A > *hsurface);</PRE ><P >Expands the <A HREF="gts-vertex-split.html#GTSSPLIT" ><SPAN CLASS="TYPE" >GtsSplit</SPAN ></A > defined by <CODE CLASS="PARAMETER" >hs</CODE > (which must be expandable) and updates the priority heaps of <CODE CLASS="PARAMETER" >hsurface</CODE >.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16681"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >hs</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" ><SPAN CLASS="TYPE" >GtsHSplit</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16688"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >hsurface</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-hierarchical-surfaces.html#GTSHSURFACE" ><SPAN CLASS="TYPE" >GtsHSurface</SPAN ></A >.</P ></TD ></TR ></TBODY ></TABLE ></DIV ><HR><DIV CLASS="REFSECT2" ><A NAME="AEN16695" ></A ><H3 ><A NAME="GTS-HSPLIT-FORCE-EXPAND" ></A >gts_hsplit_force_expand ()</H3 ><PRE CLASS="PROGRAMLISTING" ><GTKDOCLINK HREF="VOID" >void</GTKDOCLINK > gts_hsplit_force_expand (<A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" >GtsHSplit</A > *hs, <A HREF="gts-hierarchical-surfaces.html#GTSHSURFACE" >GtsHSurface</A > *hsurface);</PRE ><P >Forces the expansion of <CODE CLASS="PARAMETER" >hs</CODE > by first expanding all its dependencies not already expanded.</P ><P ></P ><P ></P ><TABLE CLASS="variablelist" BORDER="0" CELLSPACING="0" CELLPADDING="4" ><TBODY ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16708"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >hs</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-hierarchical-vertex-split.html#GTSHSPLIT" ><SPAN CLASS="TYPE" >GtsHSplit</SPAN ></A >.</P ></TD ></TR ><TR ><TD ALIGN="LEFT" VALIGN="TOP" ><A NAME="AEN16715"><SPAN STYLE="white-space: nowrap" ><CODE CLASS="PARAMETER" >hsurface</CODE > :</SPAN ></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > a <A HREF="gts-hierarchical-surfaces.html#GTSHSURFACE" ><SPAN CLASS="TYPE" >GtsHSurface</SPAN ></A >.</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-progressive-surfaces.html" ><B ><<< Progressive surfaces</B ></A ></TD ><TD ALIGN="right" ><A ACCESSKEY="n" HREF="gts-hierarchical-surfaces.html" ><B >Hierarchical surfaces >>></B ></A ></TD ></TR ></TABLE ></BODY ></HTML >