<!DOCTYPE html
  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!--
Copyright (c) 2006 UGS Corp.

All Rights Reserved.

This software and related documentation are proprietary to UGS Corp.
-->
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Simple example</title>
      <script language="javaScript">
        abridged="false";
        displayConditions=new Array();
      </script>
      <link type="text/css" href="../css/main_styles.css" rel="stylesheet">
   </head>
   <body class="bodydocs" onload="top.pageLoader()" bgcolor="#FFFFFF">
      <div class="title_topic2" id="xps10_pagetitle">Simple example</div>
      <hr noshade="true">
      <table cellspacing="4" align="center">
         <tr valign="top">
            <td bgcolor="#f7f7f7" colspan="1" rowspan="1">
               <p class="para_td"><a class="links" href="javascript:void(0)" onclick="top.openFile('routingadmin/write_overview.html');return(false);">Overview</a></p>
            </td>
            <td bgcolor="#f7f7f7" colspan="1" rowspan="1">
               <p class="para_td"><a class="links" href="javascript:void(0)" onclick="top.openFile('routingadmin/write_process.html');return(false);">How To</a></p>
            </td>
            <td bgcolor="#f7f7f7" colspan="1" rowspan="1">
               <p class="para_td"><a class="links" href="javascript:void(0)" onclick="top.openFile('routingadmin/tcl_rules.html');return(false);">Options</a></p>
            </td>
            <td bgcolor="#f7f7f7" colspan="1" rowspan="1">
               <p class="para_td">Related Topics</p>
            </td>
         </tr>
      </table><br><p class="para_topic">This simple example checks any segments to make sure the length is greater than 12.</p>
      <table bgcolor="#F0F0F0" cellpadding="2" cellspacing="4" width="95%" align="center">
         <tr valign="top">
            <td bgcolor="#f7f7f7" colspan="3" rowspan="1" valign="middle">
               <p class="para_td"><code>#include &lt;uf_defs.h&gt;<br>#include &lt;uf_assem.h&gt;<br>#include &lt;uf_obj.h&gt;<br>#include &lt;uf_object_types.h&gt;<br>#include &lt;uf_route.h&gt;<br>#define MINIMUM_SEGMENT_LENGTH 12.0<br>static void check_segment_length( tag_t rule, tag_t object );<br>extern void DESIGN_RULE_segment_length( tag_t rule,<br>UF_ROUTE_design_rule_data_p_t data )<br>{<br>int type = UF_route_segment_type;<br>/* We won't check length for any of the following reasons */<br>switch( data&rarr;reason )<br>{<br>case UF_ROUTE_DR_REASON_ASSIGN_STOCK :<br>case UF_ROUTE_DR_REASON_REMOVE_STOCK :<br>case UF_ROUTE_DR_REASON_STOCK_STYLE :<br>case UF_ROUTE_DR_REASON_CREATE_FAB :<br>case UF_ROUTE_DR_REASON_QUALIFY_PART :<br>case UF_ROUTE_DR_REASON_DELETE_PATH :<br>case UF_ROUTE_DR_REASON_EDIT_CHARX :<br>return;<br>}<br>/* Loop through the given objects, looking for segments */<br>if ( data&rarr;mode == UF_ROUTE_DR_MODE_CONCURRENT )<br>{<br>int i;<br>/* Loop through the given objects, looking for segments*/<br>for ( i = 0 ; i &lt; data&rarr;num_objects ; i++ )<br>{<br>if (UF_ROUTE_is_segments[data&rarr;objects[i])<br>{<br>check_segment_length( rule, data&rarr;objects[i] );<br>}<br>}<br>}<br>else /* Interactive/Batch Mode */<br>{<br>tag_t part = UF_ASSEM_ask_work_part( );<br>tag_t object;<br>int state;<br>/*Cycle all the segments in the part*/<br>for ( UF_ROUTE_cycle_segments[part, &amp;objects,&amp;state] ;<br>object != NULL_TAG ;<br>UF_ROUTE_next_segment( &amp;object, &amp;state) )<br>{<br>check_segment_length( rule, object );<br>}<br>}<br>}<br>static void check_segment_length( tag_t rule, tag_t object )<br>{<br>tag_t new_violation;<br>double length;<br>char long_description[200];<br>/* Inquire the length of the segment */<br>UF_ROUTE_ask_segment_length( object, &amp;length );<br>/* A segment is in violation if the length is less than the minimum */<br>if ( length &lt; MINIMUM_SEGMENT_LENGTH )<br>{<br>/* The object is in violation of the rule, create (or update)<br>* a violation of this rule, by this object */<br>sprintf( long_description,<br>&quot;Segments may not be shorter than 12.0 inches,\n\<br>Your segment is %f inches long.&quot;, length );<br>UF_RULE_create_or_update_vio( object, rule,<br>&quot;Segment too short&quot;,<br>long_description,<br>1, &amp;object, &amp; new_violation );<br>}<br>else<br>{<br>/* This object is now okay, clear any previous violation<br>* of this rule by this object */<br>UF_RULE_delete_vio_by_obj_rule( object, rule );<br>}<br>}</code></p>
            </td>
         </tr>
      </table><br></body>
</html>