acis_tutorials_(math_classes).htm
来自「acis说明文档」· HTM 代码 · 共 600 行 · 第 1/4 页
HTM
600 行
pos_array<span class="br0">[</span><span class="nu0">3</span><span class="br0">]</span> = <span class="kw5">SPAposition</span><span class="br0">(</span> <span class="nu0">5.0</span>, <span class="nu0">-5.0</span>, <span class="nu0">1.0</span><span class="br0">)</span>; pos_array<span class="br0">[</span><span class="nu0">4</span><span class="br0">]</span> = <span class="kw5">SPAposition</span><span class="br0">(</span><span class="nu0">-5.0</span>, <span class="nu0">-5.0</span>, <span class="nu0">-1.0</span><span class="br0">)</span>; <span class="kw7">BODY</span> * my_body = <span class="kw2">NULL</span>; result = api_make_wire <span class="br0">(</span>my_body, <span class="nu0">5</span>, pos_array, my_body<span class="br0">)</span>; CHECK_RESULT <span class="kw6">ACIS_DELETE</span> <span class="br0">[</span><span class="br0">]</span> pos_array; <span class="co1">// De-allocate the array.</span> <span class="co1">// Convert the wire body into a solid body.</span> <span class="co1">// The solid body should contain one single-sided face.</span> <span class="kw7">WIRE</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="kw7">FACE</span> * my_face = <span class="kw2">NULL</span>; result = api_cover_wire <span class="br0">(</span>my_wire, *<span class="br0">(</span><span class="kw7">surface</span>*<span class="br0">)</span>NULL_REF, my_face<span class="br0">)</span>; CHECK_RESULT <span class="co1">// Convert the solid body into a sheet body.</span> result = api_body_to_2d <span class="br0">(</span>my_body<span class="br0">)</span>; CHECK_RESULT <span class="co1">// Let's query the face before we split it. </span> <span class="kw3">printf</span> <span class="br0">(</span><span class="st0">"Before splitting the face...<span class="es0">\n</span><span class="es0">\n</span>"</span><span class="br0">)</span>; my_debug_face<span class="br0">(</span>my_face<span class="br0">)</span>; <span class="co1">// Split the face into two faces along an isoparametric curve.</span> <span class="co1">// We will perform the split in the u-direction at the mid</span> <span class="co1">// parameter of the surface.</span> result = api_split_face <span class="br0">(</span>my_face, <span class="kw2">TRUE</span>, <span class="kw2">TRUE</span>, <span class="nu0">0.5</span><span class="br0">)</span>; CHECK_RESULT <span class="co1">// We should now have two faces in the body.</span> <span class="kw7">ENTITY_LIST</span> faces; get_faces <span class="br0">(</span>my_body, faces<span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>faces.<span class="me1">count</span><span class="br0">(</span><span class="br0">)</span> != <span class="nu0">2</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"Unexpected number of faces!<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">// Do the faces share the same surface?</span> <span class="kw3">printf</span> <span class="br0">(</span><span class="st0">"Surface underlying 1st face is 0x%x<span class="es0">\n</span>"</span>, <span class="br0">(</span><span class="br0">(</span><span class="kw7">FACE</span>*<span class="br0">)</span>faces<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span><span class="br0">)</span>-><span class="me3">geometry</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">"Surface underlying 2nd face is 0x%x<span class="es0">\n</span><span class="es0">\n</span>"</span>, <span class="br0">(</span><span class="br0">(</span><span class="kw7">FACE</span>*<span class="br0">)</span>faces<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span><span class="br0">)</span>-><span class="me3">geometry</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; <span class="co1">// Let's query the faces after the split. </span> <span class="kw3">printf</span> <span class="br0">(</span><span class="st0">"Face 0 after splitting the face...<span class="es0">\n</span><span class="es0">\n</span>"</span><span class="br0">)</span>; my_debug_face<span class="br0">(</span><span class="br0">(</span><span class="kw7">FACE</span>*<span class="br0">)</span>faces<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span><span class="br0">)</span>; <span class="kw3">printf</span> <span class="br0">(</span><span class="st0">"Face 1 after splitting the face...<span class="es0">\n</span><span class="es0">\n</span>"</span><span class="br0">)</span>; my_debug_face<span class="br0">(</span><span class="br0">(</span><span class="kw7">FACE</span>*<span class="br0">)</span>faces<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span><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>; CHECK_RESULT <span class="kw6">API_END</span> <span class="kw1">return</span> result.<span class="me1">error_number</span><span class="br0">(</span><span class="br0">)</span>;<span class="br0">}</span> <span class="kw4">void</span> my_debug_face<span class="br0">(</span><span class="kw7">FACE</span> * my_face<span class="br0">)</span> <span class="br0">{</span> <span class="co1">// This function performs a number of queries on the given face.</span> <span class="co1">// Examine the parameter ranges of the surface and the face. </span> <span class="kw7">surface</span> <span class="kw4">const</span> & surf = my_face-><span class="me3">geometry</span><span class="br0">(</span><span class="br0">)</span>-><span class="me3">equation</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw5">SPApar_box</span> s_range = surf.<span class="me1">param_range</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\t</span>surface u range is (%g, %g)<span class="es0">\n</span>"</span>, s_range.<span class="me1">u_range</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">start_pt</span><span class="br0">(</span><span class="br0">)</span>, s_range.<span class="me1">u_range</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">end_pt</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">\t</span>surface v range is (%g, %g)<span class="es0">\n</span><span class="es0">\n</span>"</span>, s_range.<span class="me1">v_range</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">start_pt</span><span class="br0">(</span><span class="br0">)</span>, s_range.<span class="me1">v_range</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">end_pt</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; <span class="kw5">SPApar_box</span> f_range; <span class="kw5">logical</span> success = sg_get_face_par_box <span class="br0">(</span>my_face, f_range<span class="br0">)</span>; <span class="kw1">if</span> <span class="br0">(</span>success<span class="br0">)</span> <span class="br0">{</span> <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\t</span>face u range is (%g, %g)<span class="es0">\n</span>"</span>, f_range.<span class="me1">u_range</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">start_pt</span><span class="br0">(</span><span class="br0">)</span>, f_range.<span class="me1">u_range</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">end_pt</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">\t</span>face v range is (%g, %g)<span class="es0">\n</span><span class="es0">\n</span>"</span>, f_range.<span class="me1">v_range</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">start_pt</span><span class="br0">(</span><span class="br0">)</span>, f_range.<span class="me1">v_range</span><span class="br0">(</span><span class="br0">)</span>.<span class="me1">end_pt</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; <span class="br0">}</span> <span class="co1">// Examine the u and v directions at the midpoint of the face.</span> <span class="kw5">SPApar_pos</span> mid_param = f_range.<span class="me1">mid</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw5">SPAposition</span> mid_pos; <span class="kw5">SPAvector</span> deriv<span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span>; surf.<span class="me1">eval</span><span class="br0">(</span>mid_param, mid_pos, deriv<span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\t</span>mid_param is (%g, %g)<span class="es0">\n</span>"</span>, mid_param.<span class="me1">u</span>, mid_param.<span class="me1">v</span><span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\t</span>mid_pos is (%g, %g, %g)<span class="es0">\n</span>"</span>, mid_pos.<span class="me1">x</span><span class="br0">(</span><span class="br0">)</span>, mid_pos.<span class="me1">y</span><span class="br0">(</span><span class="br0">)</span>, mid_pos.<span class="me1">z</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">\t</span>u derivative is (%g, %g, %g)<span class="es0">\n</span>"</span>, deriv<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span>.<span class="me1">x</span><span class="br0">(</span><span class="br0">)</span>, deriv<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span>.<span class="me1">y</span><span class="br0">(</span><span class="br0">)</span>, deriv<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span>.<span class="me1">z</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">\t</span>v derivative is (%g, %g, %g)<span class="es0">\n</span>"</span>, deriv<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span>.<span class="me1">x</span><span class="br0">(</span><span class="br0">)</span>, deriv<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span>.<span class="me1">y</span><span class="br0">(</span><span class="br0">)</span>, deriv<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span>.<span class="me1">z</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; <span class="co1">// We could obtain the face normal using surface::eval_normal()</span> <span class="co1">// or sg_get_face_normal(), but we already have the u and v </span> <span class="co1">// derivatives, so we can just take their cross product. </span> <span class="co1">// Remember to reverse the surface normal is the face is reversed.</span> <span class="kw5">SPAvector</span> surface_normal = deriv<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> * deriv<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span>; <span class="kw5">SPAunit_vector</span> face_dir = normalise<span class="br0">(</span><span class="br0">(</span>my_face-><span class="me3">sense</span><span class="br0">(</span><span class="br0">)</span> == <span class="kw7">FORWARD</span><span class="br0">)</span> ? surface_normal : -surface_normal<span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\t</span>mid_pt normal direction is (%g, %g, %g)<span class="es0">\n</span><span class="es0">\n</span>"</span>, face_dir.<span class="me1">x</span><span class="br0">(</span><span class="br0">)</span>, face_dir.<span class="me1">y</span><span class="br0">(</span><span class="br0">)</span>, face_dir.<span class="me1">z</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>; <span class="co1">// Examine the 3D bounding box of the face.</span> <span class="kw5">SPAbox</span> f_box = get_face_box<span class="br0">(</span>my_face<span class="br0">)</span>; <span class="kw5">SPAinterval</span> x_range = f_box.<span class="me1">x_range</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw5">SPAinterval</span> y_range = f_box.<span class="me1">y_range</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw5">SPAinterval</span> z_range = f_box.<span class="me1">z_range</span><span class="br0">(</span><span class="br0">)</span>; <span class="kw3">printf</span><span class="br0">(</span><span class="st0">"<span class="es0">\t</span>face box x range is (%g, %g)<span class="es0">\n</span>"</span>, x_range.<span class="me1">start_pt</span><span class="br0">(</span><span class="br0">)</span>, x_range.<span class="me1">end_pt</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">\t</span>face box y range is (%g, %g)<span class="es0">\n</span>"</span>, y_range.<span class="me1">start_pt</span><span class="br0">(</span><span class="br0">)</span>, y_range.<span class="me1">end_pt</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">\t</span>face box z range is (%g, %g)<span class="es0">\n</span><span class="es0">\n</span>"</span>, z_range.<span class="me1">start_pt</span><span class="br0">(</span><span class="br0">)</span>, z_range.<span class="me1">end_pt</span><span class="br0">(</span><span class="br0">)</span><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="br0">{</span> <span class="co1">// Start ACIS.</span> <span class="kw5">outcome</span> result = api_start_modeller<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span>; CHECK_RESULT <span class="co1">// Call the licensing function to unlock ACIS.</span> unlock_spatial_products_963<span class="br0">(</span><span class="br0">)</span>; <span class="co1">// Initialize all necessary components. </span> result = api_initialize_booleans<span class="br0">(</span><span class="br0">)</span>; CHECK_RESULT <span class="kw1">return</span> <span class="nu0">0</span>;<span class="br0">}</span> <span class="kw4">int</span> my_termination<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="co1">// Terminate all necessary components. </span> <span class="kw5">outcome</span> result = api_terminate_booleans<span class="br0">(</span><span class="br0">)</span>; CHECK_RESULT <span class="co1">// Stop ACIS and release any allocated memory.</span>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?