📄 _understanding_and_traversing_acis_topology_(part_iv).htm
字号:
<span class="co1">// Declaration of our functions.</span><span class="kw4">void</span> do_something<span class="br0">(</span><span class="br0">)</span>;<span class="kw4">int</span> my_initialization<span class="br0">(</span><span class="br0">)</span>;<span class="kw4">int</span> my_termination<span class="br0">(</span><span class="br0">)</span>; <span class="co1">// The main program...</span><span class="kw4">int</span> main <span class="br0">(</span><span class="kw4">int</span> <span class="kw7">argc</span>, <span class="kw4">char</span>** <span class="kw7">argv</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw4">int</span> ret_val = my_initialization<span class="br0">(</span><span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>ret_val<span class="br0">)</span> <span class="kw1">return</span> <span class="nu0">1</span>; do_something<span class="br0">(</span><span class="br0">)</span>; ret_val = my_termination<span class="br0">(</span><span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>ret_val<span class="br0">)</span> <span class="kw1">return</span> <span class="nu0">1</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"Program completed successfully<span class="es0">\n</span><span class="es0">\n</span>"</span><span class="br0">)</span>; <span class="kw1">return</span> <span class="nu0">0</span>;<span class="br0">}</span> <span class="kw4">void</span> do_something<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span> <span class="kw6">API_BEGIN</span> <span class="co1">// Retrieve a wire body from a SAT file. </span> <span class="co1">// Open the SAT file.</span> <span class="kw4">FILE</span> * fp = <span class="kw3">fopen</span><span class="br0">(</span><span class="st0">"wire.sat"</span>, <span class="st0">"r"</span><span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>fp == <span class="kw2">NULL</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"ERROR opening wire.sat<span class="es0">\n</span>"</span><span class="br0">)</span>; sys_error<span class="br0">(</span>API_FAILED<span class="br0">)</span>; <span class="br0">}</span> <span class="co1">// Restore all the entities from the SAT file.</span> <span class="kw7">ENTITY_LIST</span> ents; result = api_restore_entity_list<span class="br0">(</span>fp, <span class="kw2">TRUE</span>, ents<span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>!result.<span class="me1">ok</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw7">err_mess_type</span> err_no = result.<span class="me1">error_number</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"ERROR in api_restore_entity_list() %d: %s<span class="es0">\n</span>"</span>, err_no, find_err_mess<span class="br0">(</span>err_no<span class="br0">)</span><span class="br0">)</span>; sys_error<span class="br0">(</span>err_no<span class="br0">)</span>; <span class="br0">}</span> <span class="co1">// Close the SAT file.</span> <span class="kw3">fclose</span><span class="br0">(</span>fp<span class="br0">)</span>; <span class="co1">// We expect the first ENTITY to be a BODY.</span> <span class="kw7">BODY</span> * my_body = <span class="kw2">NULL</span>; <span class="kw1">if</span> <span class="br0">(</span>is_BODY<span class="br0">(</span>ents<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span><span class="br0">)</span><span class="br0">)</span> my_body = <span class="br0">(</span><span class="kw7">BODY</span>*<span class="br0">)</span> ents<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span>; <span class="kw1">else</span> <span class="br0">{</span> <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"The SAT file doesn't contain a BODY<span class="es0">\n</span>"</span><span class="br0">)</span>; sys_error<span class="br0">(</span>API_FAILED<span class="br0">)</span>; <span class="br0">}</span> <span class="co1">// Verify the body contains a single wire body.</span> <span class="kw7">WIRE</span> * my_wire = <span class="kw2">NULL</span>; <span class="kw1">if</span> <span class="br0">(</span>my_body-><span class="me3">lump</span><span class="br0">(</span><span class="br0">)</span> && my_body-><span class="me3">lump</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">next</span><span class="br0">(</span><span class="br0">)</span> == <span class="kw2">NULL</span> && my_body-><span class="me3">lump</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">shell</span><span class="br0">(</span><span class="br0">)</span> && my_body-><span class="me3">lump</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">shell</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">next</span><span class="br0">(</span><span class="br0">)</span> == <span class="kw2">NULL</span> && my_body-><span class="me3">lump</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">shell</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">wire</span><span class="br0">(</span><span class="br0">)</span> && my_body-><span class="me3">lump</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">shell</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">face</span><span class="br0">(</span><span class="br0">)</span> == <span class="kw2">NULL</span><span class="br0">)</span> my_wire = my_body-><span class="me3">lump</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">shell</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">wire</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw1">else</span> <span class="br0">{</span> <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"The SAT file doesn't contain a wire body<span class="es0">\n</span>"</span><span class="br0">)</span>; sys_error<span class="br0">(</span>API_FAILED<span class="br0">)</span>; <span class="br0">}</span> <span class="co1">// Let's obtain lists of all the coedges, edges, and vertices </span> <span class="co1">// contained in the wire. We could do this using the global</span> <span class="co1">// topological traversal functions, but let's show how this </span> <span class="co1">// can be done using ENTITY methods.</span> <span class="kw7">ENTITY_LIST</span> coedge_list; <span class="kw7">ENTITY_LIST</span> edge_list; <span class="kw7">ENTITY_LIST</span> vertex_list; <span class="co1">// Plant the start coedge in the list.</span> coedge_list.<span class="me1">add</span><span class="br0">(</span>my_wire-><span class="me3">coedge</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; <span class="co1">// For each coedge in list, plant its next and previous coedges.</span> <span class="co1">// Continue planting coedges in the list until all have been added.</span> <span class="kw1">for</span> <span class="br0">(</span><span class="kw4">int</span> i = <span class="nu0">0</span>; ; ++i<span class="br0">)</span> <span class="br0">{</span> <span class="kw7">COEDGE</span> *this_coedge = <span class="br0">(</span><span class="kw7">COEDGE</span> *<span class="br0">)</span><span class="br0">(</span>coedge_list<span class="br0">[</span>i<span class="br0">]</span><span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>this_coedge == <span class="kw2">NULL</span><span class="br0">)</span> <span class="kw2">break</span>; coedge_list.<span class="me1">add</span><span class="br0">(</span>this_coedge-><span class="me3">next</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; coedge_list.<span class="me1">add</span><span class="br0">(</span>this_coedge-><span class="me3">previous</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; <span class="br0">}</span> <span class="co1">// Given the list of coedges, it is simple to obtain</span> <span class="co1">// the lists of edges and vertices.</span> coedge_list.<span class="me1">init</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw7">COEDGE</span> * c; <span class="kw1">while</span> <span class="br0">(</span>c = <span class="br0">(</span><span class="kw7">COEDGE</span>*<span class="br0">)</span>coedge_list.<span class="me1">next</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> edge_list.<span class="me1">add</span><span class="br0">(</span>c-><span class="me3">edge</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; vertex_list.<span class="me1">add</span><span class="br0">(</span>c-><span class="me3">start</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; vertex_list.<span class="me1">add</span><span class="br0">(</span>c-><span class="me3">end</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; <span class="br0">}</span> <span class="kw4">int</span> num_coedges = coedge_list.<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw4">int</span> num_edges = edge_list.<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw4">int</span> num_vertices = vertex_list.<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"The wire body has :<span class="es0">\n</span>"</span><span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\t</span> %d coedges<span class="es0">\n</span>"</span>, num_coedges<span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\t</span> %d edges<span class="es0">\n</span>"</span>, num_edges<span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\t</span> %d vertices<span class="es0">\n</span>"</span>, num_vertices<span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\n</span>"</span><span class="br0">)</span>; <span class="co1">// Finally, debug the wire body to a file.</span> fp = <span class="kw3">fopen</span><span class="br0">(</span><span class="st0">"wire_body.dbg"</span>, <span class="st0">"w"</span><span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>fp == <span class="kw2">NULL</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"ERROR opening wire_body.dbg<span class="es0">\n</span>"</span><span class="br0">)</span>; sys_error<span class="br0">(</span>API_FAILED<span class="br0">)</span>; <span class="br0">}</span> debug_entity<span class="br0">(</span>my_body, fp<span class="br0">)</span>; <span class="kw3">fclose</span><span class="br0">(</span>fp<span class="br0">)</span>; <span class="co1">// We should delete the BODY before exiting this function.</span> result = api_delent<span class="br0">(</span>my_body<span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>!result.<span class="me1">ok</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw7">err_mess_type</span> err_no = result.<span class="me1">error_number</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"ERROR in api_delent() %d: %s<span class="es0">\n</span>"</span>,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -