acis_tutorials_(math_classes).htm

来自「acis说明文档」· HTM 代码 · 共 600 行 · 第 1/4 页

HTM
600
字号
		pos_array<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span> = <span class="kw5">SPAposition</span><span class="br0">&#40;</span> <span class="nu0">5.0</span>, <span class="nu0">-5.0</span>,  <span class="nu0">1.0</span><span class="br0">&#41;</span>;		pos_array<span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span> = <span class="kw5">SPAposition</span><span class="br0">&#40;</span><span class="nu0">-5.0</span>, <span class="nu0">-5.0</span>, <span class="nu0">-1.0</span><span class="br0">&#41;</span>;&nbsp;		<span class="kw7">BODY</span> * my_body = <span class="kw2">NULL</span>;		result = api_make_wire <span class="br0">&#40;</span>my_body, <span class="nu0">5</span>, pos_array, my_body<span class="br0">&#41;</span>;		CHECK_RESULT&nbsp;		<span class="kw6">ACIS_DELETE</span> <span class="br0">&#91;</span><span class="br0">&#93;</span> pos_array;  <span class="co1">// De-allocate the array.</span>&nbsp;		<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>&nbsp;		<span class="kw7">WIRE</span> * 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="kw7">FACE</span> * my_face = <span class="kw2">NULL</span>;		result = api_cover_wire <span class="br0">&#40;</span>my_wire, *<span class="br0">&#40;</span><span class="kw7">surface</span>*<span class="br0">&#41;</span>NULL_REF, my_face<span class="br0">&#41;</span>;		CHECK_RESULT&nbsp;		<span class="co1">// Convert the solid body into a sheet body.</span>&nbsp;		result = api_body_to_2d <span class="br0">&#40;</span>my_body<span class="br0">&#41;</span>;		CHECK_RESULT&nbsp;		<span class="co1">// Let's query the face before we split it. </span>&nbsp;		<span class="kw3">printf</span> <span class="br0">&#40;</span><span class="st0">&quot;Before splitting the face...<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;		my_debug_face<span class="br0">&#40;</span>my_face<span class="br0">&#41;</span>;&nbsp;		<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>&nbsp;		result = api_split_face <span class="br0">&#40;</span>my_face, <span class="kw2">TRUE</span>, <span class="kw2">TRUE</span>, <span class="nu0">0.5</span><span class="br0">&#41;</span>; 		CHECK_RESULT&nbsp;		<span class="co1">// We should now have two faces in the body.</span>&nbsp;		<span class="kw7">ENTITY_LIST</span> faces;		get_faces <span class="br0">&#40;</span>my_body, faces<span class="br0">&#41;</span>;		<span class="kw1">if</span> <span class="br0">&#40;</span>faces.<span class="me1">count</span><span class="br0">&#40;</span><span class="br0">&#41;</span>&nbsp;!= <span class="nu0">2</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;Unexpected number of faces!<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">// Do the faces share the same surface?</span>&nbsp;		<span class="kw3">printf</span> <span class="br0">&#40;</span><span class="st0">&quot;Surface underlying 1st face is 0x%x<span class="es0">\n</span>&quot;</span>, 			<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw7">FACE</span>*<span class="br0">&#41;</span>faces<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>-&gt;<span class="me3">geometry</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;		<span class="kw3">printf</span> <span class="br0">&#40;</span><span class="st0">&quot;Surface underlying 2nd face is 0x%x<span class="es0">\n</span><span class="es0">\n</span>&quot;</span>, 			<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw7">FACE</span>*<span class="br0">&#41;</span>faces<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span>-&gt;<span class="me3">geometry</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&nbsp;		<span class="co1">// Let's query the faces after the split. </span>&nbsp;		<span class="kw3">printf</span> <span class="br0">&#40;</span><span class="st0">&quot;Face 0 after splitting the face...<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;		my_debug_face<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw7">FACE</span>*<span class="br0">&#41;</span>faces<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;		<span class="kw3">printf</span> <span class="br0">&#40;</span><span class="st0">&quot;Face 1 after splitting the face...<span class="es0">\n</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;		my_debug_face<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw7">FACE</span>*<span class="br0">&#41;</span>faces<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><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>;		CHECK_RESULT&nbsp;	<span class="kw6">API_END</span>&nbsp;	<span class="kw1">return</span> result.<span class="me1">error_number</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<span class="br0">&#125;</span>&nbsp;<span class="kw4">void</span> my_debug_face<span class="br0">&#40;</span><span class="kw7">FACE</span> * my_face<span class="br0">&#41;</span> <span class="br0">&#123;</span>	<span class="co1">// This function performs a number of queries on the given face.</span>&nbsp;	<span class="co1">// Examine the parameter ranges of the surface and the face.  </span>&nbsp;	<span class="kw7">surface</span> <span class="kw4">const</span> &amp; surf = my_face-&gt;<span class="me3">geometry</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me3">equation</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;	<span class="kw5">SPApar_box</span> s_range = surf.<span class="me1">param_range</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;<span class="es0">\t</span>surface u range is (%g,&nbsp;%g)<span class="es0">\n</span>&quot;</span>,		s_range.<span class="me1">u_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">start_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, s_range.<span class="me1">u_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">end_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</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>surface v range is (%g,&nbsp;%g)<span class="es0">\n</span><span class="es0">\n</span>&quot;</span>,		s_range.<span class="me1">v_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">start_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, s_range.<span class="me1">v_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">end_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&nbsp;	<span class="kw5">SPApar_box</span> f_range;	<span class="kw5">logical</span> success = sg_get_face_par_box <span class="br0">&#40;</span>my_face, f_range<span class="br0">&#41;</span>;	<span class="kw1">if</span> <span class="br0">&#40;</span>success<span class="br0">&#41;</span> <span class="br0">&#123;</span>		<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\t</span>face u range is (%g,&nbsp;%g)<span class="es0">\n</span>&quot;</span>,			f_range.<span class="me1">u_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">start_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, f_range.<span class="me1">u_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">end_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</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>face v range is (%g,&nbsp;%g)<span class="es0">\n</span><span class="es0">\n</span>&quot;</span>,			f_range.<span class="me1">v_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">start_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, f_range.<span class="me1">v_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">end_pt</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">// Examine the u and v directions at the midpoint of the face.</span>&nbsp;	<span class="kw5">SPApar_pos</span> mid_param = f_range.<span class="me1">mid</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;	<span class="kw5">SPAposition</span> mid_pos;	<span class="kw5">SPAvector</span> deriv<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>;	surf.<span class="me1">eval</span><span class="br0">&#40;</span>mid_param, mid_pos, deriv<span class="br0">&#41;</span>;	<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\t</span>mid_param is (%g,&nbsp;%g)<span class="es0">\n</span>&quot;</span>,		mid_param.<span class="me1">u</span>, mid_param.<span class="me1">v</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>mid_pos is (%g,&nbsp;%g,&nbsp;%g)<span class="es0">\n</span>&quot;</span>,		mid_pos.<span class="me1">x</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, mid_pos.<span class="me1">y</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, mid_pos.<span class="me1">z</span><span class="br0">&#40;</span><span class="br0">&#41;</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>u derivative is (%g,&nbsp;%g,&nbsp;%g)<span class="es0">\n</span>&quot;</span>,		deriv<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">x</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, deriv<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">y</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, deriv<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">z</span><span class="br0">&#40;</span><span class="br0">&#41;</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>v derivative is (%g,&nbsp;%g,&nbsp;%g)<span class="es0">\n</span>&quot;</span>,		deriv<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">x</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, deriv<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">y</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, deriv<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>.<span class="me1">z</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&nbsp;	<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>&nbsp;	<span class="kw5">SPAvector</span> surface_normal = deriv<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> * deriv<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>;	<span class="kw5">SPAunit_vector</span> face_dir = normalise<span class="br0">&#40;</span><span class="br0">&#40;</span>my_face-&gt;<span class="me3">sense</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="kw7">FORWARD</span><span class="br0">&#41;</span>&nbsp;?		surface_normal&nbsp;: -surface_normal<span class="br0">&#41;</span>;	<span class="kw3">printf</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\t</span>mid_pt normal direction is (%g,&nbsp;%g,&nbsp;%g)<span class="es0">\n</span><span class="es0">\n</span>&quot;</span>,		face_dir.<span class="me1">x</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, face_dir.<span class="me1">y</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, face_dir.<span class="me1">z</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;&nbsp;	<span class="co1">// Examine the 3D bounding box of the face.</span>&nbsp;	<span class="kw5">SPAbox</span> f_box = get_face_box<span class="br0">&#40;</span>my_face<span class="br0">&#41;</span>;	<span class="kw5">SPAinterval</span> x_range = f_box.<span class="me1">x_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;	<span class="kw5">SPAinterval</span> y_range = f_box.<span class="me1">y_range</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;	<span class="kw5">SPAinterval</span> z_range = f_box.<span class="me1">z_range</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;<span class="es0">\t</span>face box x range is (%g,&nbsp;%g)<span class="es0">\n</span>&quot;</span>,		x_range.<span class="me1">start_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, x_range.<span class="me1">end_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</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>face box y range is (%g,&nbsp;%g)<span class="es0">\n</span>&quot;</span>,		y_range.<span class="me1">start_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, y_range.<span class="me1">end_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</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>face box z range is (%g,&nbsp;%g)<span class="es0">\n</span><span class="es0">\n</span>&quot;</span>,		z_range.<span class="me1">start_pt</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, z_range.<span class="me1">end_pt</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> my_initialization<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>&nbsp;	<span class="co1">// Start ACIS.</span>	<span class="kw5">outcome</span> result = api_start_modeller<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;	CHECK_RESULT&nbsp;	<span class="co1">// Call the licensing function to unlock ACIS.</span>	unlock_spatial_products_963<span class="br0">&#40;</span><span class="br0">&#41;</span>;&nbsp;	<span class="co1">// Initialize all necessary components. </span>	result = api_initialize_booleans<span class="br0">&#40;</span><span class="br0">&#41;</span>;	CHECK_RESULT&nbsp;	<span class="kw1">return</span> <span class="nu0">0</span>;<span class="br0">&#125;</span>&nbsp;<span class="kw4">int</span> my_termination<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>	<span class="co1">// Terminate all necessary components. </span>	<span class="kw5">outcome</span> result = api_terminate_booleans<span class="br0">&#40;</span><span class="br0">&#41;</span>;	CHECK_RESULT&nbsp;	<span class="co1">// Stop ACIS and release any allocated memory.</span>

⌨️ 快捷键说明

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