📄 _understanding_and_traversing_acis_topology_(part_iv).htm
字号:
<span class="kw2">#include</span> <span class="st0">"get_top.hxx"</span> <span class="co1">// Declaration of the ACIS licensing function.</span><span class="kw4">void</span> unlock_spatial_products_<NNN><span class="br0">(</span><span class="br0">)</span>; <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">// Create a block.</span> <span class="kw7">BODY</span> * my_body; result = api_make_cuboid <span class="br0">(</span><span class="nu0">10.0</span>, <span class="nu0">10.0</span>, <span class="nu0">10.0</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_make_cuboid() %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">// First let's demonstrate the use of the global </span> <span class="co1">// topological traversal functions.</span> <span class="kw7">ENTITY_LIST</span> lump_list; <span class="kw7">ENTITY_LIST</span> shell_list; <span class="kw7">ENTITY_LIST</span> wire_list; <span class="kw7">ENTITY_LIST</span> face_list; <span class="kw7">ENTITY_LIST</span> edge_list; <span class="kw7">ENTITY_LIST</span> vertex_list; get_lumps <span class="br0">(</span>my_body, lump_list<span class="br0">)</span>; get_shells <span class="br0">(</span>my_body, shell_list<span class="br0">)</span>; get_wires <span class="br0">(</span>my_body, wire_list<span class="br0">)</span>; get_faces <span class="br0">(</span>my_body, face_list<span class="br0">)</span>; get_edges <span class="br0">(</span>my_body, edge_list<span class="br0">)</span>; get_vertices <span class="br0">(</span>my_body, vertex_list<span class="br0">)</span>; <span class="kw4">int</span> num_lumps = lump_list.<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw4">int</span> num_shells = shell_list.<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw4">int</span> num_wires = wire_list.<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw4">int</span> num_faces = face_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 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 lumps<span class="es0">\n</span>"</span>, num_lumps<span class="br0">)</span>; <span class="kw3">printf</span> <span class="br0">(</span><span class="st0">"<span class="es0">\t</span> %d shells<span class="es0">\n</span>"</span>, num_shells<span class="br0">)</span>; <span class="kw3">printf</span> <span class="br0">(</span><span class="st0">"<span class="es0">\t</span> %d wires<span class="es0">\n</span>"</span>, num_wires<span class="br0">)</span>; <span class="kw3">printf</span> <span class="br0">(</span><span class="st0">"<span class="es0">\t</span> %d faces<span class="es0">\n</span>"</span>, num_faces<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">// Let's traverse one of the lists using the index operator.</span> <span class="co1">// Let's see how many edges each of the faces have.</span> <span class="kw4">int</span> i; <span class="kw7">ENTITY_LIST</span> temp_edge_list; <span class="kw1">for</span> <span class="br0">(</span>i = <span class="nu0">0</span>; i < num_faces; i++<span class="br0">)</span> <span class="br0">{</span> <span class="kw7">FACE</span> * f = <span class="br0">(</span><span class="kw7">FACE</span>*<span class="br0">)</span> face_list<span class="br0">[</span>i<span class="br0">]</span>; get_edges <span class="br0">(</span>f, temp_edge_list<span class="br0">)</span>; <span class="kw4">int</span> temp_num_edges = temp_edge_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">"face[%d] has %d edges<span class="es0">\n</span>"</span>, i, temp_num_edges<span class="br0">)</span>; temp_edge_list.<span class="me1">clear</span><span class="br0">(</span><span class="br0">)</span>; <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">// Let's traverse one of the lists using init() and next().</span> <span class="co1">// Let's see how many faces each of the edges have.</span> i = <span class="nu0">0</span>; <span class="kw7">EDGE</span> * e = <span class="kw2">NULL</span>; edge_list.<span class="me1">init</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw7">ENTITY_LIST</span> temp_face_list; <span class="kw1">while</span> <span class="br0">(</span>e = <span class="br0">(</span><span class="kw7">EDGE</span>*<span class="br0">)</span> edge_list.<span class="me1">next</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> get_faces <span class="br0">(</span>e, temp_face_list<span class="br0">)</span>; <span class="kw4">int</span> temp_num_faces = temp_face_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">"edge[%d] has %d faces<span class="es0">\n</span>"</span>, i++, temp_num_faces<span class="br0">)</span>; temp_face_list.<span class="me1">clear</span><span class="br0">(</span><span class="br0">)</span>; <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">// Now let's demonstrate the use of some of </span> <span class="co1">// the topological ENTITY class methods.</span> <span class="co1">// Let's see how many coedges each of the faces have.</span> <span class="kw1">for</span> <span class="br0">(</span>i = <span class="nu0">0</span>; i < num_faces; i++<span class="br0">)</span> <span class="br0">{</span> <span class="kw7">FACE</span> * f = <span class="br0">(</span><span class="kw7">FACE</span>*<span class="br0">)</span> face_list<span class="br0">[</span>i<span class="br0">]</span>; <span class="kw4">int</span> temp_num_coedges = <span class="nu0">0</span>; <span class="kw7">LOOP</span> * l = f-><span class="me3">loop</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw1">while</span> <span class="br0">(</span>l<span class="br0">)</span> <span class="br0">{</span> <span class="kw7">COEDGE</span> * first_coedge = l-><span class="me3">start</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw7">COEDGE</span> * c = first_coedge; <span class="kw1">do</span> <span class="br0">{</span> temp_num_coedges++; c = c-><span class="me3">next</span><span class="br0">(</span><span class="br0">)</span>; <span class="br0">}</span> <span class="kw1">while</span> <span class="br0">(</span>c != first_coedge<span class="br0">)</span>; l = l-><span class="me3">next</span><span class="br0">(</span><span class="br0">)</span>; <span class="br0">}</span> <span class="kw3">printf</span> <span class="br0">(</span><span class="st0">"face[%d] has %d coedges<span class="es0">\n</span>"</span>, i, temp_num_coedges<span class="br0">)</span>; <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">// Let's see how many edges each of the vertices have.</span> <span class="co1">// We shall assume that the vertex is a manifold vertex</span> <span class="co1">// and that each of the edges bounded by this vertex</span> <span class="co1">// is a manifold edge. We shall also assume that each</span> <span class="co1">// face of each vertex has at least two edges. (In other</span> <span class="co1">// words, there are no closed edges.) These assumptions </span> <span class="co1">// make the algorithm much easier to understand.</span> <span class="kw1">for</span> <span class="br0">(</span>i = <span class="nu0">0</span>; i < num_vertices; i++<span class="br0">)</span> <span class="br0">{</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -