⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _understanding_and_traversing_acis_topology_(part_iv).htm

📁 acis说明文档
💻 HTM
📖 第 1 页 / 共 5 页
字号:
&nbsp;<span class="co1">// Declaration of our functions.</span><span class="kw4">void</span> do_something<span class="br0">&#40;</span><span class="br0">&#41;</span>;<span class="kw4">int</span> my_initialization<span class="br0">&#40;</span><span class="br0">&#41;</span>;<span class="kw4">int</span> my_termination<span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp;<span class="co1">// The main program...</span><span class="kw4">int</span> main <span class="br0">&#40;</span><span class="kw4">int</span> <span class="kw7">argc</span>, <span class="kw4">char</span>** <span class="kw7">argv</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>&nbsp;	<span class="kw4">int</span> ret_val = my_initialization<span class="br0">&#40;</span><span class="br0">&#41;</span>;	<span class="kw1">if</span> <span class="br0">&#40;</span>ret_val<span class="br0">&#41;</span> 		<span class="kw1">return</span> <span class="nu0">1</span>;&nbsp;	do_something<span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp;	ret_val = my_termination<span class="br0">&#40;</span><span class="br0">&#41;</span>;	<span class="kw1">if</span> <span class="br0">&#40;</span>ret_val<span class="br0">&#41;</span>		<span class="kw1">return</span> <span class="nu0">1</span>;&nbsp;	<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;Program completed successfully<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;	<span class="kw1">return</span> <span class="nu0">0</span>;<span class="br0">&#125;</span>&nbsp;<span class="kw4">void</span> do_something<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>&nbsp;	<span class="kw6">API_BEGIN</span>&nbsp;		<span class="co1">// Retrieve a wire body from a SAT file. </span>&nbsp;		<span class="co1">// Open the SAT file.</span>		<span class="kw4">FILE</span> * fp = <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;wire.sat&quot;</span>, <span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span>;		<span class="kw1">if</span> <span class="br0">&#40;</span>fp == <span class="kw2">NULL</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>			<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;ERROR opening wire.sat<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;			sys_error<span class="br0">&#40;</span>API_FAILED<span class="br0">&#41;</span>;		<span class="br0">&#125;</span>&nbsp;		<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">&#40;</span>fp, <span class="kw2">TRUE</span>, ents<span class="br0">&#41;</span>;		<span class="kw1">if</span> <span class="br0">&#40;</span>!result.<span class="me1">ok</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>			<span class="kw7">err_mess_type</span> err_no = result.<span class="me1">error_number</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;			<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;ERROR in api_restore_entity_list()&nbsp;%d:&nbsp;%s<span class="es0">\n</span>&quot;</span>,				err_no, find_err_mess<span class="br0">&#40;</span>err_no<span class="br0">&#41;</span><span class="br0">&#41;</span>;			sys_error<span class="br0">&#40;</span>err_no<span class="br0">&#41;</span>;		<span class="br0">&#125;</span>&nbsp;		<span class="co1">// Close the SAT file.</span>		<span class="kw3">fclose</span><span class="br0">&#40;</span>fp<span class="br0">&#41;</span>;&nbsp;		<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">&#40;</span>is_BODY<span class="br0">&#40;</span>ents<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>			my_body = <span class="br0">&#40;</span><span class="kw7">BODY</span>*<span class="br0">&#41;</span> ents<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;		<span class="kw1">else</span> <span class="br0">&#123;</span>			<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;The SAT file doesn't contain a BODY<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;			sys_error<span class="br0">&#40;</span>API_FAILED<span class="br0">&#41;</span>;		<span class="br0">&#125;</span>&nbsp;		<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">&#40;</span>my_body-&gt;<span class="me3">lump</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &amp;&amp;			my_body-&gt;<span class="me3">lump</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">next</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="kw2">NULL</span> &amp;&amp;			my_body-&gt;<span class="me3">lump</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">shell</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &amp;&amp; 			my_body-&gt;<span class="me3">lump</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">shell</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">next</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="kw2">NULL</span> &amp;&amp;			my_body-&gt;<span class="me3">lump</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">shell</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">wire</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &amp;&amp;			my_body-&gt;<span class="me3">lump</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">shell</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">face</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="kw2">NULL</span><span class="br0">&#41;</span>&nbsp;			my_wire = my_body-&gt;<span class="me3">lump</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">shell</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">wire</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;		<span class="kw1">else</span> <span class="br0">&#123;</span>			<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;The SAT file doesn't contain a wire body<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;			sys_error<span class="br0">&#40;</span>API_FAILED<span class="br0">&#41;</span>;		<span class="br0">&#125;</span>&nbsp;		<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>&nbsp;		<span class="kw7">ENTITY_LIST</span> coedge_list;		<span class="kw7">ENTITY_LIST</span> edge_list;		<span class="kw7">ENTITY_LIST</span> vertex_list;&nbsp;		<span class="co1">// Plant the start coedge in the list.</span>&nbsp;		coedge_list.<span class="me1">add</span><span class="br0">&#40;</span>my_wire-&gt;<span class="me3">coedge</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&nbsp;		<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>&nbsp;		<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i = <span class="nu0">0</span>;&nbsp;; ++i<span class="br0">&#41;</span> <span class="br0">&#123;</span>			<span class="kw7">COEDGE</span> *this_coedge = <span class="br0">&#40;</span><span class="kw7">COEDGE</span> *<span class="br0">&#41;</span><span class="br0">&#40;</span>coedge_list<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>;&nbsp;			<span class="kw1">if</span> <span class="br0">&#40;</span>this_coedge == <span class="kw2">NULL</span><span class="br0">&#41;</span>				<span class="kw2">break</span>;&nbsp;			coedge_list.<span class="me1">add</span><span class="br0">&#40;</span>this_coedge-&gt;<span class="me3">next</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;			coedge_list.<span class="me1">add</span><span class="br0">&#40;</span>this_coedge-&gt;<span class="me3">previous</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;		<span class="br0">&#125;</span>&nbsp;		<span class="co1">// Given the list of coedges, it is simple to obtain</span>		<span class="co1">// the lists of edges and vertices.</span>&nbsp;		coedge_list.<span class="me1">init</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;		<span class="kw7">COEDGE</span> * c;		<span class="kw1">while</span> <span class="br0">&#40;</span>c = <span class="br0">&#40;</span><span class="kw7">COEDGE</span>*<span class="br0">&#41;</span>coedge_list.<span class="me1">next</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>			edge_list.<span class="me1">add</span><span class="br0">&#40;</span>c-&gt;<span class="me3">edge</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;			vertex_list.<span class="me1">add</span><span class="br0">&#40;</span>c-&gt;<span class="me3">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;			vertex_list.<span class="me1">add</span><span class="br0">&#40;</span>c-&gt;<span class="me3">end</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;		<span class="br0">&#125;</span>&nbsp;		<span class="kw4">int</span> num_coedges = coedge_list.<span class="me1">count</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;		<span class="kw4">int</span> num_edges = edge_list.<span class="me1">count</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;		<span class="kw4">int</span> num_vertices = vertex_list.<span class="me1">count</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp;		<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;The wire body has&nbsp;:<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;		<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\t</span>&nbsp;%d coedges<span class="es0">\n</span>&quot;</span>, num_coedges<span class="br0">&#41;</span>;		<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\t</span>&nbsp;%d edges<span class="es0">\n</span>&quot;</span>, num_edges<span class="br0">&#41;</span>;		<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\t</span>&nbsp;%d vertices<span class="es0">\n</span>&quot;</span>, num_vertices<span class="br0">&#41;</span>;		<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;&nbsp;		<span class="co1">// Finally, debug the wire body to a file.</span>		fp = <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="st0">&quot;wire_body.dbg&quot;</span>, <span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span>;		<span class="kw1">if</span> <span class="br0">&#40;</span>fp == <span class="kw2">NULL</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>			<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;ERROR opening wire_body.dbg<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;			sys_error<span class="br0">&#40;</span>API_FAILED<span class="br0">&#41;</span>;		<span class="br0">&#125;</span>		debug_entity<span class="br0">&#40;</span>my_body, fp<span class="br0">&#41;</span>;		<span class="kw3">fclose</span><span class="br0">&#40;</span>fp<span class="br0">&#41;</span>;&nbsp;		<span class="co1">// We should delete the BODY before exiting this function.</span>&nbsp;		result = api_delent<span class="br0">&#40;</span>my_body<span class="br0">&#41;</span>;		<span class="kw1">if</span> <span class="br0">&#40;</span>!result.<span class="me1">ok</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>			<span class="kw7">err_mess_type</span> err_no = result.<span class="me1">error_number</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;			<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;ERROR in api_delent()&nbsp;%d:&nbsp;%s<span class="es0">\n</span>&quot;</span>,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -